微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 睡眠设备接收广播包。

睡眠设备接收广播包。

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

协议栈:Z_stack 2.5.0    ZIGBEE pro

参数:终端 POLL_RATE=1000;协调器NWK_INDIRECT_MSG_TIMEOUT =14

测试实验1:在20个睡眠设备程序与1个协调器的网络中,协调器发送一个广播包,睡眠设备接收到广播包后作出回复。

测试结果:16个睡眠设备作出回复,并且它们在协调器AssociatedDevList的前16个位置中,后面的睡眠就无法接收到该广播包。

测试实验2:2个非睡眠设备先入网,然后20个睡眠设备再入网,协调器发送一个广播包,睡眠设备接收到广播包后作出回复。

测试结果:只有14个睡眠设备作出回复,并且它们在协调器AssociatedDevList的前16个位置中,后面的睡眠就无法接收到该广播包。

问题:为什么出现这问题?如何修改才能让所有AssociatedDevList表中的睡眠设备都能接收到广播包。

#define NWK_MAX_DATABUFS_TOTAL      12    // Total number of buffers这个值在你的程序里面设置为多少?

12个,但是这值,要是满的话,应该所有设备都收不到的。这个情况我抓包也看到过。

#define NWK_MAX_DATABUFS_TOTAL      24  效果和原来的一样

NWK_MAX_INDIRECT_MSG_MAX_PER 

在你的协议栈里面是多少,有修改过吗?

测试过7  和14  效果一样。

这个变量和之前那个不一样,是指给每个设备buffer了多少个数据

// Maximum msgs to hold per associated device.

#define NWK_INDIRECT_MSG_MAX_PER   3  

#define NWK_MAX_DATABUFS_TOTAL      12 

#define NWK_INDIRECT_MSG_MAX_ALL \
(NWK_MAX_DATABUFS_TOTAL - NWK_INDIRECT_MSG_MAX_PER)

我把BUFF改大了,还是一样的效果。

期待更进一步的帮助。

YINGQI li 您好:

请问这个问题您最后是如何解决的?我现在遇到了相同的问题,只有处在关联表前面16个位置的RFD才能收到广播,期待您的回复!

VV:

请问这个帖子怎么破? 我现在测试结果和楼主描述一致,只有处在关联表前面16个位置的RFD可以收到广播,跟入网时间没什么关系。即便是后来才入网的RFD,如果处在了关联表前面16个位置,就可以收到广播,否则收不到。跟网络层的buffer数量应该是没什么关系! 怎么破,期望得到支持,谢谢!

@li guo2 

你用的协议栈版本是哪个?

先上mesh1.0 ,后来换了Home1.2.2 ,都是这样的!

我猜想是网络层在给关联表中的节点发indirect广播时,用了一个0xFFFF来标记节点是否已经发送,当关联表中的index超过15时,程序返回的结果都是已经发送,于是只会给RFD发送一个空帧,通过抓包会看到没有payload的mac空帧。

如果我的猜想是正确的,那么在lib中把这个0xFFFF改成0xFFFFFFFF就可以把支持广播接收的RFD提升到32个,可惜我们得不到源码!

既然可以单播,那问题肯定不会在mac层;

基于以上猜测,现准备进一步验证之后抽空在zmac层对数据进行拦截,然后对nwk层的广播行为进行重定义;

在新的core出来之前只能这样应对了,对RFD进行单播的效率实在太低!

不知道在思路上是否有问题,或者VV您这里有更好的建议? O(∩_∩)O~

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

网站地图

Top