1. 程式人生 > >zigbee中網路地址分配(Network address assignment)

zigbee中網路地址分配(Network address assignment)

ZigBee使用分散式定址方案來分配網路地址。這個方案保證在整個網路中所有分配的地址是唯一的。這一點是必須的,因為這樣才能保證一個特定的資料包能夠發給它指定的裝置,而不出現混亂。同時,這個定址演算法本身的分佈特性保證裝置只能與他的父輩裝置通訊來接受一個網路地址。不需要整個網路範圍內通訊的地址分配,這有助於網路的可測量性。

 在每個路由加入網路之前,定址方案需要知道和配置一些引數。這些引數是MAX_DEPTH,MAX_ROUTERS和MAX_CHILDREN。這些引數是棧配置的一部分,ZigBee2006協議棧已經規定了這些引數的值:MAX_DEPTH = 5,MAX_ROUTERS = 6和MAX_CHILDREN = 20。

 MAX_DEPTH決定了網路最大深度。協調器(Coordinator)位於深度0,它的兒子位於深度1,他兒子的兒子位於深度2,以此類推。MAX_DEPTH引數限制了網路在物理上的長度。

 MAX_CHILDREN決定了一個路由(Router)或者一個協調器節點可以處理的兒子節點的最大個數。

 MAX_ROUTER決定了一個路由(Router)或者一個協調器(Coordinator)節點可以處理的具有路由功能的兒子節點的最大個數。這個引數是MAX_CHILDREN的一個子集,終端節點使用(MAX_CHILDREN – MAX_ROUTER)剩下的地址空間。

 如果開發人員想改變這些值,則需要完成以下幾個步驟:

(重要)

 首先,你要保證這些引數新的賦值要合法。即整個地址空間不能超過216,這就限制了引數能夠設定最大值。可以使用projects\ZStack\tools資料夾下的CSkip.xls檔案來確認這些值是否合法。當在表格中輸入了這些資料後,如果你的資料不合法的話就會出現錯誤資訊。

  當選擇了合法的資料後,開發人員還要保證不再使用標準的棧配置,取而代之的是網路自定義棧配置(例如:在nwk_globals.h檔案中將STACK_PROFILE_ID改為NETWORK_SPECIFIC)。然後nwk_globals.h檔案中的MAX_DEPTH引數將被設定為合適的值。

  此外,還必須設定nwk_globals.c檔案中的Cskipchldrn陣列和CskipRtrs陣列。這些陣列的值由MAX_CHILDREN和MAX_ROUTER構成。