怎样使设备重新搜索、加入网络?
cc2530设备开始时在网络中,通信正常。使用某种机制,设备得知自己所处的网络不存在了,此时怎样才能使设备重新搜索、并加入新的网络?
使能NV_RESTORE
使能 NV_RESTORE 后, cc2530设备就会自动重新搜索网络,还是要执行别的什么?
使能NV_RESTORE有一个问题,设备都加入协调器后,会把协调器的关联表填满,然后新的设备发入网请求都不可能加进来啦,如果不启用NV_RESTORE,碰到这种问题通过重启协调器还有用,启用了NV_RESTORE,就只能重刷程序啦?
可不可以不用复位cc2530,而只是使zigbee协议栈重新初始化、搜索网络,和上电时走的类似?我的cc2530 gpio 有作别的功能,不允许复位芯片。
我也碰到相同的问题,在不复位end device的情况下使用nv_restore并不能解决问题,当原来的pan消失后,一个有新的pan id的pan网络 建立后,这个end device并不会加入新的pan网络。搞不清楚为什么。
peter yin,
你在end device软件里设置,当ED感应到ZBC不在一会了,就让end device软重启,不就可以加入新的网络的么。。
软重启是怎么个启动法?这个我不知道,没有做过。麻烦你教我一下,谢谢。
通过加log,发现如果把zbc掉电后,zbe的scan模式为变为orphan模式一次,然后以后一直都是active mode,既然变为orphan模式,说明zbe已经知道zbc不在了。
如果这时候zbc再上电,它会创建一个pan网络(pan id和原来的不一样),这时候zbe也能收到zbc的beacon,但是看不到nwk的代码,不知道怎么处理的。反正从应用层上看zbe和zbc的通信就断了。
你没有加nv的时候,zbc是不能掉电的,zigbee是这样规定的。所以nv是我们常见的保护方式。 当你的父节点出现问题,他还是会去寻找新路径的
父节点出问题,它是会寻找新路径,可是从现象看,它只能加入到panid和原来一样的网络,如果新的网络panid和原来不一样,它加入不了啊,现在就是搞不清这一点。nwk也不开源,没法看代码。
从协议上看,即使原来的网络没有问题,如果有新的网络信号质量更好的话,它应该也有加入新的网络的能力啊。
看来确实是zstack的问题,经过几天的调试,发现zbe在发现失去与zbc的通信后,会把自己的状态置为rejoin状态,而这种状态下zbe只会加入原来panid的网络,如果置为join,就能加入新的panid的网络了。
实际环境,ZBC肯定是有掉电情况存在的,按您说,就是要启用NV,但是启用后,会引来新的问题,NV关联表有限,默认是20个子节点,一旦加满后,以后维护,更换设备就无法入网!
@Peter Yin
是的。这一块同底层的 nwk 无关,更多是 ZDO 即 Zigbee Device Object 层的操作。
整体和父节点失联后,重新入网的路径是 resume rejoin join。rejoin 阶段下,是会判断 superframe 里的 extended PAN ID 是否同之前网络的 extended PAN ID 一致。join 阶段下,则无此问题。
这篇博客里,提供了更加详细的解决方案:
http://www.cnblogs.com/jtuki/p/3762655.html
那个EndDevice编译了NV_RSTORE选项之后,如果出现了这个EndDevice的父节点丢失了,或者说这个EndDevice所处的PANid网络就不在了!EndDevice还会寻找新的PANid网络去加入吗?还是说就只能强制擦除NV中的网络信息,让该EndDevice以一个空白全新的状态再次从头入网来过呢?
为什么我的编译了NV_RESTORE的低功耗EndDevice可以加到别的网络里?概率是14个EndDevice运行20天,有三个跑到别的网络里了!