协议栈:3.0.2
芯片:2530
问题:早上好。我现在有一个EndDevice以及一个Coordinator,这两个设备都开启了NV_RESTORE,当我将EndDevice断电之后重连,发现被ZC踢出网络,在重上电之前这两个设备是能正常通讯的。求解,谢谢。抓包档附上2019年8月16日09_00_20_终端重连被踢出网络.rar
Alvin Chen:
请说明做了什么改动,以及断电时长。 是否用SDK里面的generic demo 测试。
user6069081:
回复 Alvin Chen:
你好,我的改动是GenericAPP的应用层,并没有涉及到网络的主动leave。
Alvin Chen:
回复 user6069081:
你这抓包文件看不出来什么,所以我让你SDK原始demo去对比一下做一下测试
user6069081:
回复 Alvin Chen:
改动这么大原始的demo还有参考价值吗
Alvin Chen:
回复 user6069081:
因为不知道客户具体做了什么改动,只能让客户自己去比对了
user6069081:
回复 Alvin Chen:
那请帮忙看看这个抓包档的第2976行以后是什么情况?协调器最后为什么没有响应终端的data request呢?而且终端为啥不发孤儿节点声明呢?请教,谢谢。2019年8月15日18_06_05_第2976行自动掉线.rar
Alvin Chen:
回复 user6069081:
你打点一下断电在下面看是否又进入到变为orphancase ZDO_STATE_CHANGE:zclGenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
user6069081:
回复 Alvin Chen:
你好,我的意图是当终端变为孤儿节点的时候让他重新加网,所以我在zclGenericApp_NwkState == DEV_NWK_ORPHAN里面让LED灯熄灭,从结果来看灯的确是熄灭了,可是抓包文件没有看到orphan 声明,终端也并没有rejoin网络,我是有开启NV_RESTORE的,代码如下,谢谢。
case ZDO_STATE_CHANGE:zclGenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status);// now on the networkif ( (zclGenericApp_NwkState == DEV_ROUTER)||(zclGenericApp_NwkState == DEV_END_DEVICE) ){osal_start_timerEx( zclGenericApp_TaskID, SEND_MESSAGE_EVT, 1000);osal_stop_timerEx( zclGenericApp_TaskID, JOIN_LED_BLINK_EVT );net_blink_flg = FALSE;}if(zclGenericApp_NwkState == DEV_NWK_ORPHAN){HAL_TURN_OFF_RED_LED2();HAL_TURN_OFF_BLUE_LED2();bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING );}break;
Alvin Chen:
回复 user6069081:
这部分你是可以不用做的,Stack已经做了orphan的扫描恢复网络的步骤。case BDB_COMMISSIONING_PARENT_LOST:if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_NETWORK_RESTORED){//We did recover from losing parent}else{//Parent not found, attempt to rejoin again after a fixed delayosal_start_timerEx(zclGenericApp_TaskID, GENERICAPP_END_DEVICE_REJOIN_EVT, GENERICAPP_END_DEVICE_REJOIN_DELAY);}break;
把下面的补丁打一下,你自己那个扫网可以去掉的,说起来比较奇怪你没有做BDB和ZDO层的改变吧。
processors.wiki.ti.com/…/Zigbee_Known_Issues_and_Proposed_Fixes
user6069081:
回复 Alvin Chen:
1.是的我没有改变BDB以及ZDO层,我奇怪的是为何我的终端没有像您贴出的代码这样做rejoin动作以及没有发orphan声明。我要如何实现终端rejoin呢?
2.你让我打的补丁是关于协调器leave我的终端的问题吗?可是我的终端设备也就两个,这似乎不存在网络缓冲区溢出的情况吧。