天天看點

ZigBee 3.0 Z-Stack 3.01 終端裝置入網過程全解析

(配套源碼、軟體、開發闆等資源,可移步部落格同名QQ群:拿破侖940911)

這篇文章主要講解一個處于“Factory New”狀态(協定棧中的bdbNodeIsOnANetwork這個變量值為FALSE)下的“ZigBee終端裝置”的入網過程。

一、概念補充

1、信道
(1)DEFAULT_CHANLIST

關于“DEFAULT_CHANLIST”的定義,位于“f8wConfig.cfg”檔案中的。

之前的《ZigBee Z-Stack 4.02 基本網絡參數設定》這篇文章中有提及過,感興趣的朋友可以去看一下,此處就不再贅述。

(2)BDB_DEFAULT_PRIMARY_CHANNEL_SET
我們姑且将其稱為“主信道集”,其在協定棧中的定義位于“bdb_interface.h”檔案中,具體定義如下:
ZigBee 3.0 Z-Stack 3.01 終端裝置入網過程全解析
(3)BDB_DEFAULT_SECONDARY_CHANNEL_SET
我們姑且将其稱為“次信道集”,其在協定棧中的定義也位于“bdb_interface.h”檔案中,具體定義如下:
ZigBee 3.0 Z-Stack 3.01 終端裝置入網過程全解析
仔細看一下這個宏定義,就能看出來:“次信道集”和“主信道集”其實互為補集。

二、信道掃描(第一步)

1、擷取“網絡描述符清單”
首先,裝置會掃描“主信道集”——BDB_DEFAULT_PRIMARY_CHANNEL_SET中定義的所有信道,搜尋這些信道中任何合适的網絡。與此同時,該裝置會在本地建立一個“清單”,用于記錄掃描到的每一個網絡的相關資訊,最終儲存到pBDBListNwk中,其定義位于“bdb.c”檔案中:
ZigBee 3.0 Z-Stack 3.01 終端裝置入網過程全解析
我們姑且将pBDBListNwk稱為“網絡描述符清單”。由其定義可見,pBDBListNwk是一個networkDesc_t類型的指針,而關于networkDesc_t的定義位于“NLMEDE.h”檔案中:
ZigBee 3.0 Z-Stack 3.01 終端裝置入網過程全解析
由此可見,“網絡描述符清單”中的每一個條目都代表搜尋到的一個網絡的所有資訊。而具體每個條目包含了哪些資訊,如上圖所示,有panId、logicalChannel、routerCapacity、deviceCapacity等等。
2、篩選/過濾/選擇網絡

協定棧中會通過bdb_RegisterForFilterNwkDescCB()來注冊一個回調函數——pfnFilterNwkDesc(),用于對所有找到的網絡進行篩選。“網絡描述符清單”會作為一個參數,傳遞給該回調函數,進而實作網絡的篩選。

當網絡篩選完成後,對于那些被過濾掉(未被選擇)的網絡,協定棧中會調用bdb_nwkDescFree()将其相關的“網絡描述符”給釋放掉。

如果沒有找到合适的網絡,或者無法加入找到的網絡(連接配接不成功或是無法擷取“網絡密鑰”),裝置将會掃描“次信道集”——BDB_DEFAULT_SECONDARY_CHANNEL_SET中定義的所有信道,并執行上述同樣的步驟。

三、關聯和認證(第二步)

四、入網完成(第三步)

五、其他

1、pBDBListNwk,該“網絡描述符清單”其實就是一個“連結清單”。

2、在信道掃描過程中,隻有非零的信道才會被掃描,進行“網絡發現”。

(配套源碼、軟體、開發闆等資源,可移步部落格同名QQ群:拿破侖940911)