微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 移植到zigbee home 1.2.2 协议栈碰到的问题

移植到zigbee home 1.2.2 协议栈碰到的问题

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

我有一些智能家居很成熟的产品(市场上运行稳定) ,这些产品原来运行在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

zigbee home 1.2.2 还有个漏洞是 enddevice 的rejoin  在关闭加密的情况下

 存在概率  很难入网

NV_RESTORE
NV_INIT
SECURE=0
xTC_LINKKEY_JOIN

NUM_DISC_ATTEMPTS=0


RFD_RCVC_ALWAYS_ON=FALSE

xZCL_EZMODE

配置是这样的

有这么多问题啊,我只把znp从2.5.1a升级到1.2.2了,感觉不到有明显的改善,并且占用了更大的Memory,

内存不够 你可以这么做

INT_HEAP_LEN=2810  改这个  稍微改小一点点   100个B 就出来了 我试验了一下不影响使用

mark,关注这个问题。

你好,

这个问题主要是因为在Z-Stack Home 1.2.2里面fix了下面这个改动所引起的。

- [6079] Improved handling of the situation where the original parent of a
sleeping End-Device misses the Device Announcement when the child changes
its parent. This provides faster recovery than waiting for Child Aging.

TI 刚刚发布了Z-Stack Home 1.2.2a版本,建议使用最新的版本就可以了,谢谢!

好  不过现在ti的东西要难下载  ,要什么审核 还要等几天    ,能否发个到百度网盘,谢谢   @VV

还有就是rejoin 加网困难 这个解决了没   新父节点 发了很多次 rejoin response 给他的孩子

孩子存在概率就是不加入  (关闭所有加密选项SECURE=0   xTC_LINKKEY_JOIN)

Rejoin问题到没有发现过。

建议你在注册申请的时候,填写真实的公司信息,然后用公司邮箱,审批比较快的。

@VV

        Z-Stack Home 1.2.2a 也发现上面的情况。

        开了 Child Aging  使用 Date request  的模式。

        复现方法:

        一个协调器, 下面有两个路由设备, 另外路由设备下有 4个终端设备(休眠的)。

        间隔一段时间  ,将其中一个路由设备 断电, 使其终端设备 切换 路由设备 为父节点、

        反复操作一段时间后, 出现以下3个问题:

        1.   当两个路由设备都 上电的时候,  协调器发消息给 其中的一个终端设备, 消息经过路由1缓存起来,

              但是 此时终端设备 data request是发给路由2.

              于是导致了, 终端设备发消息给 协调器,协调器可以收到。  

              但是协调器发消息给终端设备, 发错父节点。终端设备获取不到消息。

        2.   协调器发消息给终端设备, 终端设备收得到,

              但 终端设备发消息经过路由设备 给协调器, 协调器MAC 回复ACK ,但应用层无法解析出来

        3.   经过一段时间切换后,  终端设备只能在 将路由设备 作为 父节点 切换。

              当两个路由设备 都断电时, 终端设备发出orphan notification 后 就一直入不了网(无法将 协调器作为 父节点 进行切换)

              期间 发出的beacon  request, 协调器也有 反馈beacon。

              但就是无法 入网。

谢谢!

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

网站地图

Top