NANO2開發(fā)板實例之__FPGA實現(xiàn)UDP數(shù)據(jù)收發(fā)數(shù)據(jù) 1、首先需要了解網(wǎng)絡(luò)分層結(jié)構(gòu),直接看圖,分層架構(gòu)已經(jīng)很清晰了。 ![]() ![]() 了解一下這些名詞 UDP(User Datagram Protocol)用戶數(shù)據(jù)包協(xié)議 IP(Internet Protocol(網(wǎng)絡(luò)之間互連的協(xié)議)) MAC(MediaAccessControl,媒體訪問控制,數(shù)據(jù)鏈路層) PHY(Physical Layer Device物理層) 1、需要了解MAC層和PHY的硬件接口,只介紹GMII,和MII,其它類似 網(wǎng)絡(luò)接口GMII/MII MAC(MediaAccessControl )層和PHY層鏈接接口GMII (Gigabit Medium Independent Interface) ![]() 時鐘接口 GTX_CLK 125M RX_CLK 125M 數(shù)據(jù)接口 TXD[7:0] RXD[7:0] TX_EN, 發(fā)送數(shù)據(jù)使能 TX_ER,發(fā)送數(shù)據(jù)錯誤 RX_DV, 接收數(shù)據(jù)有效 RX_ER 接收出錯指示 MDIO/MDC 控制接口 MDC為控制時鐘 MDIO控制數(shù)據(jù) 2、MII(Media Independent Interface)接口 ![]() 時鐘接口 TX_CLK RX_CLK 25M(100M) 數(shù)據(jù)接口 TXD[3:0] TX_EN TX_ER RXD[3:0] RX_DV RX_ER 控制接口 MDC/MDIO CRS 載波偵測 COL 沖突檢測 3、需要了解TCP/IP協(xié)議,UDP協(xié)議,ICMP協(xié)議 ![]() 以太網(wǎng)幀 ![]() 前序,以太網(wǎng)幀頭,0x55*7,0xd5共8byte. 目的MAC地址,源地址MAC分別為6個byte. 協(xié)議類型,比如0x0800,表示IP協(xié)議幀,0x0806表示ARP幀。 FCS為4byte校驗序列。 網(wǎng)絡(luò)長度為以太網(wǎng)(Ethernet)數(shù)據(jù)幀的長度必須在46-1500字節(jié)之間,這是由以太網(wǎng)的物理特性決定的. IP報文如下 ![]() 1、4位版本,表示IPV4。 2、包頭長度4,為4*5=20字節(jié),表示IP幀頭有20字節(jié)。 3、16位總長度,字段為16進(jìn)制表示,報文總長度,不含最后幀的FCS校驗。 4、8位生存時間,表示數(shù)據(jù)包在網(wǎng)絡(luò)上生存多久,每通過一個路由器該值減一,為0時將被路由器丟棄。TTL<64 128< TTL<256表示LINUX操作系統(tǒng),64 5、8位協(xié)議,16進(jìn)制表示,常用的協(xié)議及其十進(jìn)制數(shù)值包括ICMP(1)、TCP(6)、UDP(17)。 6、16位首部校驗和,對IP包頭的4*5包頭進(jìn)行校驗。為了計算一份數(shù)據(jù)報的IP檢驗和,首先把檢驗和字段置為0。然后,對首部中每個16位進(jìn)行二進(jìn)制反碼求和。 7、32為源IP,目的IP,十六進(jìn)制表示。 8、選項和數(shù)據(jù)表示IP層之上的數(shù)據(jù)包。 UDP報文 ![]() 2、16為校驗和,偽頭部( 4byte源IP地址 + 4byte目的IP地址 + 0x00 + 1byte協(xié)議 + UDP長度(2byte)4byte源IP地址 + 4byte目的IP地址 + 0x00 + 1byte協(xié)議(0x11)+ UDP長度(2byte))和整個報文的校驗。UDP數(shù)據(jù)報文的長度可以為奇數(shù)字節(jié),所以在計算校驗和時需要在最后增加填充字節(jié)0,(填充字節(jié)只是為了計算校驗和,可以不被傳送)。計算方法,將校驗和先置0,然后對整個字段反碼求和。當(dāng)然UDP報文檢驗字段也可以為0,在UDP傳輸協(xié)議中,校驗和是可選的,當(dāng)校驗和字段為0時,表明該UDP報文未使用校驗和,接收方就不需要校驗和檢查了,《tcp詳解,卷1》書上有一句話:“如果校驗和的計算結(jié)果為0,則存入的值為全1(65535),這在二進(jìn)制反碼計算中是等效的”。 3、數(shù)據(jù)字節(jié)數(shù)最大為1472字節(jié),最小為**字節(jié);最好為最好不要超過512個字節(jié)。 TCP報文 ![]() ICMP報文 ![]() 1、類型字段,比如Ping請求,0x08,Ping相應(yīng)0x00. 2、代碼段,網(wǎng)絡(luò)不可到達(dá)(Code=0)、主機(jī)不可到達(dá)(Code=1)、協(xié)議不可到達(dá)(Code=2) 3、檢驗和,對整個ICMP報文進(jìn)行校驗。 4、32bit ,BE,LE identifier,sequence number。IMCP包頭為8字節(jié); 4、FPGA系統(tǒng)結(jié)構(gòu) ![]() ![]() 5、PHY芯片 PHY 88E1111 GMII 88E1116R RGMII RTL8201 MII LAT971A MII MDIO/MDC時序(讀模式) ![]() 6、軟件工具 設(shè)置PC,基于網(wǎng)路的數(shù)據(jù),必須包含MAC地址和IP地址,對于點對點的通信,必須設(shè)置IP,MAC地址的對應(yīng)。 ![]() Wireshark抓數(shù),對于正確的以太網(wǎng)數(shù)據(jù)包,可以查看到網(wǎng)絡(luò)包的數(shù)據(jù)格式,包括mac數(shù)據(jù),IP數(shù)據(jù),udp數(shù)據(jù)。 ![]() ![]() 網(wǎng)絡(luò)調(diào)試工具 用NETassist工具,可以方便的實現(xiàn)網(wǎng)絡(luò)層之上的數(shù)據(jù)收發(fā),可以看到數(shù)據(jù)回環(huán)得到了驗證。 ![]() 應(yīng)用平臺 :紅色颶風(fēng)NANO2 ![]() -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 更多了解,請關(guān)注: NANO2用戶資料鏈接 http://yunpan.cn/QpNRkwW9ZFnek NANO2 論壇鏈接 http://www.zingsoc.com/forum/forum.php 關(guān)于這款開發(fā)板,請關(guān)注新浪微博及博客 [url=%20http://weibo.com/u/5061825906] http://weibo.com/u/5061825906[/url] |