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 恢复到出厂参数

节点有定义:

-DNV_RESTORE
-DNV_INIT

根据设计需要,节点有时需要复位到程序烧录后的首次状态,我是通过这一函数实现的:

zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);

但是,偶尔发现,执行以上函数后,仍然不能复位到原始状态,必须重新烧录一次程序才可以达到出厂状态,感觉NV中还有数据没被清除,请问还需要复位哪些参数?谢谢!

  • 请问您现在使用的是哪款芯片以及协议栈版本?
  • 2530/2531 zigbee 1.2.2a  还有NV中什么参数需要擦除呢?谢谢

  • 就是使用 zgWriteStartupOptions(ZG_STARTUP_SET, (ZCD_STARTOPT_DEFAULT_NETWORK_STATE | ZCD_STARTOPT_DEFAULT_CONFIG_STATE) ); 然後要做reset才能生效
  • 在调用zgWriteStartupOptions(ZG_STARTUP_SET, (ZCD_STARTOPT_DEFAULT_NETWORK_STATE | ZCD_STARTOPT_DEFAULT_CONFIG_STATE) );后,我也调用了SystemResetSoft();程序可以看到是重启了
  • zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemReset();

    就是使用上述的代码

    “执行以上函数后,仍然不能复位到原始状态” 有什么具体现象吗?

    您现在协调器的permit join是一直开着吗? 您试着disable permit join
  • 看到一个vv 2014年回复(e2echina.ti.com/.../67626),有必要吗?谢谢
    uint8 ZDOInitDevice( uint16 startDelay )
    {
    uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
    uint16 extendedDelay = 0;

    if ( devState == DEV_HOLD )
    {
    // Initialize the RAM items table, in case an NV item has been updated.
    zgInitItems( FALSE );
    }

    ZDConfig_InitDescriptors();
    //devtag.071807.todo - fix this temporary solution
    _NIB.CapabilityFlags = ZDO_Config_Node_Descriptor.CapabilityFlags;

    #if defined ( NV_RESTORE )
    // Hold down the SW_BYPASS_NV key (defined in OnBoard.h)
    // while booting to skip past NV Restore.
    if ( zdappHoldKeys == SW_BYPASS_NV ) 上电的时候如果某个按键处于按下并且Hold状态的话,会把NV数据全部擦除,重新启动。
    {
    zdappHoldKeys = 0; // Only once
    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
  • 調用
    zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemReset();
    後不需要再按任何按鍵了