微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 终端不能入网upate device remove device

终端不能入网upate device remove device

时间:10-02 整理:3721RD 点击:

终端用着用着就不掉线了,并且重置后也不能入网。

请问抓包这两条数据是怎么回事?什么情况导致这个发送的?怎么处理呢?

但测试加入别的协调器是正常的。

终端发出关联请求后如果有应答则父节点发送key,然后终端收到key后发送device announced 则入网成功

1186行1363行都有不能入网的抓包。

ZDApp_ProcessSecMsg函数中

ZDO_UPDATE_DEVICE_IND:

中ZDSecMgrDeviceJoin函数中只用当ZDSecMgrDeviceValidate返回失败,只有当ZDSecMgrPermitJoiningEnabled ==FALSE的时候才会更新失败。

但是搜索ZDSecMgrPermitJoiningEnabled 只有超时的时候才会FALSE,那么问题在那里呢?

那么当upate device的时候,什么情况下协调器会remove device呢?

ZDO_REMOVE_DEVICE_IND:

@VV 求助啊

应该是路由设备的permit join打开了,但是协调器的permit join没有打开或者已经timeout了。

你说的确实是一种可能性。但是前面有允许组网的广播60s,后面有停止入网的广播0.协调器不应该没有开启啊,或者开启失败了,超时的函数也没有看到,这2个原因在代码上都查不到啊。该怎么处理呢?

我调试了一下,发生这个问题的情况只有一个ZDSecMgrPermitJoiningEnabled=flase。协调器初始化为true。从来没有把ZDSecMgrPermitJoiningEnabled=flase的地方。

只有当入网时间结束会进入回调函数ZDSecMgrPermitJoiningTimeout中判断if ( ZDSecMgrPermitJoiningTimed == TRUE )。但实际上ZDSecMgrPermitJoiningTimed 和ZDSecMgrPermitJoiningEnabled两个标志位的修改只有在ZDSecMgrPermitJoining函数中根据入网时间duration修改的。但ZDSecMgrPermitJoining函数在协调器中是不会执行的,ZDSecMgrPermitJoining函数只有收到广播Management Permit Joining时候执行,正常只有路由节点执行这个过程。

但是协调器发出入网广播的时候,如果路由节点很多,有时候协调器会重复收到允许入网,则协调器会执行上述路由节点执行的

#if defined ( ZDO_MGMT_PERMIT_JOIN_RESPONSE ) && ( ZG_BUILD_RTR_TYPE )
{ Mgmt_Permit_Join_req, ZDO_ProcessMgmtPermitJoinReq },

中的ZDSecMgrPermitJoining函数对ZDSecMgrPermitJoiningEnabled,ZDSecMgrPermitJoiningTimed 两个标志修修改,当入网时间结束时候都修改成flase了。但协调器只有初始化时候才会把ZDSecMgrPermitJoiningEnabled=ture。

所以修改版本是,修改协调器发出入网广播的同时把ZDSecMgrPermitJoiningEnabled=ture。

不知道上面分析的是否正确

#define ZDO_ProcessMgmtPermitJoinTimeout NLME_PermitJoiningTimeout

能不能是你退网时,没有清空nv?

你解决了吗?我也遇到这种情况

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top