但是最严重的时候设备的flash都被改变了(比如ZCD_NV_STARTUP_OPTION),导致我就算重新上电,也无法恢复原有的网络,变成了重新加入网络。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
if ( events & ZDO_DEVICE_RESET )
{
#ifdef ZBA_FALLBACK_NWKKEY
if ( devState == DEV_END_DEVICE_UNAUTH )
{
ZDSecMgrFallbackNwkKey();
}
else
#endif
{
// Set the NV startup option to force a "new" join.
zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
// The device has been in the UNAUTH state, so reset
// Note: there will be no return from this call
SystemResetSoft();
}
继续追踪发现,设备运行到这里了。强制恢复成一个新设备了。
这是什么原因导致的呢?我是否可以把zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
继续追踪发现,
我断开路由器之后,设备显示恢复成孤儿设备,没有其他路由和协调器接收该孤儿设备,
然后设备会去寻找可加入的网络,如果找到可以加入的网络,设备会发送rejoin命令,
此时协调器只能加入6台终端设备,但是有8台设备搜索到可以加入网络,并且都发送了nwk rejoin request,
前6台设备都收到了nwk rejoin response,后2台设备因为AssociatedDevList已满,所以协调器发送了nwk leave
而终端设备收到leave命令后改写了ZCD_NV_STARTUP_OPTION,然后执行了复位。
所以之后设备就按一个新的设备去加入网络了。而不是恢复网络了。
不知道理解是否正确,这是分析包看到的结果。
暂时的改善方法是:
// Set the NV startup option to force a "new" join.
//zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE ); //屏蔽了这两句话
// The device has been in the UNAUTH state, so reset
// Note: there will be no return from this call
//SystemResetSoft(); //屏蔽了这两句话
暂时测试还没有问题。