林 語,張金榜,何秀春,劉 軍
(1.武警工程大學(xué) 研究生管理大隊,陜西 西安 710086;2.武警警官學(xué)院 信息工程系,四川 成都 610213;3.武警工程大學(xué) 信息工程系,陜西 西安 710086)
無線傳感器網(wǎng)絡(luò)WSN(Wireless Sensor Network)是集傳感器、嵌入式、分布式信息處理等技術(shù)于一體的與應(yīng)用相關(guān)的無結(jié)構(gòu)網(wǎng)絡(luò)。它由大量體積較小、能源受限且具有一定計算、存儲和無線通信能力的傳感器節(jié)點組成,已廣泛應(yīng)用于戰(zhàn)場態(tài)勢感知、遠程醫(yī)療監(jiān)護、環(huán)境監(jiān)測等領(lǐng)域。由于傳感器節(jié)點的硬件資源有限,因此,WSN節(jié)點硬件平臺及操作系統(tǒng)的選擇與實現(xiàn)是兩個重要的研究課題[1]。
CC2530芯片是TI公司推出的用于IEEE 802.15.4的真正的片上系統(tǒng)解決方案。它集成了微處理器、存儲器和射頻模塊,只需要極少的外部元件就可應(yīng)用于其他電路設(shè)計。CC2530具有集成度高、功耗低、體積小、成本低、電路結(jié)構(gòu)簡單、接口豐富的特點,能夠滿足傳感器節(jié)點在數(shù)據(jù)采集、處理與無線傳輸時對處理器的需求,CC2530已成為無線傳感器網(wǎng)絡(luò)節(jié)點硬件平臺設(shè)計的首選。TinyOS(TinyMicro Threading Operation System)是一個開源微型嵌入式操作系統(tǒng),是針對WSN節(jié)點硬件資源受限、并發(fā)性高等問題而量身定做的操作系統(tǒng)。TinyOS的代碼量小且高效,具有極其低的資源消耗,已成為WSN主流的操作系統(tǒng)。
由于TinyOS還不支持CC2530,所以在該平臺上開發(fā)基于TinyOS的應(yīng)用程序前,需將TinyOS移植到CC2530上,使其支持該平臺。因此,實現(xiàn)TinyOS在CC2530上的移植能為WSN提供更多的平臺選擇,具有重要的應(yīng)用價值。
對TinyOS層次性的架構(gòu)模型研究發(fā)現(xiàn),其移植性的實現(xiàn)直接與硬件抽象封裝層相關(guān),該層組件完成物理硬件到TinyOS組件模型的映射。TinyOS硬件抽象層可進一步分成如圖1所示的層次結(jié)構(gòu)[2]。硬件抽象層明確了每一層的功能,每層依賴于下層提供的接口,越往上層對硬件的依賴性越小[3]。通過對TinyOS的進一步抽象,使得各層的組件可實現(xiàn)對物理硬件的不同程度封裝和屏蔽,有區(qū)別地實現(xiàn)硬件平臺和上層組件的隔離,不同層上的組件只完成特定功能,增強了TinyOS的移植性。使得TinyOS移植時只需要修改、設(shè)計相應(yīng)的組件即可。
圖1 TinyOS硬件抽象層層次結(jié)構(gòu)圖
TinyOS和基于TinyOS的應(yīng)用程序均使用nesC語言編寫,生成以“.nc”為后綴的源文件,它經(jīng)過TinyOS自帶的NCC編譯器編譯后生成app.c文件。它的部分語法與KEIL的語法不兼容,是不能被KEIL直接編譯到8051平臺上運行的,因此需要對不兼容的語法進行修改。而app.c代碼較多,人工修改不僅費時費力,而且極易出錯[4],所以本文采用perl語言編寫語法編輯腳本Mangle script來實現(xiàn)app.c文件與KEIL的耦合,將app.c文件轉(zhuǎn)換成app_Mangled.c文件,作為KEIL編譯器的輸入,最終生成app.hex文件。具體編譯過程如圖2所示。
圖2 nesC源文件編譯過程
搭建CC2530平臺的目的是為TinyOS組件的移植和應(yīng)用程序的編譯提供編譯參數(shù)和聲明環(huán)境變量信息。搭建CC2530平臺需要以下4個步驟:
(1)在/opt/tinyos-2.x/tos/platforms/CC2530目錄下創(chuàng)建.platform文件、hardware.h文件、PlatformP.nc和PlatformC.nc文件[4]。
(2)在/opt/tinyos-2.x/support/make目錄下創(chuàng)建.target文件。.target文件為CC2530平臺配置編譯環(huán)境,讓TinyOS知道并支持所創(chuàng)建的平臺。
(3)在/opt/tinyos-2.x/support/make/mcs51目錄下創(chuàng)建mcs51.rules文件。mcs51.rules的作用是解析命令參數(shù)、設(shè)置編譯路徑、提取和指向目標平臺。
(4)在/opt/tinyos-2.x/tos/chips/mcs51目錄下創(chuàng)建mcs51hardware.h文件和McuSleepC.nc文件。
組件移植是TinyOS移植的核心,包括CC2530寄存器聲明和組件移植[5-6]。
在/opt/tinyos-2.x/tos/chips/CC2530目錄下創(chuàng)建ioCC2530.h文件。
(1)Timer組件的移植。Timer組件是一個定時器組件,其Timer接口用來觸發(fā)事件。在Timer組件移植時,先根據(jù)CC2530芯片內(nèi)部定時器部分數(shù)據(jù)資料定義各層需要定制的接口和組件列表;然后用nesC語言編寫上述各層列表中定義的接口、組件的代碼和timer.h文件,并一起存放到/opt/tinyos-2.x/tos/chips/CC2530目錄下的timer文件夾中。
(2)Adc組件的移植。Adc組件是一個具有模/數(shù)轉(zhuǎn)換功能的組件,它的AdcControl接口用來控制Adc組件的開始和關(guān)閉;Read接口提供讀取模數(shù)轉(zhuǎn)換結(jié)果的功能。用nesC語言編寫各層接口、組件代碼和Adc.h文件,并存放到/opt/tinyos-2.x/tos/chips/CC2530目錄下的adc文件夾中。
(3)Radio組件的移植。Radio組件是TinyOS的射頻組件,提供Packet、Receive、AMSend和SpiltControl接口。Packet用來實現(xiàn)數(shù)據(jù)包的管理,Receive具有數(shù)據(jù)包的接收功能,AMSend具有發(fā)送數(shù)據(jù)包的功能,SpiltControl用來控制天線的狀態(tài),負責天線的開啟和關(guān)閉。用nesC語言編寫各層接口和組件的代碼和Radio.h文件,并一起存放到/opt/tinyos-2.x/tos/chips/CC2530目錄下的radio文件夾中。
(4)Uart組件的移植。Uart組件提供模塊組件Hal-CC2530SimpleUartP和配置組件HalCC2530SimpleUartC,通過Init接口實現(xiàn)Uart組件的初始化;通過SerialByteComm接口實現(xiàn)該異步串行接收和轉(zhuǎn)發(fā)的功能。用nesC語言實現(xiàn)各層接口和組件文件,并存放到/opt/tinyos-2.x/tos/chips/CC2530目錄下的uart文件夾中。
(5)I/O組件的移植。I/O組件具有GeneralIO口的配置功能,可將端口配置成輸入或輸出,允許置位和清零,該功能由HplCC2530GeneralIOC組件實現(xiàn),它包含了io8051.h文件和ioCC2530.h文件。用nesC語言實現(xiàn)各層接口和組件文件,并存放到/opt/tinyos-2.x/tos/chips/CC2530目錄下的pins文件夾中。
(6)Flash組件的移植。Flash組件通過SimpleFlash接口實現(xiàn)對Flash的讀、寫和刪除操作。用nesC語言實現(xiàn)各層接口和組件文件,并存放到/opt/tinyos-2.x/tos/chips/CC2530目錄下的flash文件夾中。
CC2530平臺TinyOS的測試是對所移植組件的相應(yīng)功能進行測試。串口傳輸設(shè)置:波特率57 600 b/s,校驗位為無,數(shù)據(jù)位為8 bit,停止位為1 bit。
本文以Radio組件測試為例介紹對Timer組件、Adc組件、Radio組件、I/O組件和Flash組件的測試環(huán)境、測試程序、測試過程,并分析了測試結(jié)果。
(1)測試環(huán)境。測試過程使用基于CC2530的節(jié)點2個,一個節(jié)點獨立放置,另外一個節(jié)點通過串口與PC連接,兩個節(jié)點相距15 m。
(2)測試程序。獨立放置節(jié)點的測試程序是Radio-SendTestApp,它在Radio組件、Timer組件初始化完成后,啟動Radio組件,定時發(fā)送數(shù)據(jù)包;與PC相連節(jié)點的測試程序是RadioReceiveTestApp,它將接收數(shù)據(jù)包并將數(shù)據(jù)包通過串口傳送至PC;PC上運行串口調(diào)試助手,觀察是否有數(shù)據(jù)上傳。
(3)測試過程。程序編譯、下載至節(jié)點后,按復(fù)位開關(guān),配置好串口調(diào)試工具,觀察串口調(diào)試工具的輸出。
(4)測試結(jié)果及分析。Radio組件的測試結(jié)果如圖3所示。串口調(diào)試顯示能正常接收到數(shù)據(jù)包,表明Radio組件的移植是正確的。
圖3 Radio組件測試結(jié)果
按照Radio的測試過程,對Timer、Adc、Uart、I/O和Flash組件進行了測試。結(jié)果表明,這些組件均能正常工作,實現(xiàn)了TinyOS對CC2530平臺的支持。
本文針對TinyOS不支持CC2530平臺的問題,在分析TinyOS層次結(jié)構(gòu)模型的基礎(chǔ)上,確定了移植的可行性;通過修改編譯工具鏈、搭建CC2530平臺、編寫硬件抽象層各層的組件和接口文件,完成了TinyOS在CC2530上的移植。驗證結(jié)果表明,Timer組件、Adc組件、Radioz組件、Uart組件、I/O組件和Flash組件均可正常工作。TinyOS在CC2530平臺上的移植,為其他硬件平臺的移植提供了參考,為WSN和TinyOS的研究與應(yīng)用提供了更多的平臺選擇。
[1]錢開國,桑楠.基于TinyOS的無線傳感器網(wǎng)絡(luò)操作系統(tǒng)移植性研究與實現(xiàn)[C].第二屆全國通信理論與新技術(shù)學(xué)術(shù)大會會議論文集,2008:131.
[2]HANDZISKI V,POLASTRE J,HAUER J H,et al.Flexible hardware abstraction for wireless sensor networks[C].In:Proceeding of the 2nd European Workshop on Wireless Sensor Networks(EWSN2005),Turkey,2005.
[3]錢開國.無線傳感器網(wǎng)絡(luò)嵌入式操作系統(tǒng)的研究和應(yīng)用[D].成都:電子科技大學(xué),2010.
[4]莊雄,楊永明,丁唯.基于CC2431的無線傳感器網(wǎng)絡(luò)節(jié)點設(shè)計[J].電子技術(shù)應(yīng)用,2008,34(6):98-101.
[5]李響.無線傳感器網(wǎng)絡(luò)節(jié)點嵌入式操作系統(tǒng)TinyOS的研究與移植[D].成都:電子科技大學(xué),2008.
[6]錢開國.無線傳感器網(wǎng)絡(luò)嵌入式操作系統(tǒng)的研究和應(yīng)用[D].成都:電子科技大學(xué),2010.