首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

zigbee终端节点问题!

zigbee终端节点问题!

应用环境:


协调者和路由器长期供电。


终端节点经外部条件触发供电,进行相关数据传输后断电。


存在问题:


当终端节点断电后,再上电。


Zigbee协议会这样处理:断电后,先前的NBI信息(网络地址,邻居表等)将会全部被清除;重新上电后,必须重新申请加入网络,协调者会重新分配一个网络地址。


有没有一种方法,让终端节点断电后,保持所有NBI信息;等下次上电上电恢复到之前状态?

freescle的东西是不错的,只是开发工具有点小贵
可以看这个文档Z-Stack Compile Flag Definitions_F8W-2004-0013_.pdf

加入NV_Restore编译字就可以了
其实,我觉得你可以不必要完全断电。你可以让中断节点处于休眠状态,RF处于Hibernate,MCU处于STOP2模式。这样可以使用外面的终端来唤醒,比如说按键。
这样终端节点的功耗是很低的。而且,醒来的时候不会重新找网络,里面的东西也不会丢掉。加上NV_Restore编译的话,断电后也可以保存在FLASH里面的。
jimmytan的方法好象更好,但是现在无法评估RF处于Hibernate,MCU处于STOP2模式的功耗到底有多大.可能要等做产品的时候实际实验.

根据seuafu2005的指点,我看了NV_Restore相关的程序:打开NV_Restore开关后,系统上电后会恢复各层的NBI.我找到了相关的定义:
OSAL_NV_EXTADDR OSAL_NV_BOOTCOUNTER
ZDO_NV_USERDESC ZDO_NV_NWKKEY
NWK_NV_NIB NWK_NV_DEVICE_LIST
APS_NV_BINDING_TABLE
我有几点疑问: 1.所有的NBI都会存储在NV中吗? 我只找到以上几个.其他的都在哪里定义?
2.这些定义对应的meomery地址? 在map文件中可以找到吗?
3.打开NV_Restore后,上电会恢复16位网络地址吗?还是会重新分配新的?
有没有办法固定网络地址
freescle的东西是不错的,只是开发工具有点小贵
1.不是很清楚保存了些什么,但是重要的内容都会保存
2。对应的地址有两个block, 0x1200-0x13ff和0x1400-0x15ff。因为要写必须擦除整块flash,所以两个block交替使用
3。16位的网络地址应该可以恢复使用,这个在Coordinator中间同样设置NV_RESTORE应该可以做到
具体的电流消耗,可以参考MC13192和GT60的数据手册。RF HIBERNATE : 3uA DOZE: 40uA
GT60 STOP2 大概 1uA.
1.若寻址模式设置为ieee寻址,是否意味着nwk_addr毫无意义,只是个id,可以不使用.
那么nwk_addr上电后丢失或重分配也没关系.因为ieee地址在NV中没改变.
2.终端向协调者申请加入网络,协调者会根据设定的分配地址算法产生nwk_addr,并返回给终端.协调者会保存这个nwk_addr吗?

jimmytan: 我觉得完全断电更好些,如果采取相关措施保证上电后相关信息能够恢复.

在电池供电系统中 zigbee只能用于间歇式或触发式,实时行要求低,单向通讯,或非实时双向通讯的环境.这是我的一点理解.
freescle的东西是不错的,只是开发工具有点小贵
1。同意你的说法,如果发送地址用64位的mac,那么16bit的网络地址也无所谓。但是网络地址可以帮助coord知道device挂在哪个router下面,如果网络大的话。
2。coord会保存这个地址,但是否断电后继续保存,就看用户的设置了,如果用NV_RESTORE,是都可以保存的

如果coord和router都设置NV_RESTORE保存相关信息,我试过了。这样的话,假设现在所有router都开着并已经加入了coord的网络,然后关掉coord,这时候任何一个router在复位后都无法重新加入到其他router的网络,因为他的NV中保存了coord的信息,他只加入coord的网络。
abc
这样当网络很大的时候,节点很多的时候。只要有一个router死机,话故障的话,直接关联在他下面的所有节点就都没法再加入网络了,岂不是损失一大片。但是如果不设置NV的话,虽然可以随时关联到不同的router,可短地址就会变化,可能会造成短地址重复,使得通信混乱。这样有什么两全气煤的方法吗?
abc
我不赞同你的理解。首先,如果router加入网络,它会根据路由算法来重新选择网络。不存在router死机的话,它下面的router无法加入网络。因为这是动态路由,它可以去找其他的router.还有就是,在同一个网络,短地址是不会重复的。你可以做一下试验。
我用的是Z-Stack协议栈,当在编译router的选项里加NV_RESTORE后,烧到板子上后,开机第一次关联到那个设备就保存下来了,如果被关联的设备关掉,重启router,他就关联不到其他设备上了。(我是看Led3没有亮得出的结论)。如果不加NV_RESTORE编译的话是可以关联到其他设备下面,但是假设他下面还有子节点,那么他的子节点的信息就都没了。
但是如果coord或router都不加NV_RESTORE编译的话,那么当coord重启后,原来关联在他下面的设备信息都丢失了,接下来再有新的设备加入coord,coord就会重新分配短地址,这样不是会和先前关联到coord的设备的短地址重复吗。(这个试验我也做过,结果是,coord发给一台设备,短地址相同的两台设备都会收到数据)
所以想找一个可以同时解决这两个问题的方法。
abc
能知道Z-Stack协议栈中采用了什么动态路由算法吗?
NV_RESTORE主要是用来存贮一些信息,以便在关机后重新关机,可以直接找到他关联的信息。不需要重新去扫描之类的。我觉得这个功能要根据你具体的情况来确定,要不要这个功能。我觉得,如果你要用这个功能的话,要求你的这个网络要比较的问题。然后你需要这个网络在开关机后,比较方便。在实际的应用中,不一定要用这个功能。
当后加入网络的route会保存前面设备的信息到路由表中,这样不是越是后加入网络的,保存的路由信息越全吗?有没有可以在所以设备加入网络后,刷新路由表的函数啊?好像找不到啊
abc
返回列表