天天看点

ZigBee TI ZStack CC2530 4.5 设备地址01-Primary/Secondary IEEE Address

(配套源码、软件、开发板等资源,可移步博客同名QQ群:拿破仑ZigBee)

很多朋友可能至今也还不知道关于IEEE address,还有“Primary”、“Secondary”和“temporary”之分,本节就向大家介绍一下关于协议栈中的“IEEE address”是如何选择的。

每个ZigBee设备都需要有一个唯一的64位IEEE address。Z-Stack中用如下四个等级次序来决定当设备工作时使用的IEEE address:

步骤1、从NV存储区中读取;

步骤2、从Secondary IEEE address的位置寻找;

步骤3、从Primary IEEE address的位置寻找;

步骤4、使用随机数产生器创建temporary IEEE address。

一般情况下,当运行协议栈的设备启动时,它会从非易失性存储区(NV)中去读取IEEE address(在上一次设备运行时被存储下来)。NV存储区保留了包括IEEE address在内的很多参数,为设备重启时使用,尤其是当设备断电时。在三种可能的情况下,NV存储区中的IEEE address会被保存下来——最初按上述步骤2和3的等级次序,或是后期由外部来源传递过来(比如通过串口,来自电脑端运行如Z-Tool这样的程序)。

在设备重启的过程中,如果“从NV存储区读取”的操作不成功,Z-Stack首先会尝试在Secondary IEEE address的位置去寻找一个IEEE address(步骤2)。如果不成功,协议栈会尝试在Primary IEEE address的位置去寻找一个IEEE address(步骤3)。最终,如果这也不成功,协议栈会使用随机数字创建一个temporary IEEE address(步骤4)。如果步骤2或步骤3成功了,IEEE address均会被写入NV存储区,下一次设备重启时就可以从NV存储区读出IEEE address(步骤1)。在开发环境下(NV_RESTORE没有被使用),temporary IEEE address不会被写入NV存储区,所以每次设备重启后,都会有一个和以前不同的IEEE address。

Secondary IEEE address的地址在CC2530 FLASH的最后一页,距离最后存储地址偏移地址为0x0018。对于256KB FLASH的设备来说,IEEE address可以在0x3FFE8~0x3FFEF部分被找到。这个地址是供用户用来覆盖TI在出厂时就已经预编程的Primary IEEE address。和Z-Stack配套的设备编程工具可以用来在这个位置保存IEEE address。

在设备重启的过程中,如果在NV存储区或是Secondary IEEE address的位置都找不到IEEE address,Z-Stack会尝试去读取TI预编程的Primary IEEE address(位于设备“信息存储区”0x00C~0x013的位置)。在极少数的情况下,CC2530设备中没有这样一个预编程的Primary IEEE address,那么协议栈会使用系统的随机数字发生器生成一个以0xF8开头的64位temporary IEEE address。

Z-Stack允许通过标准的NV_Write应用接口函数来更新NV存储区中的IEEE address。这样也就允许开发者基于他们自己的考虑,使用Z-Tool或其他等效的机制来改变IEEE address。在生产环境下,还是建议不要使用这样的功能,因为一个已经部署了的ZigBee设备是不应该允许被修改它的IEEE address的。

参考文档:

1、Texas Instruments\ZStack-CC2530-2.5.1a\Documents 《Z-Stack User's Guide - CC2530DB.pdf》 7.2

(配套源码、软件、开发板等资源,可移步博客同名QQ群:拿破仑ZigBee)

继续阅读