微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > end device的父亲 没有发出route reply

end device的父亲 没有发出route reply

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

小弟是开发智能家居的  由于是单火线设备 开关面板类型必须设置为 end device

以下是抓包数据

end device  地址BF6B  他的父节点是B5B1

协调器想发个数据个BF6B  发生了路由请求  但是B5B1 并没有回应路由请求  请问这个是为什么 这个偶有发生与zigbee规范上描述不一样

这个抓包数据中 B5B1 从来都不会 路由应答

因为网络中有大量的 终端节点设备  为了维护路由的稳定性 每个end device 每隔10s 调用一次 ZDApp_AnnounceNewAddress() 保证路由的稳定性

ti 大神救命啊 这个问题怎么解决

@Jie liao

你好,想了解你做ZigBee研发有多少时间了? 另外你用的ZIgBee协议栈是哪个版本的?

通过抓包数据有几个问题

1) 你在协议栈中对Coordinator和Router的Link Sttaus的周期是多少? Coordinator和Router的周期是否一样?

2) 定期发送Device Announce出来,对网络并没有什么好处的,收到device Announce以后,认为有新的设备入网,会邻居表清空,然后你的Router之间有没有正常的Link Status来维护邻居信息。

所以0xB5B1即便收到0x0000的Router Request也没法回复Router Reply。

建议,

1)把Link Status恢复正常

2) 把定期发送的Device Announce去掉。

另外建议可以看下ZigBee Specification中关于ZigBee协议的Spec。

vv 大神 你好 我开发zigbee有几年了  去掉定期发送Device Announce 确实 稳定性好多了,我这里Link Sttaus 没有改变 而是协调器上电的时候多发了一个 Link Sttaus 等一下我去掉他实验一下

主要开发方向智能家居 单火线系列产品

当初加入定期发送Device Announce 的目的是 为了解决  下面这个问题 

第一步:路由器A 有个孩子E 

第2步:A掉电了  E加入了B 并发了设备宣告 (A因为掉电了收不到)

第3步:A又突然上电了

第3步:当协调器想法数据给E ,先发路由请求      A与B 同时发出Router Reply

第4步:当协调器 想法数据给E (在个时候路由已经建立好)  协调器会发给A 而不是给B   ,数据在A上保留7s 然后丢弃 ,这样E 就收不到数据了 ,然后我就尝试着周期性发设备宣告 但是好像问题更加多了~~~

去掉周期性发设备宣告 有什么办法规避以上场景的发生

抓包数据如下:

协议栈版本  2.5.1.a  下面是两个路由器同时上报 Router Reply 导致  0x0000线发数据给6E7E, 先发数据给F28C , 而不是发给真正的父节点5775  ,因为这样 6E7E收不到数据

这种发生的概率非常 高且没有办法

麻烦把你的抓包文件用附件上传下,我可以打开解析着看,谢谢。

另外麻烦私信告诉我下你的公司,可以吗?

@jie liao,

你考虑的这个问题在实际应用中确实会发生,在Zigbee Alliance的最新Specification R21里面,已经讨论了这个问题,并且增加相关的功能。

TI的最新协议栈Z-Stack Home 1.2.2里面已经把这个功能加进去了,主要用到的方法是,

1) 如果Old Parent发数据给子设备,这个数据buffer在底层,如果长时间 没有收到data request,那么Old Parent会把该子设备从Associate List删除掉。

2)如果是其他设备发数据给该子设备,先发送到old parent上面,那么old parent会发出来network status command告诉源地址,这个子设备不存在了,这个路由链路是无法用了,所以让源节点把路由设备删除掉。

困扰好久的问题,终于有个合理的解释了;

当时遇到这问题时,将数据发送不经路由的方式给绕过了。

mark下

Hi VV:

是否方便提供下 下载Specification R21链接?

官网上只找到R20版本

@guozi,

由于R21版本还没有正式发布,目前也只是内部草稿版的。

等正式发布以后,便可在官网上找到了。

VV

如果是其他设备发数据给该子设备,先发送到old parent上面,那么old parent会发出来network status command告诉源地址,这个子设备不存在了,这个路由链路是无法用了,所以让源节点把路由设备删除掉。

VV你好,我现在也有这个问题, 我用的协议栈是1.2.2a,开启了MTO 你说的old parent会发出来network status command告诉源地址我小抓包的时候没看到 但是会在routeRequest的回复里看到过,让女孩子这个指令会带一个回复码,但是我怎么也找不到这个指令的相关调用 ,其实找不到也就算了,但是关键是现在我的协议栈不正常,end切换父节点了而且也发出宣告了但是 协调器仍然发给了原来的父节点 打印路由表 要么就是没这个设备的路由 要么就是路径是错的 ,搞的我很烦 而且有时候end的父节点发出了RouterReply但是协调器也不回应 有点像收不到的样子 能不能帮我看看啊

请问是不是开了concentrator_catch导致的呢,但是我用的是cc2538 按理说开启这个catch也没有问题啊 heap_size设置的6k ,再设大点编译就出错,

被这个End的问题快搞疯了 ,各种各样的问题 难道说协议栈对mto的支持本身就不完整,天然的BUG?

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

网站地图

Top