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.
使用最新的CC2652R,配合Z-Stack plugin 2.0版本,遇到如下几个问题。附件有ubiqua 2.1抓包文件。
首先CC2652R硬件没有任何问题,进入休眠模式,整机功耗在1uA以内。
1、协议栈data request(poll rate)默认是1S一次,这样对于电池供电的end-device来说太费电了,因为平时也不需要给end-device发数据,所以也不用它请求data request,能否直接设置为0关闭data request?
我试了设置为0,的确不再发送data request了,但是end-device长时间休眠以后,再次外部按键唤醒时,也能发送scene recall,没生效,接着end-device立即就被router leave掉了,请问是什么原因?
后面就出现end-device一直在发送data request,此时end-device功能还都正常,也能发出scene recall,就是一直不停在发data request,不知是哪里问题?
2、还是end-device长时间休眠以后,再次唤醒时,会出现rejoin request的问题,导致第一次的外部按键不能起作用,原因是不是保存在相应router上的end-device age超时了,导致某些信息被清理掉了?请问如何避免,确保end-device长时间休眠以后,第一次外部按键唤醒,也能正常作用。
抓包附件:
network key:
01:02:03:08:09:32:78:86:01:02:03:08:09:32:78:86
TCLK:
5A:69:67:42:65:65:41:6C:6C:69:61:6E:63:65:30:3A
能否直接设置为0关闭data request?
可以直接设置为0关闭data request
接着end-device立即就被router leave掉了,请问是什么原因?
應該是child aging把end-device從router leave掉
一直不停在发data request,不知是哪里问题?
應該是z-Stack 內部rejoin polling rate或是response polling rate控制不當造成,建議你可以在rejoin成功後,重置polling rate成0
对的,我ubiqua2.1抓包,看到0x6749 end-device发出的data request 的Timestamp间隔,基本上就在0.5s之间,我看了一下代码,好像也就是rejoin的poll rate和这个比较接近
我之前都是拔掉end-device的电池,重新上电,这样就会rejoin,之后就不会再一直发data request了,好像应该就是软件的问题。
然后我又做了个实验,把一直发送data request的end-device的位置挪到了其他router周围,这两个router不在同一区域,信号不会叠加,这样我再按按键发送scene recall,然后就重新rejoin入网了,结果没拔掉电池重新上电,也不发送data request了,很是奇怪。
你把我这个补丁打上去看看,给我一个反馈:
在你的ZD_App.c中把下面程序改了:
if ( ( (ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE) == 0 ) || ( (ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE) && (zgChildAgingEnable == TRUE) ) ) { if(devStartMode == MODE_REJOIN) { NLME_SetPollRate( zgRejoinPollRate ); } else { NLME_SetPollRate( ZDApp_SavedPollRate ); }
替换为:
if ( ( (ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE) == 0 ) || ( (ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE) && (zgChildAgingEnable == TRUE) ) ) { NLME_SetPollRate( ZDApp_SavedPollRate ); }
Hello All,
Now I update fix this issue.
Issue description:
ZED will poll using REJOIN_POLL_RATE instead of POLL_RATE after being reset due to a parent leave request where the rejoin option was set.
Proposed fix:
In ZDApp_ProcessNetworkJoin of ZDApp.c, remove NLME_SetPollRate( zgRejoinPollRate ); from if (nwkStatus == ZSuccess) and place in the else statement instead. One must also set the zgRejoinPollRate when device state is DEV_END_DEVICE_UNAUTH
if ( ZG_SECURE_ENABLED && ( ZDApp_RestoreNwkKey( TRUE ) == false ) ) { if ( ZSTACK_END_DEVICE_BUILD ) { NLME_SetPollRate( zgRejoinPollRate ); } // wait for auth from trust center ZDApp_ChangeState( DEV_END_DEVICE_UNAUTH );