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.

[参考译文] CC2652R7:Zed Unexpected Network Leave + NLME_RestoreFromNV() 返回 False

Guru**** 2860250 points

Other Parts Discussed in Thread: CC2652R7, Z-STACK, SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1636508/cc2652r7-zed-unexpected-network-leave-nlme_restorefromnv-returns-false

器件型号: CC2652R7
主题中讨论的其他器件: Z-STACKSYSCONFIG

您好:

 我正在处理一个电池供电的 Zigbee 终端设备 (ZED) 项目、需要帮助解决两个相关问题:    

 硬件/软件环境:
 -设备: CC2652R7(定制板)
 - Z-Stack 版本: 3.x (SDK 8.30)
 -配置: ZigBee 终端设备(休眠终端设备)

 ——
 问题 1:未解释的网络休假事件

 我们的电池供电终端设备偶尔会意外离开 Zigbee 网络(极少数情况下,现场设备中有~0.1%)。 由于这是间歇性的、很难在我们的实验室中重现问题、因此我还没有监听器日志或器件跟踪。 我确实有信息表明、旧版本的 SDK (6.20) 上也出现了此问题。

 问题:
 -什么是已知的机制,可以导致 ZED 离开网络而无需明确的应用程序请求?   
 -我应该看看:父母丢失超时,轮询率问题,安全故障,低电池行为,或其他什么?
 -我是否应该监控特定的 NV 项目或运行时标志,以检测为什么发生休假?

 ——
 问题 2:NLME_RestoreFromNV() 返回 False

 为了解决问题 1、我正在实施网络备份/恢复机制、将网络参数保存到单独的自定义 NVS 区域。 设备离开网络后、我要恢复参数并重新加入封闭网络(禁用允许加入)。

 当前实施的方案:
 1.成功加入后:
  -将 NIB 数据保存到自定义 NVS 区域
  -保存安全密钥  
 2.尝试引导/重新连接时:
  -从自定义 NVS 恢复 NIB 数据
  -从自定义 NVS 恢复安全密钥
  -调用 bdb_setNodeIsOnANetwork()-告诉 BDB 设备有网络参数、以便它可以尝试安全重新连接
  -清除启动选项以允许在下次启动时恢复网络状态
  -通过 osal_nv_write 写入 NIb
  -重新启动设备  

 问题:
 NLME_RestoreFromNV() 始终返回 false。 由于这是一个预编译的库函数、因此无法调试其失败的原因。

 问题:
 -什么情况会导致 NLME_RestoreFromNV () 返回 false ?
 -在调用此函数之前,是否必须设置特定的初始化序列或 NV 项?
 -我是否应该在休假事件后使用不同的 API 来恢复网络状态?
 -网络密钥是否需要与 NIB 结构分开处理?

 我尝试过的方法:
 -已验证的 NV 写入操作成功
 -已验证的 NIB 数据完整性,并在恢复前进行 CRC 检查
 -在初始化序列中的不同点调用恢复

 希望就这两个问题提供任何指导。 对于问题 1、即使是一般的调试策略也会有所帮助。 对于问题 2、了解恢复 API 要求将取消阻止我的原型。

 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rafal、

    这里有一些类似的 E2E 主题、但我认为它们与您的观察结果不同。

     CC2652R7:Zed 随机离开网络 
     CC2652P:为什么 ZC 自动向 ZED 发送休假请求?  

    问题 1:您对可能导致网络离开而不重新加入的机制有一定的把握。  您是否也将 SimpleLink F2 器件用于 ZC/ZR 父级器件?  如果此源代码不是来自 TI、那么在没有监听器日志的情况下确定导致离开的原因将变得更加困难。  您可以尝试通过关闭 ZED 几个小时来强制执行此问题、或者通过关闭 ZED 而关闭所有可用的网络父设备来强制执行此操作。  您还可以调试 ZED 代码、方法是根据问题 2 在对 NLME_LeaveREQ 和 bdb_setFN 的每次调用中放置断点、似乎正在执行恢复出厂设置。  您的 Zed 是否会在简单重置时按预期重新加入、以及随着时间的推移、它平均发送多少条消息?  无论设备处于活动状态多长时间、还是较旧的设备更容易发生现场故障、它们是否会发生故障?

    问题 2:由于  NLME_RestoreFromNV 返回 FALSE、我们有理由认为 ZED 正在启动恢复出厂设置。  这通常是通过 bdb_setFN API 来执行的。  这将擦除所有现有的 NV 闪存、并以新的网络状态配置 (ZD App_Restore NetworkState) 启动器件。  因此、 如果使用 Zigbee 应用程序 NV 存储器部分、那么存储 NVS 的想法会无效、该部分在恢复出厂设置时会被重置 (zgReadStartupOptions)。  ZED 应该完全能够在重置时恢复网络设置、例外情况是、它们已被指示开始进入新状态。  您可以将应用程序修改为不允许将 NV 存储器恢复出厂设置并强制重新连接、但如果父级发送了“不重新连接的离开“命令、则此操作可能会被父级拒绝。  您所描述的听起来有点像 Zigbee 克隆、您可以在本 应用手册中详细了解该内容。  如果您不希望自定义 NV 受 Z-Stack 状态机的影响、则需要向 SysConfig 中添加另一个 NV 部分、该部分由 NVS TI 驱动程序直接控制。  需要在命令链接器文件中考虑到这一点。

    此致、
    Ryan