Zigbee ZSTACK IEEE 地址的始末 老达原创

倒戈人生   2015-9-25 15:30 楼主
在Zigbee网络中,每一个节点模块都有一个2个字节的网络短地址还有一个8个字节的IEEE物理地址,下面针对TI的结合ZSTACK和CC2530F256芯片来详细解读一下这个8个字节的地址,有称IEEE地址,又称MAC地址都是一回事指的就是这个东东。   IEEE地址:
TI在CC2530出厂的时候,在XDATA可以寻址的0x7800-0x8000存在2K信息页,这个是固化在芯片里的,是只读取,其中在0x780C开始的连续8个字节就是TI出厂为这颗芯片唯一指定的IEEE地址,注意这块信息页是只能读不能写的。
问题:CC2530芯片下载了ZSTACK协议栈程序后在通信的时候有时候空气中会携带IEEE地址,是这个地址吗?答案是,不一定。
    首先,芯片的flash在被擦掉后默认全部是0xFF,ZSTACK有些参数,比如PANID、网络钥匙等一些参数,这些参数需要保存,每一个参数如果要保存,都是以Item(条目)的形式保存在CC2530F256芯片一般121页-126页,每一个条目都有一个条目号类似ID,ZSTACK的一些参数信息会保存在这里,第一次下完程序的时候这6个页全部是0xFF,其中这个8字节的IEEE地址就是ZSTACK必须要存的一个条目参数,条目号是固定的为0x0001,下载了协议栈的代码在运行的时候,首先去121页到126页去查有没有0x0001这个条目,如果发现没有(因为都是0xFF),那么会拷贝上面提到的2K信息页的那个8字节IEEE,并以此来创建条目;如果拷贝成功,那么当然这个条目的IEEE和出厂的IEEE是同一个地址;还有一种情况就是拷贝失败,如果失败了,它会去127页的倒数24个字节开始的8个字节,如果这8个字节不全是0xFF,那么会以这8个字节来创建IEEE条目。
也许有人会问,如果拷贝的127页的这8个字节失败或者全为0xFF会怎么(完全有可能的,全为0xFF就有可能)?如果出现这种情况,那么程序中会按照一定的规则生成一个随机的(还是有点规律)的8字节,并以此来作为IEEE条目且条目号为0x0001创建起来。
Zigbee节点在组网的时候8字节的IEEE地址只认这个0x0001条目里的8字节,所以说节点的IEEE不一定是芯片的IEEE.
还有一个问题,有人会说,如果下一次在对这颗芯片下程序这块信息页会怎么样,IAR下载的时候默认不擦掉这6页的信息页(当然也可以选择擦除),如果擦掉了就和出厂一样,如果没有擦除那么程序在执行的时候又会去搜索0x0001这个条目,发现存在,那么他就不会去动它了,就是一直存在里面了。

这里实际上有4个IEEE地址:
  主IEEE地址或称基本IEEE地址:就是2K信息页中,芯片出厂的那个8字节MAC;
  节点在网络里的IEEE地址:就是在121页-126页中以条目号为0x0001创建的、网络中需要用的MAC;
  第二IEEE地址:就是在第127页倒数第24个字节开始的连续8个字节,这个称第二MAC;
  最后一中IEEE:就是随机生成的MAC;

回复评论 (3)

谢谢分享
淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目
点赞  2015-9-29 22:24
谢谢分享
点赞  2016-11-9 11:50
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复