TinyOS移植技術(shù)分析及在CC2430平臺(tái)的應(yīng)用
摘要 簡(jiǎn)述了無線傳感器網(wǎng)絡(luò)操作系統(tǒng)及傳感器節(jié)點(diǎn)的基本狀況,并從設(shè)計(jì)思路、體系結(jié)構(gòu)、運(yùn)行原理及編譯過程等方面詳細(xì)分析了當(dāng)前主流的操作系統(tǒng)TinyOS的主要特點(diǎn)。在此基礎(chǔ)上,提出了TinyOS的移植方法以及具體實(shí)現(xiàn)過程。最后,將TjnyOS成功地移植于CC2430平臺(tái)。實(shí)驗(yàn)結(jié)果表明,移植后的TinyOS可以穩(wěn)定地運(yùn)行于CC2430平臺(tái),并能可靠地實(shí)現(xiàn)傳感器之間的無線組網(wǎng)。
關(guān)鍵詞 無線傳感器網(wǎng)絡(luò);TinyOS;移植;CC2430
無線傳感器網(wǎng)絡(luò)(Wireless Sensor Network,WSN)由部署在監(jiān)測(cè)區(qū)域內(nèi)大量廉價(jià)微型傳感器節(jié)點(diǎn)組成,通過無線通信方式形成的一個(gè)網(wǎng)絡(luò)系統(tǒng),其目的是協(xié)作的感知、采集和處理網(wǎng)絡(luò)覆蓋區(qū)域中感知對(duì)象的信息,并發(fā)送給觀察者,被譽(yù)為21世紀(jì)最具影響技術(shù)之一。傳感器節(jié)點(diǎn)通常是一個(gè)微型的資源受限的嵌入式系統(tǒng),因此要求一個(gè)小型高效的操作系統(tǒng)管理組織硬件并完成軟件功能。
由于無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的資源十分有限,傳統(tǒng)的嵌入式操作系統(tǒng)難以正常有效地運(yùn)行和工作,特別對(duì)能量和內(nèi)存的需求矛盾比較突出。因此,需要一種全新的嵌入式操作系統(tǒng)來滿足無線傳感器節(jié)點(diǎn)的基本需求。近年來,科研機(jī)構(gòu)不斷開發(fā)出具有多種功能的WSN操作系統(tǒng)。大多數(shù)操作系統(tǒng)都使用事件驅(qū)動(dòng)的編程模型,典型的有TinyOS、Contiki、EYESOS、SOS等。
TinyOS操作系統(tǒng)是美國(guó)加州大學(xué)伯克利分校的研究人員針對(duì)無線傳感器網(wǎng)絡(luò)設(shè)計(jì)的開源嵌入式操作系統(tǒng),是目前無線傳感器網(wǎng)絡(luò)采用的主流操作系統(tǒng)。TinyOS最初使用匯編和C語(yǔ)言編寫,但經(jīng)研究人員進(jìn)一步的研究及使用后發(fā)現(xiàn),C語(yǔ)言并不能有效和方便地支持無線傳感器網(wǎng)絡(luò)應(yīng)用程序的開發(fā)。因而在經(jīng)過研究和設(shè)計(jì),并在對(duì)C語(yǔ)言進(jìn)行了一定擴(kuò)展的基礎(chǔ)上,提出了支持組件化編程的nesC語(yǔ)言,該語(yǔ)言可以把組件化、模塊化思想和基于事件驅(qū)動(dòng)的執(zhí)行模型結(jié)合起來,具有一些C語(yǔ)言無法比擬的優(yōu)點(diǎn)。nesC語(yǔ)言提出后,TinyOS操作系統(tǒng)和基于TinyOS操作系統(tǒng)的應(yīng)用程序全部使用nesC語(yǔ)言編寫。
1 TinyOS原理分析
1.1 簡(jiǎn)介
TinyOS是美國(guó)加州大學(xué)伯克利分校針對(duì)無線傳感器網(wǎng)絡(luò)開發(fā)的嵌入式操作系統(tǒng),核心程序很小,對(duì)硬件要求很低,它的事件驅(qū)動(dòng)機(jī)制、主動(dòng)消息機(jī)制、組件化結(jié)構(gòu)等特點(diǎn)使其在研究中得到廣泛應(yīng)用。目前,TinyOS支持的平臺(tái)主要集中在Atmel公司的AVR系列和TI公司的MsP430系列單片機(jī)。
1.2 TinyOS的體系結(jié)構(gòu)
TinyOS體現(xiàn)結(jié)構(gòu)如圖1所示,其核心部分為TinyOS的硬件抽象3層結(jié)構(gòu)。TinyOS的硬件抽象層使系統(tǒng)的軟件和硬件完全獨(dú)立,從而使系統(tǒng)的設(shè)備驅(qū)動(dòng)程序與硬件無關(guān),大大提高了系統(tǒng)的可移植性。TinyOS具有3層硬件抽象結(jié)構(gòu),并明確規(guī)定了每一層的功能,每一層都依賴于下一層提供的接口,這使得TinyOS的移植比較方便。
最底層是硬件描述層(Hardware Presentation Layer,HPL),該層提供硬件層和軟件層的直接接口,通過調(diào)用函數(shù)的方法來屏蔽復(fù)雜的硬件層,不僅實(shí)現(xiàn)了硬件層和軟件層的內(nèi)部通信,而且為系統(tǒng)其他部分提供了使用的接口。
中間層是硬件適用層(Hardware AdaptationLayer,HAL),位于HPL上層,該層對(duì)硬件層的定時(shí)器、模數(shù)轉(zhuǎn)換器、存儲(chǔ)器等模塊原型進(jìn)行較高層的抽象,可以更直接更方便地為上層軟件層提供可定制的操作接口。
最頂層是硬件獨(dú)立層(Hardware Independent Layer,HIL),位于HAL上層,該層提供抽象的獨(dú)立硬件層接口,通過隱藏硬件層來簡(jiǎn)化上層應(yīng)用軟件的編寫,其功能類似于Windows操作系統(tǒng)下的API。
TinyOS的3層硬件抽象結(jié)構(gòu)有很大的靈活性,具體的應(yīng)用程序可以將HAL和HIL組件結(jié)合使用,以提高代碼執(zhí)行效率和系統(tǒng)的可移植性。
1.3 TinyOS的運(yùn)行機(jī)制
在TinyOS的總體框架中,物理層硬件層為框架的最底層,在該層中,傳感器、射頻收發(fā)器以及時(shí)鐘等硬件均能觸發(fā)事件(event)發(fā)生,交由上層組件處理;軟件層中相對(duì)下層的組件也能出發(fā)事件并交由上層處理,而上層會(huì)發(fā)出命令(command)交下層處理。為協(xié)調(diào)各組件間任務(wù)的有序處理,需要操作系統(tǒng)采取一定的調(diào)度模式。
TinyOS采用的是事件驅(qū)動(dòng)的兩級(jí)調(diào)度:任務(wù)(task)和硬件事件處理句柄(Hardware Event Handlers)。TinyOS使用兩種機(jī)制支持任務(wù),task和post。task聲明必須為無參數(shù)的函數(shù)聲明,執(zhí)行中的任務(wù)都具有原子操作性,任務(wù)完成前彼此之間不能被搶占。硬件事件處理句柄被執(zhí)行去響應(yīng)硬件中斷,可以搶占任務(wù)的運(yùn)行和其他硬件事件處理句柄。TinyOS的任務(wù)調(diào)度隊(duì)列只采用最簡(jiǎn)單的FIFO算法,內(nèi)核使用一個(gè)循環(huán)隊(duì)列來管理任務(wù)列表,默認(rèn)任務(wù)列表大小為8。這個(gè)任務(wù)隊(duì)列實(shí)際上是一個(gè)函數(shù)指針的數(shù)組,提交一個(gè)任務(wù)即是向隊(duì)列里插入一個(gè)函數(shù)指針。任務(wù)提交(post)到FIFO隊(duì)列中等待,當(dāng)任務(wù)隊(duì)列頭索引號(hào)等于尾索引號(hào)時(shí),表明任務(wù)隊(duì)列為空,系統(tǒng)進(jìn)入休眠狀態(tài)并等待,直到新的事件發(fā)生。如果新事件向隊(duì)列中提交了任務(wù),則處理器返回執(zhí)行狀態(tài),TinyOS規(guī)定當(dāng)且僅當(dāng)任務(wù)已經(jīng)推入隊(duì)列且沒有被執(zhí)行時(shí)post表達(dá)式才返回fail,否則將繼續(xù)休眠。當(dāng)被事件觸發(fā)后,TinyOS將中發(fā)出信號(hào)的事件關(guān)聯(lián)的所有任務(wù)將被迅速處理,當(dāng)這個(gè)時(shí)間和所有任務(wù)被處理完成后,未被使用的CPU將再次被置于睡眠狀態(tài)而不是積極尋找下一個(gè)活躍事件,從而大幅降低了功耗。
2 TinyOS的編譯過程分析
TinyOS的編譯系統(tǒng)采用GNU Make,首先將TinyOS應(yīng)用程序預(yù)編譯,形成一個(gè)“*.C”文件,然后將這個(gè)文件傳遞給與硬件平臺(tái)相對(duì)應(yīng)的編譯器。TinyOS的編譯系統(tǒng)放于support/make文件夾中,包含各個(gè)平臺(tái)的配置文件“*.target”和在這個(gè)平臺(tái)上建立應(yīng)用程序的“*.rul es”文件。所以TinyOS的編譯系統(tǒng)可以分為兩個(gè)部分:使用nesC編譯的公用部分和針對(duì)具體平臺(tái)的部分。目前TinyOS支持AVR的Mica系列節(jié)點(diǎn),還有基于MSP430芯片的Telos系列及基于PXA27芯片的Imote,而對(duì)于CC2430目前還在開發(fā)中。假設(shè)目標(biāo)平臺(tái)是MICA,其編譯過程如圖2所示。
具體進(jìn)行編譯操作時(shí),編譯文件根據(jù)“TOSMAKE_PATH”變量中所列的路徑搜索“*.target”文件。“*.target”文件通常設(shè)置一些平臺(tái)相關(guān)變量和提供編譯平臺(tái)的名稱,并通過調(diào)用“TOSMake_include_platform”指向具體的“*.rules”文件。“*.rules”文件由平臺(tái)所配備的微處理器決定,因此通常幾個(gè)平臺(tái)共用一個(gè)“*.rules”文件。如果以命令行的形式給定一個(gè)虛擬平臺(tái),編譯系統(tǒng)會(huì)自動(dòng)尋找“*.ex tra”文件。
3 TinyOS操作系統(tǒng)在CC2430上的移植
3.1 CC2430的特點(diǎn)
CC2430單片機(jī)是TI公司生產(chǎn)的一款專用于IEEE 802.15.4和ZigBee協(xié)議通信的片上系統(tǒng)解決方案。它延用了以往CC2420芯片的架構(gòu),在單個(gè)芯片上整合了ZigBee射頻前端、內(nèi)存和微控制器。它使用1個(gè)8位MCU(8051),具有128 kB可編程閃存和8 kB的RAM,還包含模擬數(shù)字轉(zhuǎn)換器(ADC)、幾個(gè)定時(shí)器(Timer)、AES128協(xié)同處理器、看門狗定時(shí)器(Watchdog Timer)、32 kHz晶振的休眠模式定時(shí)器、通電復(fù)位電路(Pow er on Reset)、掉電檢測(cè)電路(Brownout Detection),以及21個(gè)可編程I/O引腳。CC2430芯片采0.18 μmCMOS工藝生產(chǎn);在接收和發(fā)射模式下,電流損耗分別低于27 mA或25 mA。CC2430非常適合那些要求能耗非常低的應(yīng)用,因?yàn)樗哂行菝吣J揭约稗D(zhuǎn)換到主動(dòng)模式的超短時(shí)間的特性。而無線傳感器網(wǎng)絡(luò)研究的一個(gè)核心問題就是節(jié)能,因?yàn)閭鞲衅鞴?jié)點(diǎn)經(jīng)常需要布置在環(huán)境惡劣的無人區(qū),所以能耗問題就成為一個(gè)關(guān)鍵問題。由于CC2430的低能耗特性,使其經(jīng)常作為傳感器節(jié)點(diǎn)的硬件平臺(tái)。
3.2 移植過程分析
TinyOS核心代碼經(jīng)nesC預(yù)編譯后形成的C文件可以被GCC理解編譯。而GCC適用的平臺(tái)包括telos系列,mica系列和intelmote2系列。但是一些平臺(tái)如Motorola HCS08,Intel MCS51則不適用于GCC編譯。所以將TinyOS移植到CC2430上的關(guān)鍵問題是,如何使GCC支持MCS-51系列的交叉編譯及支持CC2430硬件組件的編寫。
在Windows和Linux兩大主要平臺(tái)上有許多8051編譯器,其中使用最廣泛并且經(jīng)常進(jìn)行更新的有2種:KEIL和Small Device C Complier(SDCC)。由于SDCC是一個(gè)新興的開源項(xiàng)目,因此在移植過程中經(jīng)常會(huì)出現(xiàn)許多問題,使一些模塊無法正常工作。而且在調(diào)試中,SDCC只是簡(jiǎn)單地駐留在0地址,當(dāng)單步執(zhí)行代碼時(shí)也沒有任何調(diào)試信息。相比于SDCC,KEIL提供了一套良好的開發(fā)調(diào)試環(huán)境,因此,最終選用KEIL開發(fā)工具進(jìn)行TinyOS的移植工作。
具體流程如下:
(1)根據(jù)TinyOS上層組件接口的要求,用nesC語(yǔ)言編寫硬件表達(dá)層和硬件抽象層文件。
(2)使用TinyOS的NCC編譯器將編寫的應(yīng)用程序編譯成app.preMangle.c文件。
(3)將app.preMangle.c文件通過perl語(yǔ)言編寫的腳本將其原語(yǔ)法轉(zhuǎn)換為CC2430開發(fā)環(huán)境Keil支持的語(yǔ)法,生成app.c。
(4)利用KEIL開發(fā)工具將app.c編譯、連接,生成app.hex,再通過SmartRF04 Flash Programmer下載到目標(biāo)板。
3.3 TinyOS在CC2430上的移植過程
3.3.1 組件編寫
由于TinyOS的組件模式是基于不同抽象層組件的系統(tǒng),當(dāng)移植到新的平臺(tái)時(shí),可以通過添加新的底層硬件的抽象并使用已有的上層組件。為實(shí)現(xiàn)CC2430的基本功能,需要對(duì)各功能模塊進(jìn)行移植,文中移植的功能包括Timer定時(shí)器,UART通信,AD采樣,射頻通信等。具體模塊移植方法如下:
(1)通用I/O口。首先要對(duì)CC2430的各個(gè)接口進(jìn)行定義,CC2430共有21個(gè)可編程的I/O接口,通過設(shè)置一組寄存器來控制來控制這些接口作為通用I/O口或者是用作外部電路。在HplCC2430GeneralIOC文件及相關(guān)頭文件中對(duì)各個(gè)引腳進(jìn)行定義。由于需要用到CC2430的UART功能,ADC功能,射頻功能以及Timer定時(shí)器功能,所以需要對(duì)相應(yīng)的寄存器定義。
(2)UART通信。由于需要向上位機(jī)發(fā)送數(shù)據(jù),所以需要使用CC2430的UART通信功能。CC2430有兩個(gè)UART接口,分別為UART0和UART1。分別對(duì)應(yīng)CC2430兩個(gè)I/O接口。選用的UART1,RX和TX對(duì)應(yīng)P0_4接口和P0_5接口,通過SerialByteComm接口實(shí)現(xiàn)該功能。在HalCC2430SimpleUartP文件中實(shí)現(xiàn)SerialByteComm接口,該接口有兩個(gè)命令:get和put,分別用來對(duì)U1BUF寄存器進(jìn)行讀寫。在HplCC2430SimpleUartP文件中對(duì)CC24 30芯片串口通信所需要的配置的寄存器各位的值以及波特率等硬件信息進(jìn)行設(shè)置。
在PlatformSerialC文件中對(duì)這些接口進(jìn)行一個(gè)封裝,并對(duì)SerialByteComm接口的put操作作一個(gè)判斷,如果UART1的8位寄存器U1CSR的最低位為0,說明串口處于空閑狀態(tài),這是向串口發(fā)送數(shù)據(jù),否則串口處于繁忙狀態(tài),不進(jìn)行任何操作。
通過這3層組件對(duì)SerialByteComm接口的抽象,實(shí)現(xiàn)向串口發(fā)送數(shù)據(jù)的功能。
(3)數(shù)模轉(zhuǎn)換。通過傳感器感器采集到的模擬信號(hào),需要通過AD轉(zhuǎn)換為數(shù)字信號(hào)后才能進(jìn)行下一步的處理。CC2430的ADC有最高14 bit的轉(zhuǎn)換精度,可以采用內(nèi)部電壓或者外部電壓。ADCL和ADCH兩個(gè)8位寄存器存放采樣到的數(shù)據(jù),其中ADCL的有效位是2到7位,所以有效數(shù)據(jù)是14 bit。通過對(duì)READ接口的抽象實(shí)現(xiàn)該組件。在adc.h頭文件中配置CC2430的寄存器ADCCON1、ADCCON2、ADCCON3,可以設(shè)置轉(zhuǎn)換精度以及采樣到的數(shù)據(jù)傳輸?shù)叫酒墓苣_地址。
可以看到這里定義一組宏,對(duì)應(yīng)了寄存器需要的值。這里使用CC2430芯片的單次采樣,由于節(jié)點(diǎn)使用了外部傳感器這里將ADC的參考電壓設(shè)為外部電壓,精度設(shè)為14 bit,將P0_4引腳的電壓值數(shù)模轉(zhuǎn)換后傳入芯片處理器。
(4)定時(shí)器。CC2430有一個(gè)16位定時(shí)器Timer1和兩個(gè)8位定時(shí)器Timer3和Timer4,以及一個(gè)MAC定時(shí)器Timer2。這里完成了Timer1的移植。在HplCC2430Timer1P文件中定制相關(guān)配置,通過HplCC2430Timer16接口實(shí)現(xiàn)基本的計(jì)時(shí)功能。
(5)射頻模塊。傳感器節(jié)點(diǎn)采集到數(shù)據(jù)后需要通過無線射頻的方式發(fā)送出去,這就需要使用CC2430的射頻功能。TinyOS通過SimpleMac接口實(shí)現(xiàn)該功能,SimpleMac接口可以實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)收發(fā)功能。SimpleMac接口非常適合802.15.4協(xié)議,缺點(diǎn)是不支持?jǐn)?shù)據(jù)重傳和路由功能。在文件HPLCC2430RadioP文件及相關(guān)中對(duì)CC2430的的寄存器進(jìn)行讀寫,HALCC2430RadioP組建對(duì)它進(jìn)行進(jìn)一步的抽象。
3.3.2 編譯過程修改
為使TinyOS的編譯系統(tǒng)能夠找到目標(biāo)平臺(tái)CC2430,我們需要修改它的編譯環(huán)境?;赥inyOS開源代碼的約定,除核心程序外的其余項(xiàng)目開發(fā)放在contrib文件中。因此將代碼放于cygwin/opt/tinyos-2.x-contrib/ncepu中。這里需要在此文件夾中添加CC2430的編譯路徑以及具體的編譯方法。
(1)在ncepu文件夾下增加環(huán)境定制文件“env”,定制編譯路徑,使編譯系統(tǒng)能夠?qū)ふ业骄幾g平臺(tái)。修改后的編譯工具鏈如圖3所示。程序的編譯結(jié)果如圖4所示。
(2)在ncepu/support/make文件下增加“cc2430em.target”文件。
將編譯好的app.hex下載到CC2430上,程序即可運(yùn)行。
4 基于CC2430的無線傳感器網(wǎng)絡(luò)
為檢驗(yàn)TinyOS在CCC2430上的運(yùn)行效果,設(shè)計(jì)了一個(gè)簡(jiǎn)單無線傳感器數(shù)據(jù)采集網(wǎng)絡(luò)。傳感器節(jié)點(diǎn)的檢測(cè)功能較為簡(jiǎn)單,僅完成環(huán)境的亮度測(cè)量。
4.1 無線傳感器節(jié)點(diǎn)
節(jié)點(diǎn)的硬件框圖如圖5所示。節(jié)點(diǎn)上的亮度傳感器為光敏電阻,環(huán)境亮度通過該器件以及信號(hào)調(diào)理電路轉(zhuǎn)換為電壓信號(hào),該信號(hào)被傳輸?shù)紺C2430的A/D轉(zhuǎn)換器輸入端,經(jīng)A/D轉(zhuǎn)換變?yōu)閿?shù)字信號(hào),該數(shù)字信號(hào)即為采集的亮度數(shù)據(jù)。
傳感器節(jié)點(diǎn)的軟件流程如圖6所示。其大體工作過程為:接通電源后,節(jié)點(diǎn)自動(dòng)尋找通信范圍的協(xié)調(diào)器,如果找到就建立網(wǎng)絡(luò)連接,當(dāng)按鈕按下時(shí)觸發(fā)ADC采樣,傳感器節(jié)點(diǎn)開始采集數(shù)據(jù)并向協(xié)調(diào)器發(fā)送數(shù)據(jù)。當(dāng)節(jié)點(diǎn)接受到關(guān)閉信號(hào)時(shí),進(jìn)入休眠狀態(tài)并停止向協(xié)調(diào)器發(fā)送數(shù)據(jù)。
4.2 無線傳感器網(wǎng)絡(luò)中協(xié)調(diào)器的設(shè)計(jì)
協(xié)調(diào)器負(fù)責(zé)無線傳感器網(wǎng)絡(luò)的組網(wǎng)、路由以及數(shù)據(jù)收集等功能。同時(shí),協(xié)調(diào)器也是網(wǎng)路與PC機(jī)之間連接的一個(gè)橋梁,通過協(xié)調(diào)器可以監(jiān)控節(jié)點(diǎn)探測(cè)到的數(shù)據(jù)并可以對(duì)傳感器節(jié)點(diǎn)進(jìn)行控制。
協(xié)調(diào)器設(shè)備打開后,會(huì)自動(dòng)接收通信范圍內(nèi)的節(jié)點(diǎn)信號(hào),這個(gè)信號(hào)包括節(jié)點(diǎn)采集到的數(shù)據(jù)以及節(jié)點(diǎn)本身的地址。當(dāng)協(xié)調(diào)器接收到信號(hào)時(shí),對(duì)該信號(hào)進(jìn)行判斷,如果該信號(hào)已經(jīng)存在于網(wǎng)絡(luò)列表,則直接接收節(jié)點(diǎn)的數(shù)據(jù)。如果這個(gè)信號(hào)不存在于網(wǎng)絡(luò)列表當(dāng)中,則將該節(jié)點(diǎn)加入網(wǎng)絡(luò)列表。然后將網(wǎng)絡(luò)列表中的節(jié)點(diǎn)發(fā)送來的數(shù)據(jù)都通過串口傳輸至PC機(jī)。當(dāng)協(xié)調(diào)器接收到PC發(fā)送的指令后,根據(jù)指令內(nèi)容將指令信號(hào)發(fā)送給相應(yīng)的傳感器節(jié)點(diǎn)。由此,通過協(xié)調(diào)器可以實(shí)現(xiàn)PC機(jī)對(duì)傳感器節(jié)點(diǎn)的監(jiān)控和操作。軟件的設(shè)計(jì)流程如圖7所示。
各節(jié)點(diǎn)發(fā)送到協(xié)調(diào)器的測(cè)量數(shù)據(jù)為一個(gè)16位的正整數(shù)值,協(xié)調(diào)器每接收到一個(gè)測(cè)量數(shù)據(jù),即通過RS232接口電路將該數(shù)據(jù)傳輸至PC機(jī),協(xié)調(diào)器的硬件框圖如圖8所示。
4.3 節(jié)點(diǎn)與協(xié)調(diào)器之間的通信協(xié)議
節(jié)點(diǎn)使用無線射頻技術(shù)(RFID)與協(xié)調(diào)器進(jìn)行通信。隨著技術(shù)的發(fā)展,RFID技術(shù)已經(jīng)成為人們?nèi)粘I钪幸粋€(gè)重要工具。但RFID技術(shù)也存在一些技術(shù)問題需要解決,其中標(biāo)簽防碰撞問題(Anti—collision)是RFID技術(shù)的關(guān)鍵問題之一。當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)向協(xié)調(diào)器發(fā)送信號(hào)時(shí),要防止信號(hào)的碰撞。為解決這一問題,有空分多址、頻分多址、碼分多址和時(shí)分多址4種方法。文中選用基于CSMA/CA協(xié)議的無線射頻防碰撞算法。
CSMA算法是傳統(tǒng)TDMA(Time Division Multiple Access,動(dòng)態(tài)時(shí)分多址)的調(diào)度分配算法ALOHA的改進(jìn)。傳統(tǒng)的ALOHA算法在標(biāo)簽視圖發(fā)送數(shù)據(jù)是,并不考慮信道當(dāng)前的忙閑狀態(tài),完全隨機(jī)接入??梢钥吹健_@種算法有很大的盲目性,當(dāng)存在大量節(jié)點(diǎn)或信息量過大時(shí),會(huì)使信道重疊現(xiàn)象加劇,數(shù)據(jù)碰撞頻繁出現(xiàn),傳輸性能嚴(yán)重下降。為解決這一問題,提出了在發(fā)送數(shù)據(jù)前,對(duì)信道進(jìn)行偵聽,這就是廣泛使用的CSMA算法。CSMA算法的基本思路是:
(1)標(biāo)簽產(chǎn)生新的數(shù)據(jù),等待發(fā)送。
(2)偵聽信道是否空閑,若空閑則發(fā)送數(shù)據(jù),發(fā)送完成后返回第一步;若信道正忙則產(chǎn)生一個(gè)隨機(jī)數(shù),進(jìn)入延時(shí)操作。假定隨機(jī)數(shù)的取值范圍為min~max之間,初始化時(shí),值為min,每次重傳,隨機(jī)數(shù)逐漸增大,當(dāng)達(dá)到max值時(shí)保持不變。沒成功傳輸之后,回復(fù)到初始值min。
(3)延時(shí)操作結(jié)束后,返回步驟(2)。
由于無線網(wǎng)絡(luò)的特殊性,很難確實(shí)地偵聽是否有碰撞發(fā)生,所以采用帶沖突避免的載波偵聽多路訪問即CSMA/CA算法。標(biāo)簽發(fā)送數(shù)據(jù)前,先發(fā)送一段請(qǐng)求發(fā)送幀RTS(Request to Send)給目標(biāo)端,等待目標(biāo)端回應(yīng)的清除發(fā)送幀CTS(Clear to Send)后,才開始傳送。通過RTS與CTS的握手(handshake)避免發(fā)送數(shù)據(jù)時(shí)發(fā)生碰撞。
4.4 實(shí)驗(yàn)與結(jié)果分析
協(xié)調(diào)器與節(jié)點(diǎn)上電后,即可實(shí)現(xiàn)自動(dòng)組網(wǎng)。組網(wǎng)成功后,節(jié)點(diǎn)可將采樣到的數(shù)據(jù)發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器接收信號(hào),一方面會(huì)觸發(fā)自身的LED燈閃爍,同時(shí)通過RS232接口電路將采集到的數(shù)據(jù)通過串口發(fā)送給PC機(jī)。實(shí)驗(yàn)結(jié)果如圖9所示。
每個(gè)節(jié)點(diǎn)與協(xié)調(diào)器上均設(shè)置有控制按鈕,用于通信的驗(yàn)證與控制。在節(jié)點(diǎn)上,每按一次按鈕采集一個(gè)數(shù)據(jù),同時(shí)將該數(shù)據(jù)發(fā)送到協(xié)調(diào)器。這些過程,通過實(shí)驗(yàn)得到了有效的驗(yàn)證。在PC機(jī)上,通過串口助手軟件來觀察接收的數(shù)據(jù)。其中,通信的波特率設(shè)置為9600bit·s-1,PC機(jī)屏幕上顯示信息如圖10所示。其中Device表示節(jié)點(diǎn)ID,最后的數(shù)值是經(jīng)過處理的節(jié)點(diǎn)的探測(cè)值。這里使用兩個(gè)節(jié)點(diǎn)均置于室內(nèi)環(huán)境,其中一個(gè)用不透光的黑膠帶遮蓋住傳感器的光敏元件??梢钥吹?,協(xié)調(diào)器共接收到了兩個(gè)節(jié)點(diǎn)的信號(hào),兩個(gè)信號(hào)的值均比較平穩(wěn),其中一個(gè)節(jié)點(diǎn)的采樣值明顯大于另一個(gè),與實(shí)際情況相符。實(shí)驗(yàn)證明系統(tǒng)各項(xiàng)功能運(yùn)行良好,網(wǎng)絡(luò)通信穩(wěn)定。
5 結(jié)束語(yǔ)
在對(duì)TinyOS操作系統(tǒng)詳細(xì)分析的基礎(chǔ)上,提出了TinyOS的移植方法以及具體實(shí)現(xiàn)過程,并將其移植于CC2430硬件平臺(tái)。其中移植的功能模塊包括UART通信、定時(shí)器和RF無線射頻通信等。實(shí)驗(yàn)結(jié)果表明,移植后的TinyOS可以健壯地運(yùn)行于CC2430平臺(tái),并能可靠地實(shí)現(xiàn)傳感器之間的無線組網(wǎng)。該系統(tǒng)可作為一個(gè)原型,經(jīng)進(jìn)一步性能完善或部分功能擴(kuò)充即可實(shí)現(xiàn)實(shí)際應(yīng)用。