單片機實現串口協議的網絡化
網卡芯片接收到以太網數據包后,存在CURR指向的頁面中。一個數據包可以占據一頁,也可以占據多頁。在接收包的包頭里,保存有該包的信息。包頭格式如表1:

讀完這個包頭,我們就能知道本包的接收狀態,包長度,以及下一個包的位置。在接收循環中,檢查中斷狀態寄存器ISR狀態,發現有新包來,先讀取包頭信息,接著按照包頭指示讀取全包,然后改寫BNRY,再接著讀下一個包,這樣循環,直到達到CURR位置。注意,一個包有可能占據接收緩沖區的首、尾頁面,此時須小心讀取。
發送數據包比較簡單,將準備好的數據用DMA傳到發送緩沖區,然后設置發送長度到TBCR1和TBCR0中,再設置傳輸開始頁面,即令TPSR=0x40,最后,使CR=0x26,就開始傳送了。
傳送完成后要清掉中斷狀態寄存器ISR的發送完成標志。值得注意的是,發送包的包長度不能小于以太網規定的60byte,否則網卡不會將其發出。
3.1 TCPIP協議棧和鏈路層格式
Internet上使用的是TCP/IP協議簇,由下至上包含四層:數據鏈路層、網絡層(IP)、傳輸層(TCP)和應用層。我們在單片機上能實現的是數據鏈路層的功能,上層協議鑒于單片機有限的資源,只能實現部分功能。TCP/IP協議棧如表2:

數據鏈路層處于協議棧的最低層,傳輸以太網的物理傳輸幀,其幀格式如表3:

數據鏈路層是所有TCP/IP包的基礎,所有它上層的包都被封裝到鏈路層幀的數據段中。鏈路層就是MAC對MAC的通信。
3.2 PING命令在單片機上的實現
PING是網絡層(IP層)的命令,網絡層就是IP對IP之間的通信。主機對一個目標IP地址發出狀態請求,后者發出回應,這樣,就可以用來檢查兩者之間的線路是否暢通。這里涉及到兩個網絡層協議:
ARP和ICMP。首先,網絡中要知道目標IP的MAC地址,才能發送數據。為了獲取該地址,我們向整個網絡發送一個ARP廣播包,詢問該IP對應的MAC地址,然后目標IP應答,我們就從應答信息中得到MAC地址。其次,發送一個ICMP包,請求目標IP狀態,目標IP回應,就完成網絡連接測試。在我們的實驗中,發出PING命令的是網絡中的PC主機,接收信號并產生響應的是我們的單片機系統。我們假定單片機系統控制的網卡的IP為192.168.0.176。














評論