薛建彬++郭燕波++許洋++畢玉++王斌
摘要:隨著物聯(lián)網(wǎng)技術(shù)及IOT的發(fā)展,傳感器節(jié)點(diǎn)有接入互聯(lián)網(wǎng)的需求,本文設(shè)計(jì)了一種基于嵌入式TCP/IP協(xié)議棧LwIP的輕量級(jí)實(shí)現(xiàn)方案。詳細(xì)分析了嵌入式TCP/IP協(xié)議棧LwIP的架構(gòu)和原理,結(jié)合實(shí)際應(yīng)用的特點(diǎn)實(shí)現(xiàn)了LwIP協(xié)議棧在STM32微處理器上的移植和適配。實(shí)驗(yàn)結(jié)果表明,基于LwIP協(xié)議棧的傳感系統(tǒng)滿足了網(wǎng)絡(luò)化交互需求。
關(guān)鍵詞:TCP/IP LwIP 微控制器
中圖分類號(hào):TP316.81 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2016)10-0002-01
隨著計(jì)算機(jī)互聯(lián)技術(shù)與物聯(lián)網(wǎng)技術(shù)的發(fā)展,一些像傳感器一類的輕便設(shè)備可以接入互聯(lián)網(wǎng),以便隨時(shí)監(jiān)控;這些輕便設(shè)備的特點(diǎn)是體積小,內(nèi)部運(yùn)算及存儲(chǔ)資源有限,因此就必須在資源受限的情況下實(shí)現(xiàn)及處理Internet協(xié)議?;谶@種趨勢(shì),各種用于嵌入式系統(tǒng)的小型協(xié)議棧應(yīng)運(yùn)而生,如uC/IP、uIP、LwIP和TinyTCP等,這幾種協(xié)議棧均源自BSD TCP/IP。其中,LwIP[1](輕量級(jí)TCP/IP協(xié)議棧,Lightweight TCP/IP protocol stack)是由瑞士計(jì)算機(jī)科學(xué)院Adam Dunkels等人開發(fā)的一套用于嵌入式系統(tǒng)的開源TCP/IP協(xié)議棧。LwIP最小限度的使用系統(tǒng)資源,通過(guò)共享內(nèi)存的方式實(shí)現(xiàn)應(yīng)用層與底層協(xié)議之間的通訊。應(yīng)用層通過(guò)了解底層協(xié)議使用的緩沖處理機(jī)制將使應(yīng)用層可以更加有效的重復(fù)使用緩沖區(qū),同時(shí),應(yīng)用與網(wǎng)絡(luò)代碼可以使用相同的內(nèi)存區(qū),應(yīng)用層可以直接讀寫內(nèi)部緩沖區(qū),從而避免了內(nèi)存復(fù)制產(chǎn)生的性能損失,一般只需幾十K的RAM和40K左右的ROM就可以運(yùn)行。
與其他的TCP/IP實(shí)現(xiàn)一樣,LwIP也是以分層的協(xié)議為參照設(shè)計(jì)的,它除了實(shí)現(xiàn)IP/ICMP/UDP/TCP等模塊還包括許多相關(guān)支持模塊,如操作系統(tǒng)模擬層、緩沖與內(nèi)存管理子系統(tǒng)、網(wǎng)絡(luò)接口函數(shù)及API概要說(shuō)明。
1 硬件設(shè)計(jì)
本項(xiàng)目的需求是將微控制系統(tǒng)接入互聯(lián)網(wǎng)以便服務(wù)器發(fā)起對(duì)前端設(shè)備的控制,采用的STM32F107[2-3]微控制器是意法半導(dǎo)體公司生產(chǎn)的基于ARM Cortex-M3內(nèi)核的STM系列的32位互連型微處理器。處理器內(nèi)置嵌套向量中斷控制器(NVIC),并且使用尾聯(lián)技術(shù),使得中斷的響應(yīng)只要6個(gè)時(shí)鐘周期,從而大大提高了中斷事件的處理速度,并且STM32F107系列芯片內(nèi)部集成了一個(gè)10/100 Mbps以太網(wǎng)媒體控制器(MAC)。支持MII和RMII兩種接口規(guī)范。本文設(shè)計(jì)中采用RMII模式。系統(tǒng)硬件可分為電源模塊、MCU模塊、繼電器控制模塊、網(wǎng)絡(luò)數(shù)據(jù)收發(fā)模塊。其中電源模塊負(fù)責(zé)整個(gè)系統(tǒng)的供電;MCU模塊負(fù)責(zé)系統(tǒng)內(nèi)的運(yùn)算及控制邏輯;視頻模塊負(fù)責(zé)將攝像頭視頻傳輸?shù)椒?wù)器的任務(wù);繼電器控制模塊主要負(fù)責(zé)前端執(zhí)行器的開合狀態(tài)等;網(wǎng)絡(luò)數(shù)據(jù)收發(fā)模塊負(fù)責(zé)與服務(wù)器進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的交互;系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
2 LwIP協(xié)議棧的移植
移植LwIP需要在STM32F107系統(tǒng)上修改模擬層的實(shí)現(xiàn),包括定時(shí)器、進(jìn)程同步及消息傳遞機(jī)制等系統(tǒng)服務(wù)的實(shí)現(xiàn)。
2.1 消息傳遞機(jī)制的移植
ethernetif_input()函數(shù)用于從底層物理網(wǎng)卡讀取報(bào)文,并將該報(bào)文向上傳遞給LwIP協(xié)議棧函數(shù)ethernet_input()進(jìn)行處理。
low_level_input()函數(shù)用于從內(nèi)存中申請(qǐng)一個(gè)新的pbuf,并把接收到數(shù)據(jù)報(bào)文內(nèi)容拷貝至該pbuf中。
low_level_output()函數(shù)將pbuf中的數(shù)據(jù)幀通過(guò)底層發(fā)送函數(shù)發(fā)送出去。
至此,消息傳遞機(jī)制的移植工作就完成了,用戶修改LwIP協(xié)議棧提供的系統(tǒng)模擬層函數(shù)即可。
2.2 定時(shí)器及IO的移植
STM32F107的以太網(wǎng)模塊實(shí)現(xiàn)了局域網(wǎng)CSMA/CD的子層,支持10/100Mbps的數(shù)據(jù)傳輸速率,支持全雙工和半雙工兩種操作模式。以太網(wǎng)模塊底層驅(qū)動(dòng)的實(shí)現(xiàn)主要由初始化函數(shù)ETH_BSP_Config()完成,通過(guò)設(shè)置定時(shí)器及IO配置,完成底層通信的移植。
3 結(jié)語(yǔ)
基于STM32F107微控制器的網(wǎng)絡(luò)協(xié)議棧的移植,可以使得物聯(lián)網(wǎng)系統(tǒng)內(nèi)的前端節(jié)點(diǎn)在無(wú)操作系統(tǒng)支持的環(huán)境下接入網(wǎng)絡(luò),從而完成網(wǎng)絡(luò)通信控制。
參考文獻(xiàn)
[1]DunkelsA.Design and Implementation of the LwIPTCP/IP Stack [D].Stockholm, Sweden: SwedishInstitute of Computer Science, 2001.
[2]劉火良,楊森.STM32庫(kù)開發(fā)實(shí)戰(zhàn)指南[M].北京:機(jī)械工業(yè)出版社,2013.
[3]李志明,檀永,徐石明.STM32嵌入式系統(tǒng)開發(fā)實(shí)戰(zhàn)指南[M].北京:機(jī)械工業(yè)出版社,2013.
收稿日期:2016-09-20
作者簡(jiǎn)介:薛建彬(1986—),男,山西汾陽(yáng)人,碩士,助理工程師,研究方向:嵌入式系統(tǒng)應(yīng)用。