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.

【急救】协调器开启NV_INIT和NV_RESTORE,设备会重启。

1 问题:

协调器开启NV_INIT和NV_RESTORE,设备会重启。

2 配置:

协调器开启 NV_INIT和NV_RESTORE 。关闭自动组网(PermitJoiningRequest),协议栈:2.5.1

3 操作过程:

协调器上电,节点上电,然后按按键打开网络(PermitJoiningRequest),发现只能组网一个设备。仔细分析发现协调器重启。

4 问题分析:

设备重启(ResetReason()为2)原因是watchdog重启。于是单步调试发现每个子节点做组网的时候操作ZDApp_SaveNetworkStateEvt中的 NLME_UpdateNV( NWK_NV_NIB_ENABLE|NWK_NV_DEVICELIST_ENABLE|NWK_NV_BINDING_ENABLE|NWK_NV_ADDRMGR_ENABLE ); 的时候,watchdog会重启。

5做过以下实验:

1 关闭开门狗,做3的操作。组网正常,协调器没有重启。

2 打开看门狗,屏蔽NLME_UpdateNV(NWK_NV_NIB_ENABLE|NWK_NV_DEVICELIST_ENABLE|NWK_NV_BINDING_ENABLE|NWK_NV_ADDRMGR_ENABLE ); 。组网正常,协调器没有重启

6问题解决方案:

希望帮忙分析一下问题,解决这个问题。。。急急急。。。。。。

thanks

  • 应该是NLME_UpdateNV要做一些写flash的操作比较耗时,导致看门狗复位。

    1. 将看门狗时间设为最大

    2.在掉用NLME_UpdateNV之前喂下狗

  • 已经尝试过在 NLME_UpdateNV之前喂狗(WD_KICK();),看门狗的时间一直最大,但是问题依旧。所以才提出疑问,为什么会这样。。。flash耗时也不会这样。但是NV的功能我们又不能少,看门狗不能关,所以想知道还有什么会造成这样的问题

  • 1. 将看门狗时间设为最大

    2.在掉用NLME_UpdateNV之前喂下狗 这两个我都做过,问题依旧。

    今天仔细debug,发现修改了 NWK_MAX_DEVICE_LIST     40  导致问题出现,不知道这个为什么会有这个影响

  • 底层看不到。不过猜测应该是NLME_UpdateNV会保存关联表。你设置NWK_MAX_DEVICE_LIST 越大,你能关联的的节点数就越多

    从下面调用使用的参数,这个函数需要保存的数据还真不少。

    NLME_UpdateNV( NWK_NV_NIB_ENABLE |NWK_NV_DEVICELIST_ENABLE |NWK_NV_BINDING_ENABLE |NWK_NV_ADDRMGR_ENABLE );

    可建议的方法如下:

    1. 确定是用的最大的时间吗?最大时间是一秒。

    2. 改写成如下试试,分成一项项试试

    NLME_UpdateNV( NWK_NV_NIB_ENABLE);

    //喂狗

    NLME_UpdateNV( NWK_NV_DEVICELIST_ENABLE );

    //喂狗

    。。。。。


  • 这样的实验昨天也做过,但是问题依旧。想咨询一下:

    1  NLME_UpdateNV( NWK_NV_NIB_ENABLE |NWK_NV_DEVICELIST_ENABLE |NWK_NV_BINDING_ENABLE |NWK_NV_ADDRMGR_ENABLE ); 这里面存储网络,哪些是必备的?(我做过一些后两项没有update的操作,但是重启后组网信息丢失)

    2 修改NWK_MAX_DEVICE_LIST ,这个有什么限制?

    今天做了一个实验就是:

    条件:

    设置NWK_MAX_DEVICE_LIST 30;

    打开网络后,如果设备节点14个以内可以立马组网不会重启,如果超过14个,协调器就会重启。问题的root cause 还是没有找到,导致问题还是无法解决。

    谢谢一直以来的支持。