文獻標識碼: A
文章編號: 0258-7998(2013)07-0025-03
無線傳感器網(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)用價值,。
1 移植的可行性
對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)的組件即可。
2 移植準備
2.1 修改編譯工具鏈
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.2 搭建CC2530平臺
搭建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文件,。
3 移植實現(xiàn)
組件移植是TinyOS移植的核心,,包括CC2530寄存器聲明和組件移植[5-6]。
3.1 創(chuàng)建ioCC2530.h文件
在/opt/tinyos-2.x/tos/chips/CC2530目錄下創(chuàng)建ioCC2530.h文件,。
3.2 組件移植
(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組件提供模塊組件HalCC2530SimpleUartP和配置組件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文件夾中,。
4 移植測試
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é)點后,,按復位開關(guān),,配置好串口調(diào)試工具,觀察串口調(diào)試工具的輸出,。
(4)測試結(jié)果及分析,。Radio組件的測試結(jié)果如圖3所示。串口調(diào)試顯示能正常接收到數(shù)據(jù)包,,表明Radio組件的移植是正確的,。
按照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ù)學術(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].成都:電子科技大學,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].成都:電子科技大學,,2008.
[6] 錢開國.無線傳感器網(wǎng)絡(luò)嵌入式操作系統(tǒng)的研究和應(yīng)用[D].成都:電子科技大學,2010.