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.

zigbee设备升级后如何让设备还在原网络中

ZStack版本是HA1.2.1 , 编译了NV_INIT 和 NV_RESTORE 。遇到了一个问题: 当通过OTA对网络设备进行固件更新后,设备会以重新入网的形式加入到网络中,这样还可以接收,但是对协调器升级固件后就不再加入原网络中了,而是自己重新建立网络,,,请问大神,如何可以让设备(协调器 和 其他网络节点) OTA升级固件后还在原来网络中?

我的想法是升级过程中不擦除 NV 所在的那几个 page,理论上这样是可以的,但是不知道有没有什么问题呢?

谢谢指导。

  • 第一确保NV的内容不要被擦除,然后复位前需要把相关的start option清楚掉

    zgWriteStartupOptions( ZG_STARTUP_CLEAR, ZCD_STARTOPT_DEFAULT_CONFIG_STATE | ZCD_STARTOPT_DEFAULT_NETWORK_STATE );

    另外你也可以调试下,有没有从NV里面回复,主要看

    uint8 ZDOInitDevice( uint16 startDelay )函数中,

    #if defined ( NV_RESTORE )
    // Get Keypad directly to see if a reset nv is needed.
    // Hold down the SW_BYPASS_NV key (defined in OnBoard.h)
    // while booting to skip past NV Restore.
    if ( HalKeyRead() == SW_BYPASS_NV )
    networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
    else
    {
    // Determine if NV should be restored
    networkStateNV = ZDApp_ReadNetworkRestoreState();
    }

    if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE )
    {
    networkStateNV = ZDApp_RestoreNetworkState();
    }
    else
    {
    // Wipe out the network state in NV
    NLME_InitNV();
    NLME_SetDefaultNV();
    // clear NWK key values
    ZDSecMgrClearNVKeyValues();
    }
    #endif