童曉紅,陳 玲
(合肥職業(yè)技術(shù)學(xué)院計算機(jī)應(yīng)用技術(shù)系,安徽 合肥238000)
ZigBee 網(wǎng)絡(luò)建立過程一般分為兩部分:第一部分是協(xié)調(diào)器需要初始化一個自組建網(wǎng)絡(luò);第二部分是路由節(jié)點或終端節(jié)點通過ZigBee 協(xié)議加入網(wǎng)絡(luò).加入網(wǎng)絡(luò)又有兩種類型,一類是終端設(shè)備通過使用MAC 層的連接進(jìn)程直接加入到自組建網(wǎng)絡(luò)中,另一類是終端設(shè)備通過與一個先前指定的父設(shè)備或者路由節(jié)點連接后再加入到ZigBee 網(wǎng)絡(luò)中.
給協(xié)調(diào)器加電,協(xié)調(diào)器按照事先IAR 編譯下載的工程文件所設(shè)定的參數(shù),選擇相應(yīng)的信道、網(wǎng)絡(luò)號、默認(rèn)地址名,建立ZigBee 自組網(wǎng)絡(luò),這部分是通過協(xié)議棧實現(xiàn)的.終端節(jié)點是加入到網(wǎng)絡(luò)后按固定的周期發(fā)送數(shù)據(jù).其工作過程與協(xié)調(diào)器流程圖(如圖1 所示)基本類似.
然后再分別給各終端節(jié)點加電,終端節(jié)點或路由節(jié)點首先進(jìn)行硬件電路的初始化,再搜索周邊通信范圍內(nèi)是否存在有自組建ZigBee 網(wǎng)絡(luò),如果有,并且符合編譯時定義的網(wǎng)絡(luò)號的許可,正常加入到該網(wǎng)絡(luò)后才能把終端數(shù)據(jù)發(fā)送到協(xié)調(diào)器,正常通信及收發(fā)數(shù)據(jù)是通過紅色、綠色LED 燈閃爍進(jìn)行驗證的.
在TI_Z-Stack 協(xié)議棧中定義的End Device與Coordinator 進(jìn)行收發(fā)數(shù)據(jù)是利用AF_Dataquest函數(shù)實現(xiàn)的,該函數(shù)會調(diào)用ZigBee 協(xié)議棧與自組網(wǎng)相關(guān)的函數(shù)并將得到的數(shù)據(jù)串通過發(fā)射天線進(jìn)行傳輸,包括打開發(fā)射機(jī)、調(diào)整發(fā)射機(jī)的發(fā)送功率、數(shù)據(jù)包的長度與地址等內(nèi)容,這些部分協(xié)議棧已經(jīng)定義了自動的實現(xiàn)過程,用戶只需要掌握AF_DataRequest 函數(shù)的使用方法即可.
圖1 協(xié)調(diào)器流程圖
協(xié)調(diào)器與終端設(shè)備正常組網(wǎng)后便自動從節(jié)點接收數(shù)據(jù),OSAL 操作系統(tǒng)的機(jī)制是每次將接收的數(shù)據(jù)封裝成一個消息,然后放入消息隊列中,如圖2 所示.
圖2 消息隊列的定義
圖3 消息隊列的處理方法
圖4 Texas Instruments Packet Sniffer
圖5 Packet Sniffer 主程序窗口
每個消息都有自己的消息ID,標(biāo)志接收到新數(shù)據(jù)的消息的ID 是AF_INCOMING_MSG_CMD,其中AF_INCOMING_MSG 的值是0x1A,用戶不可更改,ZigBee 協(xié)議棧中AF_INCOMlNG_MSG_CMD 宏定義在全局系統(tǒng)消息內(nèi)(通過OSAL 層的Zcomdef.h 文件進(jìn)行定義的):
因此,在Z-Stack 協(xié)議棧協(xié)調(diào)器的coordinator.c 代碼中有圖3 的設(shè)定:
osal_msg_receive(SerialApp_TaskID)函數(shù)從消息隊列中接收消息ID 對應(yīng)的一條消息,用switch/case 語句對消息ID 進(jìn)行判斷,如果消息隊列中得到的是AF_INCOMlNG_MSG_CMD 則進(jìn)行數(shù)據(jù)的接收、發(fā)送等相關(guān)的處理.也就是說當(dāng)協(xié)調(diào)器接收到數(shù)據(jù)后,用戶只需要從消息隊列中接收消息,然后從消息中取得所需要的數(shù)據(jù)即可,其他工作全部交給ZigBee 協(xié)議棧自動完成.
構(gòu)建ZigBee 協(xié)議分析系統(tǒng)需要用到硬件和軟件的共同支持,硬件:CC2530 開發(fā)板和ZigBee 協(xié)議分析儀.軟件:Texas Instrument Packet Sniffer.具體步驟如下:
首先,使用USB 延長線將ZigBee 協(xié)議分析儀與CC2530 開發(fā)板連接起來并安裝設(shè)備驅(qū)動.
打開Texas Instruments Packet Sniffer 軟件,如圖4 所示,在下列列表框中選擇IEEE 802.15.4/ZigBee,最后單擊Start 按鈕.
此時,會彈出Texas Instruments Packet Sniffer主程序窗口,如圖5 所示,在窗口底部Select capturing device 中已經(jīng)發(fā)現(xiàn)了分析儀.然后在下拉列表框中選擇ZigiBee2007/PRO,最后單擊小三角按鈕(開始抓包按鈕)即可進(jìn)行抓包.
依次打開執(zhí)調(diào)器電源和終端節(jié)點電源,此時Texas Instruments Packet Sniffer 軟件就可以顯示所捕獲的數(shù)據(jù)包.
按照上述過程連接好協(xié)調(diào)器與分析儀,打開協(xié)調(diào)器與HALL 終端傳感器節(jié)點電源,單擊Packet Sniffer 軟件菜單上抓包按鈕就可以抓到數(shù)據(jù)包,如圖6 所示.
從Texas Instruments Packet Sniffer 軟件抓到的數(shù)據(jù)包可以看到每個數(shù)據(jù)包有很多段組成,這與ZigBee 協(xié)議是對應(yīng)的.
下面通過ZigBee 協(xié)議分析儀捕獲的數(shù)據(jù)包分層圖實例來分析網(wǎng)絡(luò)的建立過程,并且了解到數(shù)據(jù)傳輸過程中,用戶數(shù)據(jù)在數(shù)據(jù)包的哪個位置.
第1 行:終端節(jié)點發(fā)送信標(biāo)(Beacon)請求,目標(biāo)地址與PAN ID 都為0xFFFF 進(jìn)行廣播.
第2 行:協(xié)調(diào)器建立了ZigBee 無線網(wǎng)絡(luò).在ZigBee 無線網(wǎng)絡(luò)中,第2 行所示數(shù)據(jù)包中的“Source Address”就是協(xié)調(diào)器的網(wǎng)絡(luò)地址并設(shè)定為0x0000,PAN ID 為隨機(jī)產(chǎn)生的0x100E.
第3 行:HALL 傳感器(終端節(jié)點設(shè)備)發(fā)送Association Request 請求加入網(wǎng)絡(luò).雖然PANID 進(jìn)行廣播時為0xFFFF,但目標(biāo)PANID 已經(jīng)確定為0x100E,MAC 地址(64bit)最后四位地址為7702,Sequence Number 隨機(jī)對應(yīng)為0xBF.
第4 行:協(xié)調(diào)器對終端節(jié)點傳感器的加入網(wǎng)絡(luò)請求作出OK 應(yīng)答(以相同的Sequence Number0xBF 為一一對應(yīng)的依據(jù)).
第5 行:HALL 傳感器(終端節(jié)點設(shè)備)收到協(xié)調(diào)器的應(yīng)答后,發(fā)送數(shù)據(jù)請求(Data Request),請求協(xié)調(diào)器PAN ID 0x100E 為MAC 尾四位7702 分配網(wǎng)絡(luò)短地址,Sequence Number 為其分配的地址為0xC0.
第6 行:協(xié)調(diào)器對終端節(jié)點的數(shù)據(jù)請求作出OK 應(yīng)答,序列號也是相同的,其Sequence Number也對應(yīng)為0xC0.
第7 行:協(xié)調(diào)器(PAN 0x100E、MAC 地址為00:12:4B:00:02:93:86:65)將分配的網(wǎng)絡(luò)地址發(fā)送給終端節(jié)點(MAC 地址后四位為7702),新分配的網(wǎng)絡(luò)短地址(16bit)是0xEEBC 已經(jīng)成功分配.
在這里要說明的是:IEEE 的地址是64 位,而節(jié)點的網(wǎng)絡(luò)地址是16 位.對于無線通信而言,數(shù)據(jù)長度越長,發(fā)送這些數(shù)據(jù)所需要的功率就越大,同時,由于每個數(shù)據(jù)包的最大長度是確定的,如果節(jié)點地址占據(jù)的位數(shù)太多,每個數(shù)據(jù)包所攜帶的有效數(shù)據(jù)必將減少,因此綜合上述考慮,一般節(jié)點成功加入網(wǎng)絡(luò)后,數(shù)據(jù)通信過程中使用節(jié)點的網(wǎng)絡(luò)地址作為源地址.另外動態(tài)分配網(wǎng)絡(luò)地址可以更好地節(jié)約資源.
第8 行:協(xié)調(diào)器對終端節(jié)點的數(shù)據(jù)請求作出OK 應(yīng)答,其Sequence Number 序列號也是與對應(yīng)的0xB1.
第9 行:終端節(jié)點就使用白己的網(wǎng)絡(luò)地址0xEEBC 與協(xié)調(diào)器進(jìn)行來回應(yīng)答式通信及收發(fā)數(shù)據(jù),請注意他們的來回序列號.
綜上所述,本文通過ZigBee 無線網(wǎng)絡(luò)中點對點通信的抓包案例來剖析ZigBee 網(wǎng)絡(luò)的建立過程及數(shù)據(jù)收發(fā)的基本流程,直觀清晰.同時給出了ZigBee協(xié)議分析系統(tǒng)的建立過程、協(xié)議分析儀的連接以及使用方法.關(guān)于深層次的ZigBee 網(wǎng)絡(luò)建立過程也可以參閱TI 公司的協(xié)議棧源碼作進(jìn)一步的研究.
[1] 劉青,宋立軍.ZigBee 無線傳感器網(wǎng)絡(luò)組網(wǎng)研究[J].電腦開發(fā)與應(yīng)用,2008,21(6):44-46.
[2] 李戰(zhàn)明,劉寶,駱東松.ZigBee 技術(shù)規(guī)范與協(xié)議棧分析[J].信息化縱橫,2009,28(5):45-48.
[3] 丁雪蓮.ZigBee 協(xié)議棧淺析[J].電腦與信息技術(shù),2013,21(5):18-21.
[4] 李小龍,彭美平.ZigBee 傳感器網(wǎng)絡(luò)協(xié)議棧的研究與分析[J].電腦知識與技術(shù),2013,8(18):4208-4211.
[5] 蒲泓全,賈軍營,張小嬌,等.ZigBee 網(wǎng)絡(luò)技術(shù)研究綜述[J].計算機(jī)系統(tǒng)應(yīng)用,2013,22(9):6-11.