TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2652R(ZED)长时间丢失父节点后疑似‘睡死’问题

现象描述:

z-stack 3.0,ZigBee网络中分别有一ZED(CC2652R)一协调器ZC,ZED作为开关(samplesw),等其两者互相组网成功后人为断开ZC电源,ZED代码里有处理丢失父节点的流程,Zstackapi_bdbZedAttemptRecoverNwkReq(),若连续发送三次beacon(间隔一秒)无反应后就不再发送请求rejoin的beacon(原先例子的流程是会一直发,这里因为开关是用钮扣电池的,为了节能,就让其发送有限次),ZC断电一二十分钟后,再重新上电,触摸ZED开关,抓包工具没有任何beacon发送,重新弹出钮扣电池再看还是没有任何beacon发出,疑似ZED“睡死”。

注:ZED工程配置了RFD_RCVC_ALWAYS_ON为FALSE,NV_RESTORE;

请教问题:

上述现象中,ZED是真的进入“睡死”模式了吗,这里面的流程是什么,这其中有什么深层次的触发“睡眠”机制吗,怎样避免这种“睡死”呢(除了像原始例子代码那样一直发请求beacon或者RFD_RCVC_ALWAYS_ON = TRUE)?

注:更新了最新的SDK,情况还是一样,不知道是否与电源管理这块有关,还望TI工程师及专家们能够于百忙之中稍予解决,谢谢啦!

Mike&Hu:

补充:如果每间隔15秒发送rejoin beacon情况也是一样,而10秒到14秒间隔发送频率一二十分钟内则可以恢复正常。

YiKai Chen:

再重新上电,触摸ZED开关你有調用Zstackapi_bdbZedAttemptRecoverNwkReq嗎?

Mike&Hu:

回复 YiKai Chen:

调用了,在zclSampleSw_process_loop->appServiceTaskEvents & SAMPLEAPP_CAP_TOUCH_KEY_PRESS_VET事件调用接口里面调用了

if(bdbAttributes.bdbCommissioningMode & BDB_COMMISSIONING_MODE_PARENT_LOST) { /*parent lost*/ //attempt to rejoin again after a fixed delay Timer_setTimeout( EndDeviceRejoinClkHandle, SAMPLEAPP_END_DEVICE_REJOIN_DELAY ); //该定时器会间接调用Zstackapi_bdbZedAttemptRecoverNwkReq Timer_start(&EndDeviceRejoinClkStruct); return; }

YiKai Chen:

回复 Mike&Hu:

你調試你的程序看看触摸ZED开关時,你ZED有進入BDB_COMMISSIONING_MODE_PARENT_LOST這個case嗎?

Mike&Hu:

回复 YiKai Chen:

ZC断电时间长了之后(如一小时),触摸ZED开关LED不亮(case中添加了点亮LED的操作),这说明应该是没有进入,也就无法调用那个Zstackapi_bdbZedAttemptRecoverNwkReq接口来恢复网络了。所以当前的问题就是为什么parent lost时间长了会进入不了事件处理,是不是某种机制引起了深度睡眠?

Mike&Hu:

回复 YiKai Chen:

重新上电ZC,触摸开关,抓包工具上没有任何beacon发出,几分钟都没反应

YiKai Chen:

回复 Mike&Hu:

以zed_sw為例,照理來說zclSampleSw_ProcessCommissioningStatus的case BDB_COMMISSIONING_PARENT_LOST:會一直被觸發,你自己的例程有嘛?

Mike&Hu:

回复 YiKai Chen:

嗯,如果一切正常的话,case BDB_COMMISSIONING_PARENT_LOST会一直被触发,这case下面对应的操作是先连续发送(每个一秒)三次请求rejoin的beacon,触发调用Zstackapi_bdbZedAttemptRecoverNwkReq,
Timer_setTimeout( EndDeviceRejoinClkHandle, SAMPLEAPP_END_DEVICE_REJOIN_DELAY );
Timer_start(&EndDeviceRejoinClkStruct);
为了节能起见,超过三次之后就不调用Zstackapi_bdbZedAttemptRecoverNwkReq了,触摸开关对应的响应里面有调用Zstackapi_bdbZedAttemptRecoverNwkReq,之前的逻辑是进入这个case后会一直调用Zstackapi_bdbZedAttemptRecoverNwkReq,直到网络恢复成功,但是这样能耗较大,钮扣电池用不了多长时间。现在ZC断电时间久了,触摸ZED开关没反应,也就调用不了Zstackapi_bdbZedAttemptRecoverNwkReq了。

YiKai Chen:

回复 Mike&Hu:

那你應該先查為什麼触摸ZED开关没反应

Mike&Hu:

回复 YiKai Chen:

嗯,这个问题我也一直在排查,除了硬件上的因素外,Z-stack 3.0.1 对sw这块没有什么类似“深度睡眠”机制吗?如长时间不发送beacon + 长时间收不到回复这种条件下,ZigBee会进行什么样的后续动作呢?

赞(0)
未经允许不得转载:TI中文支持网 » CC2652R(ZED)长时间丢失父节点后疑似‘睡死’问题
分享到: 更多 (0)