ZigBee的msstatePAN協議棧移植
| [日期:2008-12-26] |
來源:單片機與嵌入式系統 作者:哈爾濱理工大學 陳彥明 王秋光 |
[字型:大 中 小] |
無線感應器網路(Wireless Sensor Networks,WSN)是由多個節點群組成的面向任務的無線自組織網路,一般不需要很高的通道頻寬,但應具有較低的傳輸延時和極低的功率消耗,使使用者能在有限的電池壽命內完成任務。IEEE 802.15.4/ZigBee標準把低功耗、低成本作為主要目標,為無線感應器網路提供了一種互連互連的平台。因此將ZigBee技術與無線感應器網路技術結合起來研究具有現實意義。
1 ZigBee技術的體繫結構
在ZigBee技術中,其體繫結構通常由層來量化它的各個簡化標準。每一層負責完成所規定的任務,並且向上層提供服務。各層之間的介面通過所定義的邏輯鏈路來提供服務。ZigBee技術的體繫結構主要由物理(PHY)層、媒體接入控制(MAC)層、網路/安全層以及應用程式框架層構成,其各層的分布1所示。
2 ZigBee技術的網路拓撲結構
ZigBee技術網路有2種拓撲結構:星型拓撲結構和對等拓撲結構,2所示。其中定義了兩種裝置:全功能裝置(Full Funetion Device,FFD)和精簡功能裝置(Re—dueed Function Device,RFD)。與RFD相比,FFD在硬體功能上比較完備。在通訊能力方面,FFD可以與所有其他的FFD或RFD通訊,而RFD只能和與其關聯的FFD進行通訊。與RFD相關聯的FFD裝置稱為該RFD的“協調器(Coordinator)”。在整個網路中,有一個FFD充當網路協調器 (PAN Coordinator)。除直接參与應用外,網路協調器還需要完成成員資格管理、鏈路狀態資訊管理以及分組轉寄等任務。
本文移植的協議棧拓撲結構是對等拓撲網路中的一種——樹簇網路。在樹簇網路中大部分沒備為FFD,RFD只能作為樹枝末尾處的分葉節點,這主要是由於RFD 一次只能串連一個FFD。任何一個FFD都可以作為主協調器,並為其他從裝置或主裝置提供同步服務。在整個PAN中,只要該裝置相對於PAN巾其他裝置具有更多資源,這樣的裝置都可以成為該PAN的主協調器。
在建立一個PAN時,首先,PAN主協調器將其自身設定為一個簇標識符(CID)為O的簇頭(CLH)。然後,選擇一個沒有使用的PAN標識符,並向鄰近的其他裝置以廣播的方式發送信標幀,從而形成第一簇網路。接收到信標幀的候選裝置可以在簇頭中請求加入該網路,如果PAN主協調器允許該裝置加入,該裝置就將主協調器作為它的父節點加到它的鄰近表中,成為該網路的一個從裝置;同樣,其他裝置都按照同樣的方式,請求加入到網路中。如果候選裝置不能加入到該網路中,那麼它將尋找其他的父節點。在樹簇網路中,最簡單的網路結構是只有一個簇的網路,但是多數網路結構由多個相鄰的網路構成。一旦第一簇網路滿足預定的應用或網路需求,PAN主協調器將會指定一個從裝置為另一個簇的簇頭,使得該從裝置成為一個主協調器。隨後其他的從裝置將逐個加入,形成一個多簇網路,3所示。
3 無線感應器網路的節點結構
本文移植的目標板是自行設計的無線感應器網路節點模組。其中,處理器模組採用Atreel公司的AT—megal28L,無線通訊模組採用TI公司的 CC2420,電源模組使用NCPl402晶片將2節電池進行DC—DC變換後得到,感應器模組採用DSl8820。
CC2420利用SFD、FIFO、FIFOP和CCA四個引腳表示收發資料的狀態。ATmegal28L通過CC2420的SPI介面(CSn、SO、 SI、SCK)與CC2420交換資料、發送命令,利用RSTn引腳複位晶片;並且利用VREG_EN引腳使能CC2420的電壓調整器,使其產生 CC2420所需要的1.8 V電壓,從而使CC2420進入正常工作的狀態。CC2420通過單極天線或PCB天線進行通訊。節點總體框圖4所示。
4 zigBee協議棧的移植
4.1 msstatePAN協議棧的移植
msstatePAN協議棧是由密西西比大學的R.Reese教授為廣大無線技術愛好者開發的精簡版ZigBee協議棧,基於標準C語言編寫,基本具備了 ZigBee協議標準所規定的功能,最新版本為V0.2.6,該版本支援多種開發平台,包括PICDEM Z、CC2430評估板、MSP430+CC2420(Tmote)以及WIN32虛擬平台。由於該協議棧的上述特點以及原始碼的開放性,本文選擇它作為學習和移植的
對象。
移植是將msstatePAN協議棧在PICDEM Z平台下的代碼移植到上面設計的目標板中,採用winavr20070525作為編譯器,並通過JTAG介面將程式下載到目標板中。下面介紹一下移植過程。
(1)編寫makefile檔案
winavr 20070525採用GCC編譯器,要編寫makefile檔案以完成程式的編譯。指定MCU為ATmegal28,定義CPU工作頻率F_CPU為8 000 000 Hz;定義編譯後產生的檔案類型FORMAT為ihex;將TARGET改為項目主檔案的檔案名稱,由於後面測試用ing_pong.c這個檔案,此處將 TARGET定義為ping_pong;最後定義SRC,在SRC中應包含整個項目中的所有檔案,並且各個檔案名稱之間要用空格格開。協議棧為規定當前編譯器編譯的是協調器代碼、IEEE 64位長地址等,要用到LRWPAN_COORDINATOR等宏定義,因此要在makefile檔案中加入相應的宏定義代碼。
(2)替換與編譯器相關的定義
本移植用的是GCC編譯器,所以要將與PIC編譯器相關的代碼進行替換,為此修改compiler.h標頭檔及特定編譯器的資料定義。例如對ROM資料類型進行替換,或者直接刪除該資料類型。
(3)移植與硬體平台相關的部分
該部分代碼涉及的都是最底層的東西,通過對協議棧的透徹理解,總結出要修改的檔案有halStack.c、hal.h、halHeepSpace.h、 cc2420.c/.h、evboard.c/.h、evbRadio.h、evbConfig.h等。其中halStack.c和evboard.c兩個檔案改動很大。這兩個檔案中包括硬體介面定義、串口定義、LED燈定義、硬體系統初始化定義,以及中斷處理函數和協議棧時鐘函數的實現。首先移植中斷處理函數,注意採用下降沿觸發中斷。其次,移植協議棧時鐘,目標板用ATmegal28L的定時器1作為協議棧的運行時鐘。由於單片機採用8 MHz晶振,當定時器使用64分頻時(At—megal28L定時器1沒有128分頻),此時定時器計數一次所需要的時間為8μs,而在協議棧中每傳輸一個符號(symbo1)所需要的時間為16μs,故將定時器計數2次定義為一個symbol時間。所以在設計中,要修改hal—MacTicksToUs 函數及SYMBOLS_TO_MACTICKS(x)和MSECS_TO_MACTICKS(x)宏定義。
(4)對協議棧內部各層進行適當修改
這部分的移植工作與第3步相比簡單些,一些與硬體聯絡緊密的MAC層和PHY層相關的函數都放在ev—board.c和halStack.c檔案中。具體分析如下:
①根據自己的需求修改協議棧需要的堆棧,協議中預設為l 024位元組,可以根據實際情況做些調整。
②debug.c函數中的一些定義在運行時需要大量RAM,如果選擇編譯的是協調器,則整個協議棧需要RAM儲存單元大於6KB,而ATmagal28L內部只有4 KB RAM,為此屏蔽了一些調試顯示資訊,以達到系統要求。
③修改staticbind.h函數,由於該協議棧是靜態分配地址,而該函數的作用就是定義其地址,所以該函數在整個協議棧運行中至關重要。首先要考慮其地址是不是和makefile中定義的相吻合,如果不吻合應進行相應修改,否則CC2420地址解碼就通不過,以至於無法建立網路。其次,應該確定資料存放區是按大端模式還是小端模式,如果弄反了,地址就會不一樣。ATmegal28L是小端模式,這和PIC單片機是一致的,因此不需要修改,但要修改函數中的宏定義,讓編譯器選擇相應的程式進行編譯,產生正確的地址。
(5)編譯下載
通過上面的移植,程式應該能正確進行編譯以及連結,產生HEX檔案;再用AVRStudio4.12軟體將程式下載到相應節點中,進行協議棧測試。
4.2 測試方法
為了測試協議棧移植是否成功,採用2個節點進行實驗。其中,一個作為協調器,另一個作為RFD裝置節點。在makefile中設定協調器的IEEE地址為 Ox001248000001216F,RFD裝置的IEEE地址為0x0012480000012170,並使用ping_pong.c檔案提供的功能進行測試。
首先完成網路的建立,協調器調用aplFormNetwork()函數建立一個網路;然後等待RFD裝置的加入,RFD裝置調用 aplJoinNetwork()函數申請加入網路。在網路建立成功後執行ping_pong過程,該過程就像打乒乓球一樣,先是協調器發送資料給RFD 裝置,RFD裝置接收到資訊後回傳給協調器。如此往返.這也是檔案名稱為ping_pong的原因,具體程式流程5所示。
編譯、連結ping_pong.c檔案時務必注意:如果是協調器,—定要加入宏LRWPAN_COORDINATOR,否則編譯的程式為RFD裝置的程式。編譯完成後,將產生的檔案分別下載至各節點,並將節點串連到串口調試助手,按程式要求設定串口調試助手的參數,如傳輸速率、資料位元長度等。完成這些設定後,分別開啟各節點,首先啟動協調器節點,然後再啟動RFD裝置節點。圖6是協凋器串連的串口調試助手的顯示資訊。
從圖6中可以知道,節點Ox0012480000012170加入到網路,其IEEE的長地址為Ox0012480000012170;協調器分配給該節點的短地址為Oxl699,協調器有一個鄰居節點,2個節點之間已經開始資料的傳送。由此可見,移植成功。
結 語
無線感應器網路是一門新興的技術,目前感應器網路硬體節點價格比較昂貴,軟體支援也有不足。如果能移植一個相對成熟的協議棧,將最大限度地降低節點成本。本文就是從這個角度出發,設計出了相應的硬體平台,並成功移植了msstatePAN協議棧,從學習和科研角度考慮具有借鑒意義。