我有一些智能家居很成熟的产品(市场上运行稳定) ,这些产品原来运行在2.5.1.a 协议栈上
最近老板要求移植到 zigbee home 1.2.2上面
移植后发现一个严重问题 路由设备有概率会删除他的enddevice 导致低功耗设备通信失效 (方向: enddevice 发给0x0000 是没有问题的,但是0x0000下发给enddevice就会有问题)
但是某些时候enddevice 要求长时间双向通信 比如OTA升级的时候
具体现象
终端节点无法 收到广播 他的父亲节点不转发给他
跟踪路由设备的关联表 发现 这个东西会被删除
0x0000 不认为有数据要发给终端节点
删除后,关联表 全表中是短地址是ffff
Ti 只提供了一个函数删除AssocRemove()
搜索所有的调用点 断点都没有停下
void ZDO_ProcessDeviceAnnce( zdoIncomingMsg_t *inMsg )
void ZDO_ProcessParentAnnce( zdoIncomingMsg_t *inMsg )
void ZDO_ProcessParentAnnceRsp( zdoIncomingMsg_t *inMsg )
汇编级调试发现调用点在 下面这个函数里面
Nwk_data_cnf_processing()//这个函数ti文档 与google都搜索不到
他的触发条件是 enddevice 进行了设备宣告(比如enddevice 断网了进行了rejoin) 0x0013(设备宣告),他的父节点收到了,但是 不是每次宣告父亲都会调用Nwk_data_cnf_processing
只要不发过设备宣告 enddevice都是可以双向通信的(不睡眠的时候)
但是父节点并没有在函数 ZDO_ProcessDeviceAnnce 执行走走到清除 关联表
而是在ZDO_ProcessDeviceAnnce 执行前首先执行到了Nwk_data_cnf_processing
之后enddevice都不能通信了
查阅了一下zigbee 2.5.1.a 到home 1.2.2的升级note 发现最可能的就是加了 child aging机制 但是这个是默认不启动的 而且就算启动也是4h 不轮询了才删除
调试了一下child aging 确实没有启动
请问大家都怎么解决这个问题的
@vv



