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.

路由断电后重新上电,设备组不上网

各位大神,求助,急急急!
现在有20多个设备组网,1个协调器,2个路由器,剩下的都终端节点
设备组网成功后,我把路由关电,然后重新上电。
终端设备有时恢复网络失败,rejoin也偶尔失败(这个可能属于正常现象)
但是最严重的时候设备的flash都被改变了(比如ZCD_NV_STARTUP_OPTION),导致我就算重新上电,也无法恢复原有的网络,变成了重新加入网络。
  • 请问是否预编译了NV_RESTORE?

  • 所有设备都开启的NV_RESTORE,我今天继续运行发现,好像是设备被复位了,但是为什么会被复位呢(频繁插拔路由器)

  • 另外我定义了xWDT_IN_PM1,所以应该不是看门狗

  • 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 );

  • 继续追踪,发现设备给路由发送了很多的NWK REJOIN REQUEST,然后路由给设备发送了一个NWK LEAVE,设备收到NWK LEAVE之后,复位了设备。

    我在路由上开启了CHILD_AGING功能,这会导致路由发送NWK LEAVE命令吗?

  • 求解答,各位大神。

  • 继续追踪发现,

    我断开路由器之后,设备显示恢复成孤儿设备,没有其他路由和协调器接收该孤儿设备,

    然后设备会去寻找可加入的网络,如果找到可以加入的网络,设备会发送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();   //屏蔽了这两句话

    暂时测试还没有问题。