国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

LwIP在LPC23/24XX以太網(wǎng)MAC控制器上的移植與應(yīng)用

2014-07-25 08:59施純啟吳景東
關(guān)鍵詞:網(wǎng)絡(luò)接口描述符數(shù)組

施純啟,吳景東

(福州大學(xué) 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,福建 福州 350108)

0 引言

隨著Internet的廣泛應(yīng)用和通信技術(shù)的飛速發(fā)展,越來(lái)越多的應(yīng)用場(chǎng)合需要將嵌入式設(shè)備接入以太網(wǎng)。得益于微電子技術(shù)的進(jìn)步,許多嵌入式控制芯片集成了以太網(wǎng)MAC控制器,NXP公司推出的LPC23/24XX系列微控制器便是其中的代表,該系列微控制器在嵌入式領(lǐng)域使用量大,應(yīng)用范圍廣。LwIP輕量級(jí)TCP/IP協(xié)議棧是一套用于嵌入式網(wǎng)絡(luò)系統(tǒng)的開(kāi)放源碼[1],具有較完整的TCP/IP功能,特別適合在資源緊張的微控制器上使用。本文以LPC23/24XX系列微控制器和DM9161A以太網(wǎng)PHY器件為硬件基礎(chǔ),根據(jù)LPC23/24XX以太網(wǎng)MAC控制器的特性來(lái)移植LwIP協(xié)議棧,實(shí)現(xiàn)一個(gè)低成本的嵌入式網(wǎng)絡(luò)系統(tǒng)。

1 系統(tǒng)硬件設(shè)計(jì)

LPC23/24XX系列微控制器使用了一個(gè)可在72 MHz頻率下運(yùn)行的ARM7內(nèi)核,包含1個(gè)10/100 Mb/s以太網(wǎng)模塊,該模塊位于獨(dú)立的AHB總線上,有16 KB的SRAM和DMA控制器[2]。本文采用該系列中的LPC2378進(jìn)行實(shí)驗(yàn)。

DM9161A是目前常見(jiàn)的一款低成本物理層收發(fā)器,在以太網(wǎng)PHY層使用,通過(guò)介質(zhì)無(wú)關(guān)接口MII或簡(jiǎn)化介質(zhì)無(wú)關(guān)接口RMII連接到以太網(wǎng)MAC層[3]。DM9161A的接線圖如圖1所示。

LPC2378微控制器的以太網(wǎng)模塊通過(guò)10個(gè)引腳與DM9161A相連,如圖2所示。

2 LPC23/24XX以太網(wǎng)控制器結(jié)構(gòu)與模塊功能描述

LPC23/24XX微控制器的以太網(wǎng)模塊包含一個(gè)全功能的10/100 Mb/s以太網(wǎng)MAC控制器,通過(guò)配置DMA硬件來(lái)提高性能[4]。以太網(wǎng)模塊通過(guò)操作控制寄存器組,實(shí)現(xiàn)半雙工或全雙工操作、流量控制、接收包過(guò)濾以及LAN上喚醒等各種功能,其結(jié)構(gòu)如圖3所示。

MAC控制器通過(guò)RMII接口與DM9161A進(jìn)行連接,RMII接口可以在幾乎不修改代碼的情況下兼容大部分PHY器件。以太網(wǎng)模塊中的DMA管理器利用描述符數(shù)組和狀態(tài)數(shù)組來(lái)工作。描述符和狀態(tài)充當(dāng)以太網(wǎng)硬件和驅(qū)動(dòng)程序之間的接口,描述符用來(lái)設(shè)置對(duì)應(yīng)緩沖區(qū)的首地址和控制信息,狀態(tài)符存儲(chǔ)著對(duì)應(yīng)收發(fā)數(shù)據(jù)最新的狀態(tài)信息。描述符數(shù)組和狀態(tài)數(shù)組在邏輯上是一個(gè)環(huán)形隊(duì)列結(jié)構(gòu),在接收和發(fā)送數(shù)據(jù)的過(guò)程中,它們會(huì)有3種不同的狀態(tài):空狀態(tài)、部分滿狀態(tài)和滿狀態(tài),如圖4所示。

對(duì)描述符數(shù)組的操作采用生產(chǎn)者/消費(fèi)者模式,在接收過(guò)程中,以太網(wǎng)MAC控制器是生產(chǎn)者,RxProduceIndex寄存器為數(shù)組索引;驅(qū)動(dòng)程序是消費(fèi)者,RxConsumeIndex寄存器為數(shù)組索引。在發(fā)送過(guò)程中,驅(qū)動(dòng)程序是生產(chǎn)者,TxProduceIndex寄存器為數(shù)組索引;MAC控制器是消費(fèi)者,TxConsumeIndex寄存器為數(shù)組索引。描述符還有一個(gè)擁有者的屬性,只有描述符的擁有者才能對(duì)它的值進(jìn)行讀寫(xiě)。驅(qū)動(dòng)程序通過(guò)將TxProduceIndex/RxConsumeIndex寄存器加1,能夠?qū)⒚枋龇蜖顟B(tài)的擁有權(quán)移交給MAC控制器。MAC控制器通過(guò)更新TxProduceIndex/RxConsumeIndex寄存器將描述符和狀態(tài)的擁有權(quán)移交給驅(qū)動(dòng)程序。

圖1 DM9161A接線圖

圖2 LPC2378微控制器與DM9161A引腳連接圖

圖3 LPC23/24XX以太網(wǎng)模塊結(jié)構(gòu)框圖

3 LwIP協(xié)議棧的移植

LwIP協(xié)議棧的移植工作分兩個(gè)部分,分別是網(wǎng)絡(luò)接口層的實(shí)現(xiàn)和操作系統(tǒng)模擬層的移植。

3.1 網(wǎng)絡(luò)接口層的實(shí)現(xiàn)

LwIP源碼給出了網(wǎng)絡(luò)接口驅(qū)動(dòng)程序的整體框架,用戶需要自己完成的函數(shù)主要有3個(gè)[5],分別是:

⑴網(wǎng)絡(luò)接口初始化函數(shù)low_level_init()。該函數(shù)用來(lái)對(duì)網(wǎng)絡(luò)接口進(jìn)行初始化,任何與初始化網(wǎng)絡(luò)接口有關(guān)的操作都可以在該函數(shù)內(nèi)實(shí)現(xiàn)。如對(duì)網(wǎng)絡(luò)接口有關(guān)參數(shù)進(jìn)行配置、完成網(wǎng)絡(luò)芯片硬件上所需的初始化操作等。

⑵網(wǎng)絡(luò)接口輸入函數(shù)low_level_input()。該函數(shù)為到達(dá)的數(shù)據(jù)包分配pbuf,并將數(shù)據(jù)包從網(wǎng)絡(luò)接口轉(zhuǎn)移到pbuf鏈中。

⑶網(wǎng)絡(luò)接口輸出函數(shù)low_level_output()。該函數(shù)實(shí)現(xiàn)真正的數(shù)據(jù)包發(fā)送過(guò)程。當(dāng)需要發(fā)送數(shù)據(jù)包時(shí),數(shù)據(jù)包裝載在事先已分配好的pbuf中,由該函數(shù)負(fù)責(zé)將數(shù)據(jù)包發(fā)送至指定的網(wǎng)絡(luò)接口中。

這3個(gè)函數(shù)的實(shí)現(xiàn)都與網(wǎng)絡(luò)接口的硬件特性密切相關(guān),其實(shí)就是相當(dāng)于為以太網(wǎng)MAC控制器編寫(xiě)驅(qū)動(dòng)程序。初始化函數(shù)low_level_init()對(duì)應(yīng)的是控制器的初始化配置過(guò)程,輸入函數(shù)low_level_input()對(duì)應(yīng)的是控制器的數(shù)據(jù)接收過(guò)程,輸出函數(shù)low_level_output()對(duì)應(yīng)的是控制器的數(shù)據(jù)發(fā)送過(guò)程。下面只詳細(xì)討論以太網(wǎng)MAC控制器的初始化和數(shù)據(jù)接收過(guò)程,而數(shù)據(jù)發(fā)送過(guò)程與接收過(guò)程的實(shí)現(xiàn)相似,本文不進(jìn)行詳述。

圖4 描述符與狀態(tài)數(shù)組的三種狀態(tài)

3.1 .1 初始化過(guò)程

驅(qū)動(dòng)程序在初始化過(guò)程需要為DMA管理器分配描述符數(shù)組和狀態(tài)數(shù)組。發(fā)送和接收功能都有各自的描述符和狀態(tài)數(shù)組,這些數(shù)組的基址存放在TxDescriptor/TxStatus和RxDescriptor/RxStatus寄存器中。而描述符數(shù)組中描述符的數(shù)目需使用減1編碼寫(xiě)入到TxDescriptorNumber/RxDescriptorNumber寄存器中,狀態(tài)與描述符的數(shù)目相同。在初始化數(shù)組之后,需要為描述符分配幀緩沖區(qū),描述符的Packet字段使用對(duì)應(yīng)緩沖區(qū)的基址來(lái)填充,而其Size字段需要填入緩沖區(qū)的大小。緩沖區(qū)的大小根據(jù)具體情況而定,范圍在1 B ~ 2 KB之間,緩沖區(qū)太小緩沖效果不明顯,影響網(wǎng)絡(luò)性能,太大則會(huì)占用太多的控制器存儲(chǔ)空間。

3.1 .2 接收過(guò)程

以圖5為例,在初始化之后,這個(gè)例子中的描述符和狀態(tài)數(shù)組長(zhǎng)度為4,描述符數(shù)組的基址為0x7FE010EC,狀態(tài)數(shù)組的基址為0x7FE011F8,每個(gè)描述符分配到的幀緩沖區(qū)大小為8 B。

假設(shè)幀數(shù)據(jù)共有19 B,因?yàn)閹彌_區(qū)大小為8 B,因此幀數(shù)據(jù)將存儲(chǔ)在3個(gè)緩沖區(qū)中。在將最初的8 B幀數(shù)據(jù)寫(xiě)入1號(hào)緩沖區(qū)之后,接收DMA管理器將繼續(xù)填充2號(hào)緩沖區(qū)。因?yàn)閹瑪?shù)據(jù)還沒(méi)結(jié)束,1號(hào)緩沖區(qū)的狀態(tài)中的LastFrag位應(yīng)為0,RxSize字段應(yīng)為7(8個(gè)字節(jié),采用減1編碼)。2號(hào)緩沖區(qū)的操作與1號(hào)緩沖區(qū)相同。在將最后3 B幀數(shù)據(jù)寫(xiě)入3號(hào)緩沖區(qū)之后,幀數(shù)據(jù)到達(dá)末尾,3號(hào)緩沖區(qū)狀態(tài)應(yīng)為:LastFrag=1,RxSize=2。依據(jù)前面提到的生產(chǎn)者/消費(fèi)者操作模式,在上述例子中,當(dāng)驅(qū)動(dòng)程序沒(méi)有將RxConsumeIndex加1時(shí),接收DMA管理器不能讀取新的描述符,因?yàn)槊枋龇麛?shù)組處于滿狀態(tài)。只有在驅(qū)動(dòng)程序?qū)⒔邮諗?shù)據(jù)傳送給了LwIP主線程并且對(duì)RxConsumeIndex進(jìn)行更新之后,DMA管理器才能繼續(xù)讀取描述符并接收數(shù)據(jù)。接收完一幀數(shù)據(jù)后,驅(qū)動(dòng)程序?qū)?個(gè)緩沖區(qū)中的信息組成的完整幀數(shù)據(jù)封裝為pbuf的形式,提交給協(xié)議棧內(nèi)核進(jìn)行處理。

3.2 操作系統(tǒng)模擬層的移植

為了提高可移植性,LwIP協(xié)議棧源碼并不實(shí)現(xiàn)操作系統(tǒng)中的具體操作,而是定義了協(xié)議棧與操作系統(tǒng)之間的接口函數(shù),稱(chēng)之為操作系統(tǒng)模擬層。本文使用 μC/OS-II開(kāi)源實(shí)時(shí)操作系統(tǒng)來(lái)實(shí)現(xiàn)操作系統(tǒng)模擬層。

操作系統(tǒng)模擬層主要實(shí)現(xiàn)以下4大功能:

⑴進(jìn)程同步。此功能提供了多個(gè)進(jìn)程之間的同步操作,可以使用信號(hào)量來(lái)實(shí)現(xiàn)這個(gè)功能。其結(jié)構(gòu)和函數(shù)接口如表1所示。

⑵消息傳遞。提供了進(jìn)程之間傳遞數(shù)據(jù)的功能,具體可以使用郵箱方法來(lái)傳遞。其結(jié)構(gòu)和函數(shù)接口如表2所示。

圖5 接收過(guò)程實(shí)例

⑶定時(shí)與超時(shí)處理。LwIP在初始化時(shí)會(huì)為協(xié)議棧進(jìn)程注冊(cè)多個(gè)定時(shí)與超時(shí)處理函數(shù),當(dāng)定時(shí)與超時(shí)事件發(fā)生時(shí)便會(huì)調(diào)用相應(yīng)的函數(shù)進(jìn)行處理,操作系統(tǒng)模擬層提供的接口函數(shù)能返回這些定時(shí)與超時(shí)事件的所在位置。其函數(shù)接口如表3所示。

⑷進(jìn)程管理。對(duì)LwIP協(xié)議棧的進(jìn)程進(jìn)行管理和維護(hù),主要指創(chuàng)建進(jìn)程。具體結(jié)構(gòu)和函數(shù)接口如表4所示。

μC/OS-II操作系統(tǒng)中包含了關(guān)于郵箱、信號(hào)量和隊(duì)列機(jī)制的操作函數(shù),在這些函數(shù)的基礎(chǔ)上進(jìn)行簡(jiǎn)單的封裝和修改,可以實(shí)現(xiàn)LwIP系統(tǒng)模擬層中郵箱與信號(hào)量的操作[6]。但需要注意的是LwIP和 μC/OS-II對(duì)郵箱機(jī)制的實(shí)現(xiàn)不一樣。在LwIP中,為了提高協(xié)議棧通信的效率,要求郵箱中能夠存放多條消息,而 μC/OS-II中的郵箱最多只能傳遞一條消息。所以這里采用 μC/OS-II提供的隊(duì)列操作函數(shù),因?yàn)殛?duì)列中可以存放多條消息。

接下來(lái)要實(shí)現(xiàn)的是與等待超時(shí)相關(guān)的函數(shù)。協(xié)議棧的穩(wěn)定運(yùn)行需要設(shè)定多種內(nèi)部定時(shí)器,如TCP定時(shí)器、ARP定時(shí)器等。

最后,初始化協(xié)議棧時(shí),系統(tǒng)要為內(nèi)核創(chuàng)建一個(gè)主進(jìn)程,這里可以對(duì) μC/OS-II的任務(wù)創(chuàng)建函數(shù)OSTaskCreate做簡(jiǎn)單的封裝,便可以得到所需要的進(jìn)程創(chuàng)建函數(shù)。

3.3 TCP性能測(cè)試

移植工作完成后,為了測(cè)試TCP的性能,在系統(tǒng)上建立了一個(gè)簡(jiǎn)單的TCP回顯服務(wù)器,接著利用網(wǎng)絡(luò)性能測(cè)試工具Jperf進(jìn)行TCP帶寬測(cè)試,測(cè)試結(jié)果如圖6所示??梢钥闯鰩挿€(wěn)定在3 342 kb/s左右。

4 嵌入式WEB服務(wù)器的實(shí)現(xiàn)

為了驗(yàn)證系統(tǒng)的實(shí)用性,這里實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的嵌入式WEB服務(wù)器,該WEB服務(wù)器可以響應(yīng)來(lái)自瀏覽器的HTTP GET請(qǐng)求,并在發(fā)送請(qǐng)求的瀏覽器上顯示請(qǐng)求頁(yè)面。在PC上的瀏覽器中輸入服務(wù)器的IP地址,測(cè)試結(jié)果如圖7所示,表明該系統(tǒng)運(yùn)行良好,具有實(shí)用價(jià)值。

表1 同步功能接口

表2 消息傳遞接口

表3 定時(shí)與超時(shí)處理功能接口

表4 進(jìn)程管理功能接口

5 結(jié)論

圖6 TCP帶寬測(cè)試結(jié)果

本文介紹了一種采用集成以太網(wǎng)MAC的微控制器和外接PHY器件,實(shí)現(xiàn)嵌入式以太網(wǎng)接口的方案,并在上面完成了LwIP協(xié)議棧的移植與應(yīng)用。本方案采用了較新的電子器件和計(jì)算機(jī)技術(shù),具有高效率、兼容多種PHY器件、低成本與易于實(shí)現(xiàn)等優(yōu)點(diǎn),適合中低檔的嵌入式設(shè)備接入以太網(wǎng)的應(yīng)用領(lǐng)域。

圖7 WEB服務(wù)器測(cè)試結(jié)果

[1] 肖樂(lè),李兵,邱雅.一種高速嵌入式遠(yuǎn)程監(jiān)控系統(tǒng)的研究與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2010, 29(5):55-57.

[2] LPC23XX User manual(Rev. 4.1)[EB/OL].[2012-9-05]http://www.nxp.com/documents.

[3] 張東,胡榮貴,徐海. ARM7芯片W90N740以太網(wǎng)接口設(shè)計(jì)及驅(qū)動(dòng)開(kāi)發(fā)[J].微型機(jī)與應(yīng)用,2010,29(10):18-21.

[4] 扶文樹(shù),何軍,陳國(guó)勝,等.LPC23xx的自適應(yīng)以太網(wǎng)通信接口設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(6):72-74.

[5] 朱升林.嵌入式網(wǎng)絡(luò)那些事:LwIP協(xié)議深度剖析與實(shí)戰(zhàn)演練[M].北京:水利電力出版社,2012.

[6] JLABROSSE J.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II[M].邵貝貝,譯.北京:北京航空航天大學(xué)出版社,2003.

猜你喜歡
網(wǎng)絡(luò)接口描述符數(shù)組
JAVA稀疏矩陣算法
基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
基于AKAZE的BOLD掩碼描述符的匹配算法的研究
基于深度學(xué)習(xí)的局部描述符
雙冗余網(wǎng)絡(luò)接口自動(dòng)切換測(cè)試模塊的設(shè)計(jì)與實(shí)現(xiàn)
Excel數(shù)組公式在林業(yè)多條件求和中的應(yīng)用
特征聯(lián)合和旋轉(zhuǎn)不變空間分割聯(lián)合的局部圖像描述符
淺析CTC與GSM-R系統(tǒng)網(wǎng)絡(luò)接口及路由配置改進(jìn)措施
尋找勾股數(shù)組的歷程