一、ZigBee 有两种类型的地址: 一种是 64 位 IEEE 地址,即 MAC 地址, 另一种是 16 位的网络地址。
(1) 64 位的IEEE地址是一个全球唯一的地址,一经分配就将跟随设备一生。它通常由制造商或者被安装时设置。这些地址由 IEEE 组织来维护和分配。
问题:用Z-stack 协议栈编程,64位IEEE地址是否是芯片自带的,还是需要在编程时给予赋值?这点需要继续深入研究后找出答案
(2) 16 位网络地址是当设备加入网络后分配的, 它在网络中是唯一的,用来在网络中鉴别设备和发送数据。
二、网络地址的分配
(1) ZigBee使用分布式寻址方案来分配网络地址。 这个方案保证整个网络中所有分配出去的地址都是唯一的,同时,这个寻址算法本身的分布特性保证设备只能与它的父辈设备通讯来接收一个唯一的网络地址。
(2) 在每个路由加入之前,寻址方案需要知道和配置一些参数,这些参数是: MAX_DEPTH, MAX_ROUTERS, MAX_CHILDREN。 这些参数是协议栈的一部分,在ZigBee2006中MAX_DEPTH = 5,MAX_ROUTERS = 6, MAX_CHILDREN = 20。
(a) MAX_DEPTH 决定了网络的最大深度, 协调器位于深度0 , 其子设备位于深度1, 其子子设备位于深度2 ……
(b) MAX_CHILDREN 决定了一个路由或者一个协调器节点可以处理的子节点的最大个数
(c) MAX_ROUTERS 决定了一个路由或者协调器节点可以处理的具有路由功能的子节点的最大个数,这个参数是 MAX_CHILDREN 的一个子集。
(3) 如果开发时想改变这些值, 需完成以下几个步骤:
(a) 首先要保证这些参数的新植要合法,整个地址空间不能超过 2^16, 这就限制的参数能设置的最大值。可以使用 project\ZStack\tools文件夹下的CSkip.xls文件来确认这些值是否合法。当表格中设置的数据不合法时,就会出现错误提示。
(b) 其次,还要保证不再使用标准的栈配置, 取而代之的是使用网络自定义的栈配置(例如:在 nwk_globals.h中将STACK_PROFILE_ID改为 NETWORK_SPECIFIC),然后设置nwk_globals.h文件中的MAX_DEPTH参数为一个适当的值。
(c) 最后,还要设置 nwk_golbals.c文件中的Cskipchldrn数组和CskipRtrs数组,这些数组的值由MAX_ROUTERS, MAX_CHILDREN构成。