【ZigBee 系列】| ZigBee 设备地址

一、ZigBee 设备地址有三种模式

第一种:64 位的IEEE地址(即 MAC 地址),也叫设备的扩展地址。MAC 地址全球唯一的地址,设备将在它的生命周期中一直拥有它。它通常由制造商或者被安装时设置。这些地址由 IEEE 来维护和分配。
第二种:16 位的网络地址,即短地址。16 位网络地址是当设备加入网络后分配的。它在网络中是唯一的,用来在网络中鉴别设备和发送数据。其中,协调器的网络地址为 0x0000。有几个特殊地址的定义。
0xFFFF -这个一个对全网络中设备进行广播的广播地址
0xFFFD -如果在命令中将目标地址设为这个地址的话那么只对打开了接收的设备进行广播
0xFFFC -广播到协调器和路由器
0xFFFE -如果目的地址为这个地址的话,那么应用层将不指定目标设备,而是通过协议栈读取绑定表来获得相应目标设备的短地址
此外的 0x0000 到 0xFFF8 都是有效的目的地址。每一个地址就只是了一个目标设备。

第三种:8 位的终端节点地址。每个 i 物理设备内部节点都含有 256 个可编址的逻辑终端。终端 0 就是 ZDO,终端 255 就是广播地址,241-254 为保留以后使用。

、ZigBee 地址分配方式

        ZigBee 有两种地址分配方式:分布式分配机制和随机分配机制。

随机分配机制:
随机分配机制是指当 NIB 的 nwkAddrAlloc 值为 0x02 时,地址随机选择。在这种情况下 nwkMaxRouter 就无意义了。随机地址分配应符合 NIST 测试中的描述 。当一个设备加入网络使用的是 Mac 地址,其父设备应选择一个尚未分配过的随机地址。一旦设备已分配一个地址,它没有理由放弃该地址,并应予以保留,除非它收到声明,其地址与另一个设备冲突。此外,设备可能自我指派随机地址,比如利用加入命令帧加入一个网络。

分布式分配机制:
我们知道,每个 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。



这个公式是来计算 A parent 这个父亲设备分配的第 个终端设备的地址 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 个值确定了,整个网络设备的地址也就确定下来。所以知道了某个设备的短地址就可以计算出它的设备类型和它的父设备地址。

三、相关函数

uint16 ZPS_u16AplZdoGetNwkAddr(void) 此函数用于获取本地节点的 16 位网络地址。
        uint64 ZPS_u64AplZdoGetIeeeAddr(void) 此函数获取本地节点的 64 位 IEEE(MAC)地址。

关于 ZigBee 更多的技术知识,欢迎关注“单片大师”账号,
也可以打开微信公众号,搜索并关注“单片大师”,即可了解更多技术资讯。


 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论