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