摘 要: 針對(duì)ZigBee傳輸距離短的不足,結(jié)合以太網(wǎng)的遠(yuǎn)程特性,設(shè)計(jì)了基于ARM平臺(tái)的ZigBee網(wǎng)關(guān)。硬件采用STM32處理器和ZigBee CC2530,在操作系統(tǒng)μC/OS-II的基礎(chǔ)上實(shí)現(xiàn)TCP/IP協(xié)議和ZigBee協(xié)議的移植。經(jīng)測(cè)試,該網(wǎng)關(guān)通用性好,實(shí)現(xiàn)了ZigBee與ARM數(shù)據(jù)通信,通過以太網(wǎng)實(shí)現(xiàn)了數(shù)據(jù)的遠(yuǎn)程監(jiān)測(cè)。
關(guān)鍵詞: ZigBee;μC/OS-II;以太網(wǎng);網(wǎng)關(guān)
無線傳感網(wǎng)絡(luò)WSN(Wireless Sensor Network)是由部署在監(jiān)測(cè)區(qū)域內(nèi)的大量廉價(jià)微型傳感器節(jié)點(diǎn)組成的、通過無線通信方式形成的一個(gè)多跳的自組織的網(wǎng)絡(luò)系統(tǒng)。ZigBee憑借低功耗、短延時(shí)、自組網(wǎng)等優(yōu)勢(shì)已廣泛應(yīng)用于無線傳感器網(wǎng)絡(luò)中,但如何實(shí)現(xiàn)ZigBee網(wǎng)絡(luò)的遠(yuǎn)程管理和監(jiān)測(cè)逐漸成為該領(lǐng)域的重要研究課題。本文設(shè)計(jì)了基于ARM平臺(tái)的ZigBee網(wǎng)關(guān),其目的是實(shí)現(xiàn)ZigBee無線網(wǎng)絡(luò)的遠(yuǎn)程控制。
1 系統(tǒng)概述
網(wǎng)關(guān)主要由無線傳感器和以太網(wǎng)服務(wù)器兩部分組成。無線傳感器選用ZigBee CC2530;以太網(wǎng)服務(wù)器以STM32作為主處理器,通過串口(UART)連接以太網(wǎng)控制器ENC28J60。
網(wǎng)關(guān)總體結(jié)構(gòu)由三部分組成,即硬件層、軟件層和應(yīng)用層[1],如圖1所示。硬件層描述了網(wǎng)關(guān)中的處理器和無線傳感等硬件;軟件層是移植μC/OS-II實(shí)時(shí)內(nèi)核、嵌入式TCP/IP協(xié)議棧LwIP和ZigBee協(xié)議棧,實(shí)現(xiàn)TCP/IP和ZigBee兩種協(xié)議棧間協(xié)議的雙向透明轉(zhuǎn)換,同時(shí)封裝一些關(guān)鍵應(yīng)用程序接口(API)函數(shù)供應(yīng)用層程序調(diào)用;應(yīng)用層是用戶根據(jù)具體的數(shù)據(jù)要求編寫的應(yīng)用程序,用戶根據(jù)實(shí)際需要使用下層定義的API函數(shù)自行擴(kuò)充相關(guān)應(yīng)用。
2 網(wǎng)關(guān)硬件設(shè)計(jì)
網(wǎng)關(guān)的工作流程為:網(wǎng)關(guān)內(nèi)的ZigBee協(xié)調(diào)器創(chuàng)建一個(gè)無線網(wǎng)路,控制區(qū)域內(nèi)ZigBee節(jié)點(diǎn)自動(dòng)搜尋網(wǎng)絡(luò),并加入到網(wǎng)絡(luò)中;當(dāng)需要遠(yuǎn)程監(jiān)控計(jì)算機(jī)獲得某一個(gè)節(jié)點(diǎn)的數(shù)據(jù)或者發(fā)送某一個(gè)指令給節(jié)點(diǎn)時(shí),只需向以太網(wǎng)口發(fā)送相應(yīng)的節(jié)點(diǎn)地址和指令即可;網(wǎng)關(guān)以太網(wǎng)接口獲得遠(yuǎn)程計(jì)算機(jī)的命令后,就會(huì)通過處理器的協(xié)議轉(zhuǎn)換通知ZigBee協(xié)調(diào)器向相應(yīng)的傳感器節(jié)點(diǎn)發(fā)送指令;傳感器節(jié)點(diǎn)收到命令后按照指令執(zhí)行操作,并把數(shù)據(jù)按相反的路徑發(fā)送給遠(yuǎn)程監(jiān)測(cè)計(jì)算機(jī)。網(wǎng)關(guān)的硬件結(jié)構(gòu)如圖2所示。
其中,微處理器通過SPI方式與ZigBee和以太網(wǎng)控制器通信,ZigBee節(jié)點(diǎn)是監(jiān)測(cè)區(qū)域內(nèi)的傳感器節(jié)點(diǎn),自動(dòng)加入?yún)f(xié)調(diào)器建立的網(wǎng)路中。
2.1 硬件選擇
考慮到高性能、低成本等因素,網(wǎng)關(guān)選用基于Cortex-M3內(nèi)核的STM32F103作為主處理器。此系列處理器是增強(qiáng)型處理器,工作頻率達(dá)到72 MHz,內(nèi)置高速存儲(chǔ)器(高達(dá)128 KB的閃存和20 B的SRAM)接口。集成了許多緊耦合系統(tǒng)外設(shè),能滿足下一代產(chǎn)品的控制需求。調(diào)試模式有串口調(diào)試和JTAG接口,本文中采用串口調(diào)試方式,節(jié)省了開銷。多個(gè)通信接口:2個(gè)I2C接口(SMBus/PMBus)、5個(gè)USART接口、3個(gè)SPI接口等。這些特性足以滿足本網(wǎng)關(guān)設(shè)計(jì)的要求。
CC2530是用于IEEE802.15.4、ZigBee和RF4CE應(yīng)用的一個(gè)真正的片上系統(tǒng)(SoC)解決方案。低功耗、短延時(shí),以非常低的總成本建立龐大的網(wǎng)絡(luò)節(jié)點(diǎn)等特性成為無線傳感網(wǎng)絡(luò)重要技術(shù)之一,并且結(jié)合了領(lǐng)先的RF收發(fā)器的優(yōu)良性能,業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型8051 CPU,系統(tǒng)內(nèi)具有可編程閃存、8 KB RAM和許多其他強(qiáng)大的功能。2個(gè)USART接口,調(diào)試接口用于內(nèi)部電路調(diào)試,具有兩線串行接口。
2.2 STM32與CC2530的硬件連接
STM32處理器與CC2530的硬件連接[2]如表1所示。
3 網(wǎng)關(guān)軟件設(shè)計(jì)
本文設(shè)計(jì)的網(wǎng)關(guān),按軟件平臺(tái)可分為運(yùn)行在ZigBee無線模塊中的ZigBee協(xié)議棧程序和運(yùn)行在主處理器STM32中的嵌入式以太網(wǎng)服務(wù)器程序兩部分。其中在STM32中移植?滋C/OS-II實(shí)時(shí)操作系統(tǒng),兩個(gè)不同的網(wǎng)絡(luò)使用兩類協(xié)議,即TCP/IP協(xié)議和ZigBee協(xié)議。
3.1 ZigBee協(xié)議棧
ZigBee協(xié)調(diào)器中運(yùn)行ZigBee協(xié)議棧程序,協(xié)議棧采用Z-Stack 2007,其結(jié)構(gòu)包括應(yīng)用層、網(wǎng)絡(luò)層、媒介訪問控制層和物理層??梢哉fZ-Stack是一個(gè)小型的操作系統(tǒng),底層和網(wǎng)絡(luò)層內(nèi)容已經(jīng)封裝好,只需根據(jù)需要修改應(yīng)用層函數(shù),通過任務(wù)輪詢機(jī)制執(zhí)行任務(wù)。
3.2 μC/0S-II下LwIP的移植
LwIP是瑞士計(jì)算機(jī)科學(xué)院(Swedish Institute of Computer Science)的DUNKELS A等開發(fā)的一個(gè)小型開源的TCP/IP協(xié)議棧,實(shí)現(xiàn)的重點(diǎn)是在保持TCP協(xié)議主要功能的基礎(chǔ)上減少對(duì)RAM的占用,一般它只需要幾十KB RAM和40 KB左右的ROM就可以運(yùn)行,使得LwIP協(xié)議棧適合應(yīng)用在低端嵌入式系統(tǒng)中。
LwIP協(xié)議棧把所有與硬件、OS、編譯器相關(guān)的部分獨(dú)立出來,放在/src/arch目錄下,因此LwIP在?滋C/OS-II上的移植實(shí)現(xiàn)只需要修改這個(gè)目錄下的文件。LwIP成功移植到μC/OS-II操作系統(tǒng)需要修改和編程的部分[3]:
(1)修改與STM32及IAR編譯器相關(guān)的include文件(cc.h、cpu.h、perf.h);
(2)修改與μC/OS-II相關(guān)的一些結(jié)構(gòu)和函數(shù);
(3)lib_arch中庫(kù)函數(shù)的實(shí)現(xiàn);
(4)STM32網(wǎng)絡(luò)驅(qū)動(dòng)程序編寫;
(5)μC/OS-II模擬層相關(guān)代碼編寫。
完成上面的幾個(gè)部分后就可以在?滋C/0S-II中初始化LwIP,并創(chuàng)建TCP或UDP任務(wù)。LwIP的初始化必須在μC/0SII完全啟動(dòng)之后(即在任務(wù)中)進(jìn)行,因?yàn)樗某跏蓟玫搅诵盘?hào)量等 OS相關(guān)的操作。關(guān)鍵代碼和說明如下:
main(){
OSInit();
OSTaskCreate(lwip_init_task, &LineNo11, &lwip_init_stk
[TASK_STK_SIZE-1], 0);
OSTaskCreate(usr_task,&LineNo12,&usr_stk[TASK_STK_
SIZE-1],1);
OSStart();
}
3.3 協(xié)議轉(zhuǎn)換軟件設(shè)計(jì)
如何使得節(jié)點(diǎn)間數(shù)據(jù)交換透明化是網(wǎng)關(guān)應(yīng)用程序的主要問題,需要設(shè)計(jì)協(xié)議轉(zhuǎn)換。在TCP/IP協(xié)議簇中,以太網(wǎng)的數(shù)據(jù)傳輸使用硬件地址(MAC)來識(shí)別,地址解析協(xié)議(ARP)完成IP地址和數(shù)據(jù)鏈路層使用的硬件地址之間的轉(zhuǎn)換,參考TCP/IP下的實(shí)現(xiàn)機(jī)制,在網(wǎng)關(guān)軟件支持層的ZigBee協(xié)議和TCP/IP協(xié)議之上添加應(yīng)用地址適配層和應(yīng)用協(xié)議層。軟件結(jié)構(gòu)[4]如圖3所示。
應(yīng)用地址適配層實(shí)現(xiàn)ZigBee地址、以太網(wǎng)地址與應(yīng)用層地址的映射關(guān)系,通過創(chuàng)建地址映射表以及相應(yīng)的軟件操作接口來實(shí)現(xiàn);應(yīng)用協(xié)議層在應(yīng)用地址適配層的基礎(chǔ)上,通過制定統(tǒng)一的應(yīng)用協(xié)議,規(guī)范數(shù)據(jù)交換格式;網(wǎng)關(guān)應(yīng)用程序?qū)崿F(xiàn)網(wǎng)關(guān)具體功能,以μC/OS-II任務(wù)的形式組織運(yùn)行。
3.4 μC/OS-II操作系統(tǒng)
μC/OS-II是一種免費(fèi)公開源代碼、結(jié)構(gòu)小巧、具有可剝奪實(shí)時(shí)內(nèi)核的實(shí)時(shí)操作系統(tǒng),包含了任務(wù)調(diào)度、任務(wù)管理、時(shí)間管理、內(nèi)存管理和任務(wù)間的通信和同步等基本功能。
3.4.1 系統(tǒng)移植
在STM32微處理器平臺(tái)上移植?滋C/OS-II只需要修改OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C 3個(gè)文件。OS_CPU.H中修改聲明中與微處理器相關(guān)的常量、宏和typedef;OS_CPU_A.ASM中實(shí)現(xiàn)五個(gè)與處理器相關(guān)的函數(shù):OS_CPU_SR_Save( )、OS_CPU_SR_Restore( )、OSStart-HighRdy( )、OSCtxSw( )、OSIntCtxSw( );OS_CPU_C.C中有9個(gè)鉤子函數(shù)(空函數(shù))和一個(gè)OSTaskStkInit( )函數(shù),OSTask-StkInit( )函數(shù)功能是完成新建任務(wù)堆棧的初始化。
3.4.2 網(wǎng)關(guān)任務(wù)函數(shù)
網(wǎng)關(guān)應(yīng)用程序是以μC/OS-II任務(wù)的形式組織運(yùn)行的,μC/OS-II中主要任務(wù)是接收和處理以太網(wǎng)的指令,實(shí)現(xiàn)以太網(wǎng)和ZigBee節(jié)點(diǎn)間通信。系統(tǒng)中的主要任務(wù)函數(shù)包括:以太網(wǎng)數(shù)據(jù)接收任務(wù)TaskEthernetRec()、以太網(wǎng)數(shù)據(jù)處理任務(wù)TaskDealEthernet()、以太網(wǎng)數(shù)據(jù)發(fā)送任務(wù)TaskEthernetSend()、ZigBee數(shù)據(jù)接收任務(wù)TaskZigBeeRec()、ZigBee數(shù)據(jù)處理任務(wù)TaskDealZigBee()和ZigBee數(shù)據(jù)發(fā)送任務(wù)TaskZigBeeSend()。
任務(wù)之間的數(shù)據(jù)共享通過多個(gè)數(shù)據(jù)隊(duì)列實(shí)現(xiàn),主要數(shù)據(jù)隊(duì)列包括:以太網(wǎng)數(shù)據(jù)接收緩沖隊(duì)列QueueEthernetRec()、以太網(wǎng)數(shù)據(jù)發(fā)送緩沖隊(duì)列QueueEthernetSend()、ZigBee數(shù)據(jù)接收緩沖隊(duì)列QueueZigBeeRec()及ZigBee數(shù)據(jù)發(fā)送緩沖隊(duì)列QueueZigBeeSend()。
通過本網(wǎng)關(guān)對(duì)兩個(gè)ZigBee節(jié)點(diǎn)采集的溫度數(shù)據(jù)進(jìn)行簡(jiǎn)單的控制,取得了理想的控制效果。網(wǎng)關(guān)的設(shè)計(jì)彌補(bǔ)了ZigBee通信距離短的不足,利用低功耗、高性能的STM32微處理器,實(shí)現(xiàn)了ZigBee短距離通信的遠(yuǎn)程控制,增加了ZigBee網(wǎng)絡(luò)應(yīng)用的廣泛性。軟件部分采用?滋C/OS-II操作系統(tǒng),方便移植到更高性能的ARM9處理器上。該網(wǎng)關(guān)所具有靈活性使其可應(yīng)用在多種不同的工業(yè)控制現(xiàn)場(chǎng),具有較強(qiáng)的實(shí)用性。
參考文獻(xiàn)
[1] 張帥華,楊遠(yuǎn),梁玉堂,等.基于AT91SAM9260的ZigBee工業(yè)以太網(wǎng)網(wǎng)關(guān)設(shè)計(jì)[J].微計(jì)算機(jī)信息,2011,27(8):113-114.
[2] 徐琰,馬忠梅.LM3S1138與CC2420的無線傳感器網(wǎng)絡(luò)通信[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2009(10):18-20.
[3] 喬大雷,夏士雄,楊松.基于ARM9的嵌入式ZigBee網(wǎng)關(guān)設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007,23(12-2):156-158.
[4] 甘勇,王華,常亞軍,等.基于ARM平臺(tái)的ZigBee網(wǎng)關(guān)設(shè)計(jì)[J].通信技術(shù),2009,42(1):199-201.