协调器开启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 还是没有找到,导致问题还是无法解决。
谢谢一直以来的支持。