微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 关于Zigbee协调发送消息重发的问题

关于Zigbee协调发送消息重发的问题

时间:10-02 整理:3721RD 点击:
情况一:
对于Zigbee无线通信进行抓包,发现协调器发送数据给终端都会出现一个问题:
1.终端在协调器发送包100ms后发一个CMD为Date request的包给协调器;
2.协调器收到这个CMD为Date request的包后重新发送最开始想发送给终端的数据包;
3.然后终端才能接受到这个数据包。

情况二:
然后在协调器没有给终端发消息的时间段里,终端总不停的以100ms的间隔给协调器发送CMD为Date request的包。

思考和疑问:
1.通过在TI的论坛看到TI员工回答的一段话:“ 在最新版本的协议栈里面,针对End device有Child Aging这个功能,就是通过enddevice发送Data request来实现的,但是并没有什么关于心跳之类的参数,只是利用这个data request来记录这个节点在发送消息出来。你们也可以自己在应用层做关于心跳之类的功能。”
问题一:这个包仅仅是一个心跳的包,还是终端循环的休眠唤醒后向协调器发送包?

问题二:能否通过修改让每次协调器发包,终端立马接受到数据包,而不再是过100ms发一个要求协调器重发数据包的数据包。情况一数据包


情况二数据包

关于第一个问题:终端节点属于低功耗设备,在休眠期间,设备的接收无线数据功能是关掉的。
Data request 的目的是终端节点向其父节点查询,是否有给自己的数据包。如果有,父节点收到这个数据包后,就会发送给它,同时,他的父节点还可以根据这个数据判断,子节点是否还活着。

第二个问题:如果你想发送数据包,另一个设备立马收到,最好直接使用路由节点。

问题一:f8wConfig.cfg文件中-DPOLL_RATE=1000 设置的就是1s钟终端向父节点轮询有没有自己的数据信息。如果终端开启了睡眠模式,也就是终端休眠后,每1s钟自动唤醒,发送data request向父节点轮询信息。
问题二:之所以设置终端定时轮询父节点查看是否有自己的信息,是因为协调器或路由器(作为父节点)接收到子节点(终端)的信息后,不知道终端当前是醒着的状态还是睡眠状态(睡眠状态时终端接收不到信息),所以把终端的信息保存下来,等待终端醒来后发送data request 轮询信息时,再把对应短地址(网络地址)的信息发给该终端。所以,如果你的终端开启睡眠模式,且协调器有下行信息发送,是不能避开该机制的。如果非要实现协调器发包,终端立马接受到数据包,可以把终端设置成路由节点,不睡眠而一直处于醒着状态,这时相当于POLL_RATE设置为0(路由节点本身不使用轮询,POLL_RATE只对终端有效),这样就不会发送data request请求信息了。如果无下行数据,你可以设置POLL_RATE=0,取消data request。

不会,坐等高手。

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

网站地图

Top