• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      施純啟,吳景東

      (福州大學 數(shù)學與計算機科學學院,福建 福州 350108)

      0 引言

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

      1 系統(tǒng)硬件設計

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

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

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

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

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

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

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

      圖1 DM9161A接線圖

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

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

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

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

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

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

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

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

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

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

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

      3.1 .1 初始化過程

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

      3.1 .2 接收過程

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

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

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

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

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

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

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

      圖5 接收過程實例

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

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

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

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

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

      3.3 TCP性能測試

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

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

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

      表1 同步功能接口

      表2 消息傳遞接口

      表3 定時與超時處理功能接口

      表4 進程管理功能接口

      5 結(jié)論

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

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

      圖7 WEB服務器測試結(jié)果

      [1] 肖樂,李兵,邱雅.一種高速嵌入式遠程監(jiān)控系統(tǒng)的研究與實現(xiàn)[J].微型機與應用,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)接口設計及驅(qū)動開發(fā)[J].微型機與應用,2010,29(10):18-21.

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

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

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

      猜你喜歡
      網(wǎng)絡接口描述符數(shù)組
      變電站網(wǎng)絡接口物理防護系統(tǒng)設計與實現(xiàn)
      JAVA稀疏矩陣算法
      電腦報(2022年13期)2022-04-12 00:32:38
      基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
      測繪學報(2022年12期)2022-02-13 09:13:01
      JAVA玩轉(zhuǎn)數(shù)學之二維數(shù)組排序
      電腦報(2020年24期)2020-07-15 06:12:41
      Linux單線程并發(fā)服務器探索
      利用CNN的無人機遙感影像特征描述符學習
      淺析CTC與GSM-R系統(tǒng)網(wǎng)絡接口及路由配置改進措施
      尋找勾股數(shù)組的歷程
      網(wǎng)絡設置管理
      京滬高鐵GSM-R網(wǎng)絡接口監(jiān)測網(wǎng)關(guān)子系統(tǒng)的設計與實現(xiàn)
      珲春市| 赣榆县| 广宗县| 壤塘县| 遵化市| 丰都县| 茌平县| 平乐县| 杭锦后旗| 增城市| 漾濞| 定边县| 鸡西市| 崇阳县| 疏勒县| 社旗县| 富民县| 股票| 法库县| 平潭县| 荥阳市| 邻水| 边坝县| 陇南市| 高阳县| 肃宁县| 和平区| 灵石县| 汾西县| 舒兰市| 滨海县| 乌拉特后旗| 准格尔旗| 永安市| 岗巴县| 宜昌市| 英山县| 游戏| 上思县| 克山县| 通城县|