克磊, 陳小平
(蘇州大學(xué)電子信息學(xué)院,江蘇 蘇州 215006)
隨著嵌入式系統(tǒng)的迅猛發(fā)展,越來越多的嵌入式裝置需要相互連接起來以更好的發(fā)揮作用,傳統(tǒng)的嵌入式裝置利用現(xiàn)場(chǎng)總線或其他特殊的協(xié)議實(shí)現(xiàn)相互通信[1]。然而,由于連通的有限性,這些網(wǎng)絡(luò)不能實(shí)現(xiàn)對(duì) Internet的無縫對(duì)接。設(shè)計(jì)的嵌入式網(wǎng)絡(luò)路由控制器以 ARM Cortex-M3微處理器LM3S6965為核心,利用其內(nèi)置以太網(wǎng)媒體訪問控制器,成功移植了 uIP協(xié)議棧,實(shí)現(xiàn)客戶端與服務(wù)器的 Internet的無縫連接。
通信路由控制器設(shè)計(jì)框圖 1所示,目的是將 uIP協(xié)議棧移植到嵌入式系統(tǒng)中,使其能夠在通信雙方規(guī)定協(xié)議的基礎(chǔ)上,實(shí)現(xiàn)與綜合通信系統(tǒng)的網(wǎng)絡(luò)通信,并能通過操作按鍵控制綜合通信系統(tǒng)的工作模式,設(shè)置通信側(cè)路由。指示系統(tǒng)的工作狀態(tài),包括通信側(cè)連通狀態(tài),流量統(tǒng)計(jì)。

圖 1 通信路由控制器設(shè)計(jì)方案
LM3S6965以太網(wǎng)控制器由一個(gè)完全集成的介質(zhì)訪問控制器(MAC)和網(wǎng)絡(luò)物理(PHY)接口器件組成[2]。以太網(wǎng)控制器遵循IEEE802.3規(guī)范,完全支持 10BASE-T和 100BASE-TX標(biāo)準(zhǔn)。MAC層和PHY層分別與ISO模型的第 2和第 1層相對(duì)應(yīng)。以太網(wǎng)控制器的基本接口是到 MAC層的一個(gè)簡(jiǎn)單總線接口。MAC層提供了以太網(wǎng)幀的發(fā)送和接收處理。MAC層還通過一個(gè)內(nèi)部的媒體獨(dú)立接口給 PHY模塊提供接口。PHY層負(fù)責(zé)與以太網(wǎng)的數(shù)據(jù)通信。以太網(wǎng)控制器基本結(jié)構(gòu)如圖 2所示。

圖 2 以太網(wǎng)控制器結(jié)構(gòu)
LM3S6965以太網(wǎng)控制器模塊遵循 10BASE-T/100BASETX IEEE802.3標(biāo)準(zhǔn),只需要一個(gè)雙路隔離變壓器就能與網(wǎng)絡(luò)相連[2]。這里采用了一款帶濾波功能的網(wǎng)絡(luò)隔離變壓器。
圖 3為網(wǎng)絡(luò)隔離變壓器的接口電路圖。圖中右側(cè)所標(biāo)TX+、TX-、RX+和 RX-引腳分別與網(wǎng)絡(luò)水晶頭連接;左側(cè)所標(biāo) TXOP、TXON、RXIP和 RXIN引腳分別接至 LM3S6965以太網(wǎng)控制器各數(shù)據(jù)通信端口,其中 TXOP和 TXON表示以太網(wǎng)控制器數(shù)據(jù)輸出差分信號(hào),RXIN和RXIP表示數(shù)據(jù)接收差分信號(hào);另外 PHY還支持 2個(gè) LED信號(hào),用來指示以太網(wǎng)控制器操作的各種狀態(tài),這兩個(gè)信號(hào)對(duì)應(yīng) LED0和 LED1引腳。
uIP是瑞典計(jì)算機(jī)科學(xué)研究所 Adam Dunkels開發(fā)的。uIP的體系結(jié)構(gòu)如圖 4所示,uIP處于網(wǎng)絡(luò)通信的中間層,其上層協(xié)議稱之為應(yīng)用程序,下層硬件和其它固件稱為網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)[3],此處由LM3S6965內(nèi)置以太網(wǎng)控制器構(gòu)成 ISO模型的物理層和數(shù)據(jù)鏈路層。這樣就屏蔽了下層硬件的處理細(xì)節(jié),為上層應(yīng)用提供一個(gè)統(tǒng)一的接口。在實(shí)際的應(yīng)用中用戶只要根據(jù)自己的需要編寫相應(yīng)的應(yīng)用程序來實(shí)現(xiàn)具體的應(yīng)用要求而不必過多地考慮硬件接口問題。
通信路由控制器軟件設(shè)計(jì)的總體思想是:首先進(jìn)行系統(tǒng)初始化,包括 LM3S6965系統(tǒng)時(shí)鐘、IO端口、定時(shí)器、液晶以及看門狗等初始化工作;然后配置以太網(wǎng)控制器寄存器,編寫網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng);其次移植uIP協(xié)議棧,運(yùn)用其豐富的接口函數(shù)處理數(shù)據(jù)包;最后根據(jù)功能需要編寫用戶應(yīng)用程序。

圖 3 網(wǎng)絡(luò)隔離變壓器的接口電路
要使用以太網(wǎng)控制器,外設(shè)必須通過置位 LM3S6965的運(yùn)行模式時(shí)鐘選通控制寄存器 RCGC2的 EPHY 0和 EMAC0位來使能。然后,使用以下步驟來配置以太網(wǎng)控制器。

圖 4 uIP協(xié)議棧體系結(jié)構(gòu)
①編程管理分頻寄存器MACMDV在內(nèi)部 MII上獲得一個(gè) 2.5MHz的時(shí)鐘;
②編程單個(gè)地址 0寄存器 MACIA0和單個(gè)地址 1寄存器MACIA 1進(jìn)行地址過濾;
③使用值 0x16編程發(fā)送控制寄存器 MACTCTL,實(shí)現(xiàn)自動(dòng) CRC產(chǎn)生、填充和全雙工操作;
④使用值 0x08編程接收控制寄存器 MACRCTL來拒絕帶有壞 FCS的幀;
⑤通過置位 MACTCTL和MACRCTL寄存器的LSB來使能發(fā)送器和接收器。
圖 5為以太網(wǎng)初始化程序設(shè)計(jì)流程圖。

圖 5 以太網(wǎng)控制器初始化流程
以太網(wǎng)控制器發(fā)包過程為:發(fā)送一個(gè)幀,就使用數(shù)據(jù)寄存器 MACDATA將該幀寫入緩存 TX FIFO;然后置位發(fā)送請(qǐng)求寄存器 MACTR的NEWTX位啟動(dòng)發(fā)送過程;當(dāng) NEWTX位被清零后,TX FIFO就可用于下個(gè)幀的發(fā)送。
以太網(wǎng)控制器收包過程為:接收一個(gè)幀,就必須等到幀包數(shù)目寄存器MACNP的NPR域?yàn)榉橇阒?然后使用 MACDATA寄存器開始將幀從緩存RX FIFO中讀出;當(dāng)幀被讀取后,NPR域的值減 1;當(dāng)RX FIFO中沒有幀時(shí),NPR將讀出為零。
以太網(wǎng)控制器接收發(fā)送數(shù)據(jù)包流程如圖 6、圖 7所示。

圖6 以太網(wǎng)控制器接收數(shù)據(jù)包
圖 8詳細(xì)地描述了uIP是如何處理數(shù)據(jù)包。其中,宏定義UIP_CONNS表示同時(shí)開通的 TCP連接最大值;函數(shù) uip_arp_ipin()表示對(duì)即將到來的 IP包的 ARP處理;函數(shù) uip_arp_out()表示向外發(fā)送的 IP包的偽以太網(wǎng)報(bào)頭并確認(rèn)是否需要發(fā)送 ARP請(qǐng)求[4];函數(shù) EthernetPacketPut()表示通過 Ethernet MAC方式發(fā)送數(shù)據(jù)包。

圖8 uIP數(shù)據(jù)處理流程
通信路由控制器作為客戶端與綜合通信系統(tǒng)服務(wù)器實(shí)現(xiàn)Internet無縫連接,基于 uIP協(xié)議,以IP數(shù)據(jù)包的格式與通信主機(jī)按照規(guī)定協(xié)議進(jìn)行定向網(wǎng)絡(luò)通信,所涉及的網(wǎng)絡(luò)數(shù)據(jù)主要分為服務(wù)器通信模塊各端口的狀態(tài)與流量信息,以及網(wǎng)絡(luò)路由控制器發(fā)送給服務(wù)器各通信端口的路由控制字。
通信路由控制器功能流程如圖 9、圖 10和圖 11所示。

圖 9 狀態(tài)監(jiān)控流程

圖10 手動(dòng)控制路由流程

圖 11 自動(dòng)分配路由流程
應(yīng)用程序?qū)IP協(xié)議棧作為一個(gè)主程序運(yùn)行在一個(gè)單系統(tǒng)任務(wù)中,主控制循環(huán)重復(fù)做兩件事,一是檢查從網(wǎng)絡(luò)中發(fā)過來的數(shù)據(jù)包,二是檢查周期計(jì)時(shí)是否發(fā)生。當(dāng)有網(wǎng)絡(luò)事件或計(jì)時(shí)事件發(fā)生時(shí),uIP會(huì)調(diào)用 UIP_APPCALL()對(duì)事件進(jìn)行處理[5]。為了將用戶的應(yīng)用程序掛接到uIP中,程序設(shè)計(jì)中將宏 UIP_APPCALL()定義成實(shí)際的應(yīng)用程序函數(shù)名 tcp_appcall()。
當(dāng)客戶端需要監(jiān)測(cè)服務(wù)器各端口狀態(tài)流量時(shí),必須先根據(jù)雙方規(guī)定協(xié)議調(diào)用 uip_send()接口函數(shù)定時(shí)發(fā)送請(qǐng)求命令字給服務(wù)器端,當(dāng)服務(wù)器收到請(qǐng)求后再以規(guī)定IP包格式返回包含流量信息數(shù)據(jù),應(yīng)用程序在 main函數(shù)對(duì)數(shù)據(jù)處理;當(dāng)網(wǎng)絡(luò)路由控制器需要對(duì)服務(wù)器各端口通信路由進(jìn)行手動(dòng)控制分配時(shí),同樣根據(jù)協(xié)議,結(jié)合按鍵發(fā)送相關(guān)控制字,通信主機(jī)根據(jù)控制字分配路由。
通信路由控制器特點(diǎn)是直接利用LM3S6965內(nèi)置以太網(wǎng)控制器模塊,成功移植了精簡(jiǎn)TCP/IP協(xié)議uIP,并在此基礎(chǔ)上編寫控制通信路由的用戶應(yīng)用程序,使其構(gòu)成符合 TCP/IP通訊協(xié)議規(guī)范的4級(jí)層次結(jié)構(gòu),使嵌入式系統(tǒng)自己實(shí)現(xiàn)網(wǎng)絡(luò)通信的功能,從而能進(jìn)一步實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)通信的控制。不僅為基于uIP協(xié)議棧的嵌入式網(wǎng)絡(luò)通信控制提供了一個(gè)切實(shí)可行的廉價(jià)解決方案,而且同樣適用于遠(yuǎn)程監(jiān)測(cè),如列車報(bào)站、報(bào)警裝置。
[1]彭少熙,孫政順,杜繼宏.家庭網(wǎng)絡(luò)中的嵌入式 Internet方案[J].電子技術(shù)應(yīng)用,2001,27(10):47-50.
[2]周立功.ARM Cortex-M3開發(fā)指南[M].廣州:廣州致遠(yuǎn)電子有限公司,2008.
[3]張永濤,黃丹丹,李歐.uIP協(xié)議分析及其應(yīng)用[J].信息工程大學(xué)學(xué)報(bào),2006,7(02):147-149.
[4]宋素萍,邵明省.基于AVR的VoIP數(shù)據(jù)傳遞設(shè)計(jì)[J].通信技術(shù),2008,41(09):218-220.
[5]吳志華,申功勛,唐李征,等.嵌入式GPS由GPRS接入Internet的實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007,23(03):256-258.