ZigBee網(wǎng)絡(luò)地址的分配
一、ZigBee 有兩種類型的地址:一種是 64 位 IEEE 地址,即 MAC 地址, 另一種是 16 位的網(wǎng)絡(luò)地址。
?。?) 64 位的IEEE地址是一個全球唯一的地址,一經(jīng)分配就將跟隨設(shè)備一生。它通常由制造商或者被安裝時設(shè)置。這些地址由 IEEE 組織來維護和分配。
問題:用Z-stack 協(xié)議棧編程,64位IEEE地址是否是芯片自帶的,還是需要在編程時給予賦值?這點需要繼續(xù)深入研究后找出答案
?。?) 16 位網(wǎng)絡(luò)地址是當設(shè)備加入網(wǎng)絡(luò)后分配的, 它在網(wǎng)絡(luò)中是唯一的,用來在網(wǎng)絡(luò)中鑒別設(shè)備和發(fā)送數(shù)據(jù)。
二、網(wǎng)絡(luò)地址的分配
(1) ZigBee使用分布式尋址方案來分配網(wǎng)絡(luò)地址。 這個方案保證整個網(wǎng)絡(luò)中所有分配出去的地址都是唯一的,同時,這個尋址算法本身的分布特性保證設(shè)備只能與它的父輩設(shè)備通訊來接收一個唯一的網(wǎng)絡(luò)地址。
?。?) 在每個路由加入之前,尋址方案需要知道和配置一些參數(shù),這些參數(shù)是: MAX_DEPTH, MAX_ROUTERS, MAX_CHILDREN。 這些參數(shù)是協(xié)議棧的一部分,在ZigBee2006中MAX_DEPTH = 5,MAX_ROUTERS = 6, MAX_CHILDREN = 20。
?。╝) MAX_DEPTH 決定了網(wǎng)絡(luò)的最大深度, 協(xié)調(diào)器位于深度0 , 其子設(shè)備位于深度1, 其子子設(shè)備位于深度2 ……
?。╞) MAX_CHILDREN 決定了一個路由或者一個協(xié)調(diào)器節(jié)點可以處理的子節(jié)點的最大個數(shù)
?。╟) MAX_ROUTERS 決定了一個路由或者協(xié)調(diào)器節(jié)點可以處理的具有路由功能的子節(jié)點的最大個數(shù),這個參數(shù)是 MAX_CHILDREN 的一個子集。
?。?) 如果開發(fā)時想改變這些值, 需完成以下幾個步驟:
?。╝) 首先要保證這些參數(shù)的新植要合法,整個地址空間不能超過 2^16, 這就限制的參數(shù)能設(shè)置的最大值。可以使用 projectStack ools文件夾下的CSkip.xls文件來確認這些值是否合法。當表格中設(shè)置的數(shù)據(jù)不合法時,就會出現(xiàn)錯誤提示。
?。╞) 其次,還要保證不再使用標準的棧配置, 取而代之的是使用網(wǎng)絡(luò)自定義的棧配置(例如:在 nwk_globals.h中將STACK_PROFILE_ID改為 NETWORK_SPECIFIC),然后設(shè)置nwk_globals.h文件中的MAX_DEPTH參數(shù)為一個適當?shù)闹怠?/p>
?。╟) 最后,還要設(shè)置 nwk_golbals.c文件中的Cskipchldrn數(shù)組和CskipRtrs數(shù)組,這些數(shù)組的值由MAX_ROUTERS, MAX_CHILDREN構(gòu)成。