單片機(jī)實(shí)現(xiàn)串口協(xié)議的網(wǎng)絡(luò)化
網(wǎng)卡芯片接收到以太網(wǎng)數(shù)據(jù)包后,存在CURR指向的頁(yè)面中。一個(gè)數(shù)據(jù)包可以占據(jù)一頁(yè),也可以占據(jù)多頁(yè)。在接收包的包頭里,保存有該包的信息。包頭格式如表1:
讀完這個(gè)包頭,我們就能知道本包的接收狀態(tài),包長(zhǎng)度,以及下一個(gè)包的位置。在接收循環(huán)中,檢查中斷狀態(tài)寄存器ISR狀態(tài),發(fā)現(xiàn)有新包來(lái),先讀取包頭信息,接著按照包頭指示讀取全包,然后改寫B(tài)NRY,再接著讀下一個(gè)包,這樣循環(huán),直到達(dá)到CURR位置。注意,一個(gè)包有可能占據(jù)接收緩沖區(qū)的首、尾頁(yè)面,此時(shí)須小心讀取。
發(fā)送數(shù)據(jù)包比較簡(jiǎn)單,將準(zhǔn)備好的數(shù)據(jù)用DMA傳到發(fā)送緩沖區(qū),然后設(shè)置發(fā)送長(zhǎng)度到TBCR1和TBCR0中,再設(shè)置傳輸開(kāi)始頁(yè)面,即令TPSR=0x40,最后,使CR=0x26,就開(kāi)始傳送了。
傳送完成后要清掉中斷狀態(tài)寄存器ISR的發(fā)送完成標(biāo)志。值得注意的是,發(fā)送包的包長(zhǎng)度不能小于以太網(wǎng)規(guī)定的60byte,否則網(wǎng)卡不會(huì)將其發(fā)出。
3 TCP/IP協(xié)議在單片機(jī)上的軟件設(shè)計(jì)
3.1 TCPIP協(xié)議棧和鏈路層格式
Internet上使用的是TCP/IP協(xié)議簇,由下至上包含四層:數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層(IP)、傳輸層(TCP)和應(yīng)用層。我們?cè)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/單片機(jī)">單片機(jī)上能實(shí)現(xiàn)的是數(shù)據(jù)鏈路層的功能,上層協(xié)議鑒于單片機(jī)有限的資源,只能實(shí)現(xiàn)部分功能。TCP/IP協(xié)議棧如表2:
數(shù)據(jù)鏈路層處于協(xié)議棧的最低層,傳輸以太網(wǎng)的物理傳輸幀,其幀格式如表3:
數(shù)據(jù)鏈路層是所有TCP/IP包的基礎(chǔ),所有它上層的包都被封裝到鏈路層幀的數(shù)據(jù)段中。鏈路層就是MAC對(duì)MAC的通信。
3.2 PING命令在單片機(jī)上的實(shí)現(xiàn)
PING是網(wǎng)絡(luò)層(IP層)的命令,網(wǎng)絡(luò)層就是IP對(duì)IP之間的通信。主機(jī)對(duì)一個(gè)目標(biāo)IP地址發(fā)出狀態(tài)請(qǐng)求,后者發(fā)出回應(yīng),這樣,就可以用來(lái)檢查兩者之間的線路是否暢通。這里涉及到兩個(gè)網(wǎng)絡(luò)層協(xié)議:
ARP和ICMP。首先,網(wǎng)絡(luò)中要知道目標(biāo)IP的MAC地址,才能發(fā)送數(shù)據(jù)。為了獲取該地址,我們向整個(gè)網(wǎng)絡(luò)發(fā)送一個(gè)ARP廣播包,詢問(wèn)該IP對(duì)應(yīng)的MAC地址,然后目標(biāo)IP應(yīng)答,我們就從應(yīng)答信息中得到MAC地址。其次,發(fā)送一個(gè)ICMP包,請(qǐng)求目標(biāo)IP狀態(tài),目標(biāo)IP回應(yīng),就完成網(wǎng)絡(luò)連接測(cè)試。在我們的實(shí)驗(yàn)中,發(fā)出PING命令的是網(wǎng)絡(luò)中的PC主機(jī),接收信號(hào)并產(chǎn)生響應(yīng)的是我們的單片機(jī)系統(tǒng)。我們假定單片機(jī)系統(tǒng)控制的網(wǎng)卡的IP為192.168.0.176。
評(píng)論