黃 翌,陳麗娟
(1.中國(guó)電子科技集團(tuán)第三十八研究所 孔徑陣列與空間探測(cè)安徽省重點(diǎn)實(shí)驗(yàn)室,安徽 合肥 230088;2.合肥工業(yè)大學(xué) 儀器科學(xué)與光電工程學(xué)院,安徽 合肥 230009)
?
基于ENC28J60的Nios Ⅱ網(wǎng)絡(luò)驅(qū)動(dòng)程序開發(fā)
黃翌1,陳麗娟2
(1.中國(guó)電子科技集團(tuán)第三十八研究所 孔徑陣列與空間探測(cè)安徽省重點(diǎn)實(shí)驗(yàn)室,安徽 合肥230088;2.合肥工業(yè)大學(xué) 儀器科學(xué)與光電工程學(xué)院,安徽 合肥230009)
摘要:文章介紹了以ENC28J60作為網(wǎng)絡(luò)設(shè)備的嵌入式系統(tǒng)以太網(wǎng)通信功能的實(shí)現(xiàn)方法,研究了ENC28J60硬件的初始化、數(shù)據(jù)包收發(fā)的軟件編程算法,分析了LwIP 的網(wǎng)絡(luò)接口驅(qū)動(dòng)層設(shè)計(jì),介紹了如何在LwIP下開發(fā)網(wǎng)絡(luò)驅(qū)動(dòng)程序完成LwIP協(xié)議棧在ENC28J60芯片上的移植,并對(duì)系統(tǒng)的通信性能進(jìn)行了驗(yàn)證。
關(guān)鍵詞:Nios Ⅱ軟核;LwIP協(xié)議棧;ENC28J60硬件;驅(qū)動(dòng)程序
嵌入式IP軟核進(jìn)行SOPC設(shè)計(jì)的方法因?yàn)榈统杀?、可剪裁、可重?gòu)等特性得到越來(lái)越廣泛的應(yīng)用。Altera公司的Nios Ⅱ軟核是一種采用流水線技術(shù)、單指令流的RISC處理器,可以通過(guò)開放的Avalon總線與其他采用VHDL語(yǔ)言描述的硬件接口模塊組成嵌入式硬件系統(tǒng)[1]。它具有靈活、可裁減、低成本、高性能等特點(diǎn),因此有很強(qiáng)的競(jìng)爭(zhēng)力。自從2000年問(wèn)世以來(lái),Nios Ⅱ已廣泛地應(yīng)用于通信、工業(yè)控制、計(jì)算機(jī)相關(guān)產(chǎn)品和消費(fèi)類電子領(lǐng)域等[2]。
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,越來(lái)越多的工業(yè)測(cè)試設(shè)備將以太網(wǎng)接入功能作為默認(rèn)配置來(lái)實(shí)現(xiàn)設(shè)備的遠(yuǎn)程監(jiān)控和信息分布式處理,而此前選擇的以太網(wǎng)控制器都是專為個(gè)人計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的,結(jié)構(gòu)復(fù)雜、占用空間大且較昂貴[3]。本文使用的以太網(wǎng)控制器芯片ENC28J60是微芯公司專為嵌入式系統(tǒng)開發(fā)的小型以太網(wǎng)控制器,采用標(biāo)準(zhǔn)的SPI串行接口,外圍元件配置簡(jiǎn)單,完全兼容IEEE 802.3協(xié)議,內(nèi)部集成MAC和10 BASE-T PHY,支持全雙工和半雙工模式[4]。芯片內(nèi)的雙端口RAM可以自由配置,內(nèi)嵌可編程數(shù)據(jù)包過(guò)濾器,支持單播(unicast)、組播(multicast)、廣播(broadcast)和可編程模式匹配信息包,以減輕控制器芯片的處理負(fù)荷。本文主要介紹如何在Nios Ⅱ下基于LwIP協(xié)議棧開發(fā)ENC28J60網(wǎng)絡(luò)驅(qū)動(dòng)程序。
1軟件系統(tǒng)
系統(tǒng)軟件平臺(tái)采用μC/OS-Ⅱ嵌入式操作系統(tǒng),使用LwIP網(wǎng)絡(luò)協(xié)議棧。
針對(duì)所使用的ENC28J60芯片,設(shè)計(jì)其在LwIP下的驅(qū)動(dòng)程序。在此基礎(chǔ)上開發(fā)的應(yīng)用程序工作系統(tǒng)模型如圖1所示。
圖1 程序系統(tǒng)模型
μC/OS-Ⅱ開源實(shí)時(shí)操作系統(tǒng)是專門為計(jì)算機(jī)的嵌入式應(yīng)用設(shè)計(jì)的,絕大部分代碼用C語(yǔ)言編寫,便于移植到任何一種CPU上。μC/OS-Ⅱ?qū)崿F(xiàn)了一個(gè)基于優(yōu)先級(jí)調(diào)度的搶占式的實(shí)時(shí)內(nèi)核,并在這個(gè)內(nèi)核之上提供最基本的系統(tǒng)服務(wù),如信號(hào)量、郵箱、消息隊(duì)列、內(nèi)存管理、中斷管理等,具有執(zhí)行效率高、占用空間小、實(shí)時(shí)性能優(yōu)良和可擴(kuò)展性強(qiáng)等特點(diǎn)[5]。
LwIP是lightweight(輕量級(jí))IP協(xié)議棧,提供了一套小型化的TCP/IP傳輸控制協(xié)議,可以在提供完整的TCP/IP功能的同時(shí)減少系統(tǒng)資源的使用[6]。
LwIP是專為存儲(chǔ)器容量較小的嵌入式系統(tǒng)設(shè)計(jì)的,適用于Nios Ⅱ處理器系統(tǒng)。LwIP使用操作系統(tǒng)提供了一些高級(jí)管理功能,如信號(hào)量管理、消息隊(duì)列管理、創(chuàng)建線程等。如果使用的操作系統(tǒng)不同,則必須針對(duì)不同的操作系統(tǒng)進(jìn)行移植。LwIP分為幾個(gè)層次,如圖2所示。
圖2中網(wǎng)絡(luò)接口驅(qū)動(dòng)層用來(lái)為L(zhǎng)wIP提供網(wǎng)絡(luò)接口芯片的驅(qū)動(dòng)程序。針對(duì)不同的網(wǎng)絡(luò)接口芯片開發(fā)設(shè)計(jì)不同的驅(qū)動(dòng)程序,則可使LwIP操作不同的網(wǎng)絡(luò)接口芯片。本系統(tǒng)采用ENC28J60芯片,需要設(shè)計(jì)其驅(qū)動(dòng)程序,并提供與LwIP的調(diào)用接口。
圖2 LwIP軟件層次
1.1網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的體系結(jié)構(gòu)
LwIP協(xié)議棧的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的體系結(jié)構(gòu)如圖3所示,其源代碼中提供了網(wǎng)絡(luò)設(shè)備接口及以上層次的代碼,開發(fā)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的主要工作就是完成設(shè)備驅(qū)動(dòng)功能層的相應(yīng)代碼。LwIP中所有的網(wǎng)絡(luò)設(shè)備都抽象為一個(gè)統(tǒng)一的接口,即網(wǎng)絡(luò)設(shè)備接口struct netif,操作系統(tǒng)通過(guò)網(wǎng)絡(luò)設(shè)備接口鏈表對(duì)所有網(wǎng)絡(luò)設(shè)備進(jìn)行管理[7]。
網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序需要根據(jù)具體的硬件特性操控內(nèi)部的功能寄存器,實(shí)例化相應(yīng)的網(wǎng)絡(luò)設(shè)備接口,實(shí)現(xiàn)其中的收發(fā)數(shù)據(jù)包函數(shù)及中斷處理程序,將具體的收發(fā)數(shù)據(jù)包函數(shù)賦予網(wǎng)絡(luò)設(shè)備接口結(jié)構(gòu)體中的函數(shù)指針,最后將此結(jié)構(gòu)體加入網(wǎng)絡(luò)設(shè)備鏈表完成網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的開發(fā)[8]。
圖3 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的體系結(jié)構(gòu)
1.2ENC28J60網(wǎng)絡(luò)接口數(shù)據(jù)結(jié)構(gòu)
struct netif結(jié)構(gòu)體是整個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)結(jié)構(gòu)的核心,如圖4所示。
圖4中定義了很多供網(wǎng)絡(luò)協(xié)議接口層調(diào)用設(shè)備的標(biāo)準(zhǔn)方法[9]。
(1)全局信息及底層硬件信息。*next為指向全局鏈表下一個(gè)設(shè)備的指針;ip_addr為網(wǎng)絡(luò)設(shè)備IP地址;netmask為網(wǎng)絡(luò)設(shè)備子網(wǎng)掩碼;gw為網(wǎng)絡(luò)設(shè)備網(wǎng)關(guān)地址;state為指向網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的特定狀態(tài);hwaddr_len為網(wǎng)絡(luò)設(shè)備物理地址長(zhǎng)度,即MAC地址長(zhǎng)度,值為6;hwaddr為網(wǎng)絡(luò)設(shè)備物理地址,即MAC地址;mtu為最大傳輸單元,以太網(wǎng)中值為1500;flags為網(wǎng)絡(luò)設(shè)備狀態(tài)信息標(biāo)志位;link_type為網(wǎng)絡(luò)設(shè)備連接類型;name為網(wǎng)絡(luò)設(shè)備名稱,用于標(biāo)識(shí)設(shè)備驅(qū)動(dòng)的種類;num為用來(lái)區(qū)分相同類別的不同網(wǎng)絡(luò)接口。
(2)數(shù)據(jù)包處理函數(shù)。*input為指向數(shù)據(jù)包接收函數(shù),用于將網(wǎng)絡(luò)設(shè)備接收到的數(shù)據(jù)包提交給IP層;*output為指向數(shù)據(jù)包發(fā)送函數(shù),用于IP層將數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)接口上;*linkoutput為指向鏈路連接函數(shù),由ARP調(diào)用,用于進(jìn)行IP地址解析。
圖4 網(wǎng)絡(luò)接口數(shù)據(jù)結(jié)構(gòu)
1.3網(wǎng)絡(luò)驅(qū)動(dòng)程序?qū)崿F(xiàn)原理
(1)網(wǎng)絡(luò)設(shè)備初始化。首先對(duì)netif網(wǎng)絡(luò)接口數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化,設(shè)定物理地址、IP地址,對(duì)函數(shù)指針賦值,將其加入網(wǎng)絡(luò)設(shè)備鏈表;然后在操作系統(tǒng)中增加數(shù)據(jù)包傳輸?shù)男盘?hào)量和ARP(Address Resolution Protocol)地址解析協(xié)議信號(hào)量,防止網(wǎng)絡(luò)硬件資源的重復(fù)占用造成資源互鎖;最后完成網(wǎng)絡(luò)設(shè)備的硬件初始化,申請(qǐng)接收和發(fā)送緩沖區(qū),設(shè)置單播、組播和廣播寄存器,設(shè)置中斷并使能等功能。
根據(jù)SOPC軟件系統(tǒng)的框架要求,驅(qū)動(dòng)程序需要實(shí)現(xiàn)2個(gè)專用的宏定義ALTERA-ENC28J60-INSTANCE(name,dev)和ALTERA-ENC28J60-INIT(name,dev)來(lái)調(diào)用網(wǎng)絡(luò)設(shè)備初始化。
(2)網(wǎng)絡(luò)數(shù)據(jù)包接收和中斷處理。中斷觸發(fā)后,將判斷是否有傳輸錯(cuò)誤。如果有傳輸錯(cuò)誤,對(duì)網(wǎng)絡(luò)設(shè)備相應(yīng)傳輸功能進(jìn)行復(fù)位初始化;如果收到了有效數(shù)據(jù)包,將數(shù)據(jù)存入接收緩沖區(qū),給操作系統(tǒng)發(fā)送數(shù)據(jù)包傳輸信號(hào)量并退出中斷。
操作系統(tǒng)收到信號(hào)量后,將調(diào)用* input指向的數(shù)據(jù)包接收函數(shù),通過(guò)對(duì)網(wǎng)絡(luò)層和傳輸層的解析,最后提交到應(yīng)用層進(jìn)行用戶處理。
(3)網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送和ARP數(shù)據(jù)解析。網(wǎng)絡(luò)連接后,驅(qū)動(dòng)程序自動(dòng)觸發(fā)ARP解析,調(diào)用鏈路連接函數(shù)。鏈路連接函數(shù)在使用網(wǎng)絡(luò)設(shè)備資源前需要判斷ARP信號(hào)量是否釋放防止資源互鎖,然后調(diào)用LwIP網(wǎng)絡(luò)協(xié)議棧內(nèi)部函數(shù)etharp-output進(jìn)行地址解析,最后釋放ARP信號(hào)量。
網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送需要應(yīng)用層程序調(diào)用*output指向的數(shù)據(jù)包發(fā)送函數(shù),等待可用的數(shù)據(jù)包傳輸信號(hào)量,將待發(fā)送數(shù)據(jù)存入網(wǎng)絡(luò)設(shè)備內(nèi)部的發(fā)送緩沖區(qū),網(wǎng)絡(luò)設(shè)備將自動(dòng)發(fā)送網(wǎng)絡(luò)數(shù)據(jù),函數(shù)最后釋放數(shù)據(jù)包傳輸信號(hào)量。
(4)ENC28J60網(wǎng)絡(luò)驅(qū)動(dòng)程序的結(jié)構(gòu)。按照LwIP協(xié)議棧對(duì)驅(qū)動(dòng)程序的要求,需要實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備硬件初始化函數(shù)enc28j60-init、網(wǎng)絡(luò)數(shù)據(jù)輸入處理函數(shù)enc28j60-input、網(wǎng)絡(luò)數(shù)據(jù)輸出處理函數(shù)enc28j60-output和網(wǎng)絡(luò)數(shù)據(jù)中斷處理函數(shù)enc28j60-isr,各函數(shù)的處理流程如圖5所示。
圖5 函數(shù)處理流程圖
2測(cè)試
將驅(qū)動(dòng)程序加入測(cè)試應(yīng)用程序后,編譯下載到硬件電路中,完成主控計(jì)算機(jī)與硬件電路的網(wǎng)絡(luò)信息互傳。使用Ping命令進(jìn)行測(cè)試,利用網(wǎng)絡(luò)抓包軟件對(duì)數(shù)據(jù)包進(jìn)行分析,如圖6所示,Ping命令產(chǎn)生的網(wǎng)際控制報(bào)文協(xié)議(Internet Control Message Protocol,ICMP)包進(jìn)行網(wǎng)絡(luò)交互,數(shù)據(jù)包響應(yīng)完整,TTL(time to live)小于2 ms。
在主控計(jì)算機(jī)端使用sniffer軟件向硬件電路發(fā)送數(shù)據(jù)包進(jìn)行硬件電路接收數(shù)據(jù)處理測(cè)試,得到的測(cè)試結(jié)果見表1所列。
圖6 Ping命令產(chǎn)生的ICMP報(bào)文
數(shù)據(jù)包長(zhǎng)度/Byte發(fā)送速率/(包·s-1)發(fā)送數(shù)據(jù)量/(104包)接收數(shù)據(jù)量/包收包率/%100100110001005001001100010010001001676367.63
通過(guò)表1的測(cè)試結(jié)果可以看出,當(dāng)有大數(shù)據(jù)包(數(shù)據(jù)包長(zhǎng)度為1 000 Byte)頻繁到達(dá)時(shí),硬件電路無(wú)法及時(shí)處理數(shù)據(jù),使接收?qǐng)?bào)文成功率下降,并導(dǎo)致操作系統(tǒng)無(wú)法響應(yīng)其他任務(wù)。由于大數(shù)據(jù)包不斷到達(dá)網(wǎng)絡(luò)設(shè)備,觸發(fā)中斷,操作系統(tǒng)被網(wǎng)絡(luò)任務(wù)占用,無(wú)法執(zhí)行其他任務(wù)的現(xiàn)象稱為網(wǎng)絡(luò)堵塞。當(dāng)取消主控計(jì)算機(jī)的發(fā)送任務(wù)后,驅(qū)動(dòng)程序中的出錯(cuò)處理可以使網(wǎng)絡(luò)設(shè)備自行恢復(fù)正常通訊。考慮到在多數(shù)嵌入式系統(tǒng)應(yīng)用中網(wǎng)絡(luò)作為控制及信息傳輸工具,不需要頻繁地處理大數(shù)據(jù),通過(guò)在驅(qū)動(dòng)程序初始化網(wǎng)絡(luò)設(shè)備時(shí)限制數(shù)據(jù)包的長(zhǎng)度,增加大數(shù)據(jù)丟包處理機(jī)制,并調(diào)高關(guān)鍵任務(wù)的優(yōu)先級(jí),可以解決多任務(wù)處理時(shí)無(wú)法及時(shí)響應(yīng)大數(shù)據(jù)包而造成網(wǎng)絡(luò)堵塞的“假死機(jī)”現(xiàn)象。
3結(jié)束語(yǔ)
本文分析了如何基于Nios Ⅱ軟核在μC/OS-Ⅱ操作系統(tǒng)和LwIP協(xié)議棧上開發(fā)ENC28J60網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序,詳細(xì)討論了基于Nios Ⅱ框架μC/OS-Ⅱ?qū)崟r(shí)操作系統(tǒng)中需要實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)、指針函數(shù)和宏定義;并重點(diǎn)介紹了網(wǎng)絡(luò)設(shè)備的硬
件初始化和網(wǎng)絡(luò)數(shù)據(jù)包的接收和發(fā)送處理;最后通過(guò)硬件設(shè)備和測(cè)試應(yīng)用程序?qū)W(wǎng)絡(luò)性能進(jìn)行了評(píng)估。測(cè)試結(jié)果表明,在不存在大數(shù)據(jù)量接收和發(fā)送事件的應(yīng)用場(chǎng)合,網(wǎng)絡(luò)設(shè)備響應(yīng)快。本系統(tǒng)已經(jīng)成功應(yīng)用于分布式儀表監(jiān)控測(cè)量系統(tǒng)中,使用方便、運(yùn)行穩(wěn)定,具有一定的實(shí)用價(jià)值。
[參考文獻(xiàn)]
[1]田青峰,盧泳兵,劉志鵬.NIOS在網(wǎng)絡(luò)通信系統(tǒng)中的應(yīng)用[J].無(wú)線電工程,2013,43(5):10-12.
[2]王仁波,魏雄.基于Nios Ⅱ軟核嵌入式系統(tǒng)的以太網(wǎng)接口設(shè)計(jì)[J].東華理工學(xué)院學(xué)報(bào):自然科學(xué)版,2007,30(1):73-77.
[3]鮑軍民.基于ENC28J60控制器的智能儀表以太網(wǎng)接口設(shè)計(jì)[J].電子元器件應(yīng)用,2007,9(11):1-5.
[4]李陽(yáng),吳成富,鄧紅德.基于DSP和ENC28J60的多串口與以太網(wǎng)數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)[J].測(cè)控技術(shù),2011,30(12):61-65.
[5]胡玨.基于μC/OS-Ⅱ的實(shí)時(shí)多任務(wù)應(yīng)用研究[J].計(jì)算技術(shù)與自動(dòng)化,2008,27(1):115-119.
[6]時(shí)建雷,肖鐵軍.面向LwIP的NIOSII網(wǎng)絡(luò)驅(qū)動(dòng)程序開發(fā)[J].微計(jì)算機(jī)信息,2008,24(5):36-38.
[7]喬從連.Nios Ⅱ網(wǎng)絡(luò)設(shè)備加載及UDP通訊應(yīng)用[J].微計(jì)算機(jī)信息,2009,25(12-2):84-86.
[8]羅維,李君懿.基于BF533的Linux網(wǎng)絡(luò)驅(qū)動(dòng)程序的開發(fā)[J].電子設(shè)計(jì)工程,2009,17(5):33-35.
[9]王建平,周辰飛,朱程輝,等.一種ZigBee-TCP/IP無(wú)縫網(wǎng)關(guān)模型[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2013,36(9):1058-1062.
(責(zé)任編輯胡亞敏)
Development of Nios Ⅱ network driver based on ENC28J60
HUANG Yi1,CHEN Li-juan2
(1.Key Laboratory of Aperture Array and Space Application,No.38 Research Institute of China Electronics Technology Group Corporation,Hefei 230088,China;2.School of Instrument Science and Opto-electronic Engineering,Hefei University of Technology,Hefei 230009,China)
Abstract:In this paper,a method of realizing embedded system network communication with ENC28J60 as network device is presented.The ENC28J60’s hardware initialization and the arithmetic of how to receive and transmit the data packet are studied.Then the design of LwIP’s network interface driver layer is analyzed,and the ENC28J60’s driver is developed based on LwIP to achieve the transplant of LwIP.Finally,the communication performance of the system is tested.
Key words:Nios Ⅱ soft-core;LwIP protocol stack;ENC28J60 hardware;driver
收稿日期:2015-06-30;修回日期:2016-02-11
基金項(xiàng)目:國(guó)家國(guó)際科技合作專項(xiàng)資助項(xiàng)目(2011DFA12430);安徽省重大科學(xué)儀器專項(xiàng)資助項(xiàng)目(1310115190)
作者簡(jiǎn)介:黃翌(1978-),男,安徽合肥人,中國(guó)電子科技集團(tuán)第三十八研究所高級(jí)工程師.
doi:10.3969/j.issn.1003-5060.2016.04.006
中圖分類號(hào):TP393.1
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1003-5060(2016)04-0462-05