Zigbee地址分配
Zigbee有兩種地址分配方式:分散式分配機制和隨機分配機制。
1.隨機分配機制
隨機分配機制是指當NIB的nwkAddrAlloc值為0x02 時,地址隨機選擇。在這種情況下nwkMaxRouter就無意義了。隨機地址分配應符合NIST測試中的描述 。當一個裝置加入網路使用的是Mac地址,其父裝置應選擇一個尚未分配過的隨機地址。一旦裝置已分配一個地址,它沒有理由放棄該地址,並應予以保留,除非它收到宣告,其地址與另一個裝置衝突。此外,裝置可能自我指派隨機地址,比如利用加入命令幀加入一個網路。
2.分散式分配機制
我們知道,每個zigbee裝置應該擁有一個唯一的MAC地址。協調器(coordinator)在建立網路以後使用0x0000做為自己的短地址。在路由器(router)和終端(enddevice)加入網路以後,使用父裝置給它分配的16位的短地址來通訊。那麼這些短地址是如何分配的呢?
16位的地址意味著可以分配給65536個節點之多,地址的分配取決於整個網路的架構,整個網路的架構由這3個值決定:
1.網路的最大深度(Lm);
2.每個父親裝置擁有的孩子數(Cm);
3.第2條的孩子裝置當中有幾個是路由器(Rm)。
有了這3個值就可以根據下面的公式來算出某父裝置的路由器子裝置之間的地址間隔Cskip(d):
上面這個公式是用來計算位於深度d的父親裝置的,它所分配的子路由器之間的短地址間隔。該父親裝置分配的第1個路由器地址=父親裝置地址+1,分配的第2個路由器地址=父親裝置地址+1+Cskip(d),第3個路由器地址=父親裝置地址+1+2×Cskip(d),依次類推。
計算終端地址:
這個公式是來計算A parent這個父親裝置分配的第n個終端裝置的地址A n。
來舉個簡單的例子,假設有一個Zigbee網路,最大深度為3,每個父親的最大孩子數是5,在孩子當中路由器數量是3,如圖所示:
由圖可知,協調器的Cskip(d) = (1+5-3-5×3^(3-0-1))/(1-3) = 21,所以協調器的第一個路由器是1,第二個就是22,換算成十六進位制就是0x0016。協調器的第1個終端地址 = 0x0000+21×3+1 = 64 = 0x0040、第2個就是0x0041。由此可見所有同一父親的終端裝置的短地址都是連續的。
不難看出一旦Lm、Cm、Rm這3個值確定了,整個網路裝置的地址也就確定下來。所以知道了某個裝置的短地址就可以計算出它的裝置型別和它的父裝置地址。
參考文獻:《ZIGBEE SPECIFICATION》370頁