TCP/IP協(xié)議在A T91RM9200上的實(shí)現(xiàn)
——
摘要:介紹了AT91RM9200[1]芯片與DM9161E[2]的硬件接口電路設(shè)計(jì)以及驅(qū)動(dòng)程序開(kāi)發(fā)。在此基礎(chǔ)上討論了TCP/IP[3]分層實(shí)現(xiàn)方法,并根據(jù)實(shí)際情況進(jìn)行簡(jiǎn)化。最后詳細(xì)論述了TCP
/IP協(xié)議在AT91RM9200上的具體實(shí)現(xiàn)過(guò)程。
關(guān)鍵詞:TCP/IP協(xié)議;AT91RM9200;
Implement TCP/IP Protocol In AT91RM9200
Lin YunBiao1 Wu Chengke1 Li Yunsong1
(School of Communication Engineering, National Key Lab. of Integrated Service Networks, Xidian University., Xi’an 710071, China)
Abstract: This Paper firstly introduces the design of the hardware interface circuit of The At91RM9200 and DM9161E, and then discusses how to embed the TCP/IP protocol into the AT91RM9200; Secondly, It discusses the delamination realize of the TCP/IP protocol, and According to the needs of the application take some measures to simplify the protocol. Finally, it describes the process of realizing TCP/IP in AT91RM9200.
Keywords: TCP/IP Protocol; AT91RM9200;
1 引言
隨著internet的飛速發(fā)展,人們對(duì)網(wǎng)絡(luò)的要求也日益增多。尤其隨著集成電路的發(fā)展像ARM[7]那種低功耗,多功能芯片不斷出現(xiàn)。人們自然而然要求在它們上面實(shí)現(xiàn)上網(wǎng)功能,從而使它們的應(yīng)用領(lǐng)域變得更加廣泛。本文采用了ATMEL公司的AT91RM9200 ARM芯片設(shè)計(jì)與DM9161E的硬件接口電路,并且在AT91RM9100上實(shí)現(xiàn)了TCP/IP協(xié)議,使它具有了上網(wǎng)功能,最終能夠?qū)崿F(xiàn)與其他的設(shè)備進(jìn)行網(wǎng)上數(shù)據(jù)業(yè)務(wù)。
2 芯片簡(jiǎn)介
AT91RM9200是ATMEL公司推出一款基于AT920T處理器的片上系統(tǒng),內(nèi)部集成了豐富的標(biāo)準(zhǔn)接口,包括USB主/從設(shè)備接口、串口、10/100M以太網(wǎng)媒體接入控制器、SPI、TWI[1]、擴(kuò)展總線(xiàn)接口(EBI[1])等。AT91RM9200內(nèi)嵌以太網(wǎng)控制器可以半雙工或全雙工模式在10M/100Mbps速率下工作。在半雙工模式下,控制器支持IEEE802.3 CSMA/CD 協(xié)議;在全雙工模式下,它支持具有流控控制的IEEE802.3 MAC控制層。以太網(wǎng)控制器的MAC層支持MII[ 1 ](Media Independent Interface)和BDI[ 1 ](Buffered DMA Interface), MII 遵
循ISO/IEC802.3 中物理層與MAC 層分離的媒體獨(dú)立標(biāo)準(zhǔn)。物理層接口(PHY)完成所有輸入輸出數(shù)據(jù)的編碼解碼:10Base-T采用Manchester 編碼、100Base-X 采用4B/5B 編碼、100Base-T4 采用8B/6T 編碼。在接收數(shù)據(jù)時(shí),MII 接收前綴和末尾都加CRC 的原始數(shù)據(jù)包。在發(fā)送數(shù)據(jù)時(shí),MII 給數(shù)據(jù)包加上前綴和末尾的CRC,MAC層還產(chǎn)生填充數(shù)據(jù)并傳給PHY。
DM9161E是DAVICOM公司推出的一款能夠工作在1000BASE-TX和10BASE-TX的物理層收發(fā)器。在媒體方面,它提供了直接跟非屏蔽五類(lèi)雙絞線(xiàn)的接口。通過(guò)MII接口,DM9161E可以跟AT91RM9200的MAC層進(jìn)行通信。
3 硬件設(shè)計(jì)
AT91RM9200與DM9161E的硬件接口電路如圖1所示:
圖 1 AT91RM9200與DM9161E的硬件接口電路
在該系統(tǒng)中 AT91RM9200內(nèi)部集成了以太網(wǎng)控制器(EMAC),DM9161E負(fù)責(zé)物理層通信,HR901103A負(fù)責(zé)電平濾波與屏蔽五類(lèi)雙絞線(xiàn)接口。
如圖1所示AT91RM9200與DM9161E之間是通過(guò)RMII接口進(jìn)行通信。AT91RM9200的 PA15/EMDC,PA16/EMDIO分別接DM9161E的MDC[1]與 MDIO[1],這樣可以對(duì)DM9161E內(nèi)部寄存器進(jìn)行操作,包括配置DM9161E物理地址,子網(wǎng)掩碼等。
PA10/ETX1,PA9/ETX0,PA8/TXEN分別接DM9161E的TXD1,TXD0,TXEN進(jìn)行數(shù)據(jù)發(fā)送控制。
PA13/ERX1與PA12/ERX0分別接DM9161E的RXD1與RXD0進(jìn)行數(shù)據(jù)接收。AT91
RM9200的NRST接DM9161E RESET腳可以對(duì)DM9161E進(jìn)行同步復(fù)位。
DM9161E的MDINT接AT91RM9200的PC4可以實(shí)現(xiàn)當(dāng)DM9161E接收到足夠多網(wǎng)絡(luò)數(shù)據(jù)包時(shí)向AT91RM9200以太網(wǎng)控制器發(fā)接收中斷信號(hào),通知AT91RM9200對(duì)接收數(shù)據(jù)處理。
DM9161E 的RXEN接高電平,表示接收一直有效。而TXEN則由AT91RM9200進(jìn)行控制,只有有數(shù)據(jù)才有效。
AT91RM9200的PA11/ECRSDV與PA14/ERXER分別接DM9161E的RXDV與RXER,可以監(jiān)控接收到的數(shù)據(jù)的狀態(tài)。
4 軟件設(shè)計(jì)
4.1設(shè)備驅(qū)動(dòng)設(shè)計(jì)
設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)包括如下幾個(gè)部分:
(1) 設(shè)備初始化:為了使DM9161E收發(fā)數(shù)據(jù),必須對(duì)它內(nèi)部寄存器進(jìn)行配置,這些配置包括物理地址、IP地址。為了實(shí)現(xiàn)整個(gè)TCP/IP協(xié)議,還要有一個(gè)定時(shí)器。
(2) 中斷服務(wù)程序:由于網(wǎng)絡(luò)服務(wù)中是否有數(shù)據(jù)是未知的,所以必須有一個(gè)中斷服務(wù)程序,負(fù)責(zé)處理DM9161E接收到數(shù)據(jù)包時(shí)向AT91RM9200EMAC控制器發(fā)出中斷請(qǐng)求,并分析每一個(gè)數(shù)據(jù)包,根據(jù)包類(lèi)型向相應(yīng)得上層協(xié)議層發(fā)送。
(3) 幀數(shù)據(jù)發(fā)送:為了能使數(shù)據(jù)在網(wǎng)絡(luò)上傳輸,還要將IP層過(guò)來(lái)的數(shù)據(jù)進(jìn)行裝幀.在每個(gè)數(shù)據(jù)包前面加入接收端以太網(wǎng)地址、發(fā)送端以太網(wǎng)地址、服務(wù)類(lèi)型、校驗(yàn)碼。然后把裝幀后的數(shù)據(jù)包送到DM9161E發(fā)送緩沖區(qū),配置相應(yīng)發(fā)送寄存器:發(fā)送數(shù)據(jù)包緩沖區(qū)地址、數(shù)據(jù)包長(zhǎng)度。寫(xiě)完長(zhǎng)度寄存器后DM9161E就開(kāi)始啟動(dòng)發(fā)送。
(4) 幀數(shù)據(jù)接收:將中斷服務(wù)程序送過(guò)來(lái)的數(shù)據(jù)包進(jìn)行分析,如果是ARP包則將該包交給ARP模塊處理。如果是IP包則將該包發(fā)送給IP模塊處理。
4.2 TCP/IP的具體實(shí)現(xiàn)
由于傳統(tǒng)PC機(jī)內(nèi)存資源豐富,而且還是多任務(wù)系統(tǒng),所以在傳統(tǒng)PC機(jī)上能夠?qū)崿F(xiàn)完整TCP/IP協(xié)議。但在AT91RM9200實(shí)現(xiàn)的嵌入式系統(tǒng)中,由于受到內(nèi)存和處理速度限制,不可能實(shí)現(xiàn)完整TCP/IP。因此必須對(duì)TCP/IP根據(jù)實(shí)際情況進(jìn)行簡(jiǎn)化。本文在AT91RM9200上面實(shí)現(xiàn)ARP、IP、ICMP、UDP和TCP,并對(duì)它們按層(圖2 所示)進(jìn)行了簡(jiǎn)化。
在數(shù)據(jù)鏈路層實(shí)現(xiàn)ARP協(xié)議。該模塊由ARPRequest、ARPInput、ARPTimer組成。ARPRequest負(fù)責(zé)主機(jī)在向網(wǎng)絡(luò)發(fā)送數(shù)據(jù)時(shí)發(fā)送ARP請(qǐng)求以確定目的地址的以太網(wǎng)地址。ARPInput判斷ARP包類(lèi)型是網(wǎng)絡(luò)上其它機(jī)子發(fā)送過(guò)來(lái)的請(qǐng)求包或是回送給本機(jī)的響應(yīng)包、判斷其合法性并進(jìn)行相應(yīng)的處理。如果是請(qǐng)求包則交換目的地址和源地址的以太網(wǎng)地址跟IP地址,然后計(jì)算校驗(yàn)碼,打包發(fā)送出去。如果是返回給本機(jī)ARP響應(yīng)包,則將數(shù)據(jù)包里面的IP地址存到路由表里,以便往后發(fā)送數(shù)據(jù)時(shí)可以查詢(xún)目的以太網(wǎng)地址。
在網(wǎng)絡(luò)層實(shí)現(xiàn)IP協(xié)議和ICMP協(xié)議。IP模塊由IPInput和IPoutput組成。IPInput負(fù)責(zé)接收IP數(shù)據(jù)包,IPoutput負(fù)責(zé)發(fā)送IP數(shù)據(jù)包。IPInput首先判斷版本號(hào)、校驗(yàn)和、IP頭長(zhǎng)度是否為正確,如果不正確則丟棄數(shù)據(jù)包,反之判斷目的地址是否為當(dāng)前主機(jī)的IP地址,如果不是則將在路由表里尋找目的地址,如果找到則轉(zhuǎn)發(fā)該數(shù)據(jù)包。如果目的地址是當(dāng)前主機(jī)IP地址就判斷數(shù)據(jù)包的類(lèi)型,如果是ICMP則將它發(fā)送到ICMP協(xié)議層,如果是TCP包則將它送到TCP協(xié)議層。IPoutput負(fù)責(zé)發(fā)送IP數(shù)據(jù)包,接收上層協(xié)議傳遞下來(lái)的數(shù)據(jù),加上20字節(jié)IP首部,正確設(shè)置源IP地址和目的IP地址、協(xié)議類(lèi)型,計(jì)算檢驗(yàn)和,交給下面的鏈路層發(fā)送。ICMP協(xié)議負(fù)責(zé)傳遞差錯(cuò)報(bào)文以及其它需要注意的信息,且由ICMP首部8位類(lèi)型字段和8位代碼字段決定信息種類(lèi)。在AT91RM9200中只實(shí)現(xiàn)對(duì)回顯請(qǐng)求(類(lèi)型代碼為80)報(bào)文處理,從IP層接收到ICMP包后,判斷其類(lèi)型代碼段是否為80。如果是將這兩個(gè)字段設(shè)置為00(回顯應(yīng)答),計(jì)算檢驗(yàn)和,再交給IP層發(fā)送;如果不是則丟棄;從而實(shí)現(xiàn)對(duì)ping功能支持。
在傳輸層上實(shí)現(xiàn)TCP協(xié)議。它提供一種面向連接的可靠的字節(jié)流服務(wù)。主要由TCPInput、TCPOutput、TCPTimer、TCB隊(duì)列組成,并根據(jù)具體需要進(jìn)行簡(jiǎn)化。TCP控制塊TCB用結(jié)構(gòu)體來(lái)實(shí)現(xiàn),每一個(gè)TCB包含一條TCP連接所有控制和狀態(tài)信息,全部的TCB形成了一個(gè)雙向鏈表,有利于在所有TCP連接中進(jìn)行搜索。TCPTimer負(fù)責(zé)管理TCP協(xié)議中各種狀態(tài)信息,定時(shí)刷新各個(gè)TCB狀態(tài),這里僅僅實(shí)現(xiàn)了一個(gè)500ms慢速定時(shí)器[5]。TCPInput負(fù)責(zé)接收從下層IP模塊接收到的TCP數(shù)據(jù)包,并根據(jù)TCP連接的狀態(tài)信息以及TCP首部各個(gè)標(biāo)志位進(jìn)行分支處理,將數(shù)據(jù)交給對(duì)應(yīng)端口的上層應(yīng)用程序,并調(diào)用其它函數(shù)實(shí)現(xiàn)對(duì)TCP包的響應(yīng)和狀態(tài)變遷。TCPOutput負(fù)責(zé)TCP報(bào)文發(fā)送,當(dāng)接收到上層應(yīng)用程序數(shù)據(jù)時(shí),首先發(fā)送SYN[4]幀,與目標(biāo)主機(jī)三次握手建立連接,之后加上TCP首部,交給下層IP模塊發(fā)送,并通過(guò)重傳定時(shí)器實(shí)現(xiàn)超時(shí)重發(fā)、持續(xù)定時(shí)器發(fā)送窗口探測(cè)幀等功能,待所有數(shù)據(jù)發(fā)送完畢并得到確認(rèn)后發(fā)送FIN[4]幀,通過(guò)四次握手關(guān)閉連接,TCPOutput還可在不同狀態(tài)和事件下被其它程序調(diào)用發(fā)送ACK幀、RST幀等其它TCP報(bào)文;在PC機(jī)上往往可以同時(shí)維護(hù)多條TCP連接;但在ARM上,由于ARM速度和RAM容量的限制,只支持一條TCP連接;這樣大大簡(jiǎn)化了程序復(fù)雜度,同時(shí)也滿(mǎn)足了實(shí)際需要。
圖 2 AT91RM9200上TCP/IP體系結(jié)構(gòu)
5 結(jié)論
在信息化今天,Internet技術(shù)給人們生活、工作、交流都提供了很大便利,它不僅解決了人與人之間的信息交流,還解決了企業(yè)之間信息交流。Internet技術(shù)目前已經(jīng)深入到了日常生活中的電子設(shè)備中如視頻監(jiān)控等。各國(guó)信息界同仁都在關(guān)注并研究電子設(shè)備與Internet的連接問(wèn)題。ARM網(wǎng)絡(luò)中TCP/IP協(xié)議研究解決了以ARM為核心的處理系統(tǒng)與Internet的連接問(wèn)題,為ARM設(shè)備的應(yīng)用開(kāi)辟了更為廣闊前景。
參考文獻(xiàn):
[1] ATMEL AT91RM9200 datasheet.2003
[2] DAVICOM DM9161E datasheet.2001
[3] Douglas E.Comer. TCP/IP進(jìn)行網(wǎng)際互聯(lián)(卷1). 林瑤等譯.北京電子工業(yè)出版社.2001
[4] 王罡,林立志編著. 基于Windows的TCP/IP編程. 北京: 清華大學(xué)出版社, 2000
[5] W. Richard Stevens. TCP/IP Illustrated, Volume 1The Protocols . 2001
[6] Gary R. Wright, Wright Gary R., W. Richard Stevens, TCP/IP Illustrated, Volume 2 : The Implementation, 2001
[7] 杜春雷. ARM體系結(jié)構(gòu)與編程 .北京: 清華大學(xué)出版社, 2003
tcp/ip相關(guān)文章:tcp/ip是什么
雙絞線(xiàn)傳輸器相關(guān)文章:雙絞線(xiàn)傳輸器原理
評(píng)論