微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 请教:CC2530-2.5.1a协调器发出广播信号,如何确认所有终端都接收到信号?

请教:CC2530-2.5.1a协调器发出广播信号,如何确认所有终端都接收到信号?

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

目前协调器要广播给终端修改panid,然后协调器自己重启,目前已经得到的结论:终端设备越多,广播所需时间也就越多,具体是怎么一个线性关系还没有研究。。

所以现在准备通过确认所有终端都收到广播信息后协调器才重启。

请教大神有没有好的方法?(协议栈里面有啥可以用的吗?)

先谢谢了! 

目前实现的方案,由于终端改完panid重启后,无法与未重启的协调器通讯,所以协调器加判断一分钟没有收到任何数据后重启。

建议节点在收到PANID修改的数据以后,通过应用层数据告知协调器。

如果协调器没有收到没几个设备的回复,也可以单独控制,不需要再广播控制。

感谢VV的建议!
       我新人尝试着用协调器对终端进行单播代码如下:

if(events & SmartPv_Send_EVT)
{
Y++;
if( device_info[Y].device_add )
{
afAddrType_t my_DstAddr;
my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
my_DstAddr.addr.shortAddr = device_info[Y].device_add;//存短地址的表
my_DstAddr.endPoint = SmartPvApp_ENDPOINT;             //#define SmartPvApp_ENDPOINT           10
AF_DataRequest( &my_DstAddr, //控制广播单播组播
                                  &SmartPvApp_epDesc,//端口号
                                     SmartPvApp_CLUSTERID,                 //#define SmartPvApp_CLUSTERID          1
                                     6,//数据长度
                                    (byte *)&uartbuf,//发送的数据
                                    &SmartPvApp_TransID,//发送数据的次数
                                    AF_SKIP_ROUTING,
                                   AF_DEFAULT_RADIUS
                                    );
}
if(Y == (NWK_MAX_DEVICES-1))Y=0;
osal_start_timerEx(SmartPvApp_TaskID, SmartPv_Send_EVT, 500);

return (events ^ SmartPv_Send_EVT);
}

 在AF_DataRequest打了断点是可以进来的,短地址是对的,但是终端就是接收不到数据。

请教VV大神 指点一下协调器单播的上面哪些地方有问题? 

了解下终端设备接收数据的原理,如果终端设备不是rx always on的设备话,需要主动发送data request去向父设备拿数据的。

感谢@VV 解答 !
        抓包看终端是一直有 data request的。今天发现如果设备过多的话,太多的 data request把信道阻塞了,导致协调器发的数据终端接收不到。
查了一些资料后,让已经接收到协调器广播的终端 NLME_SetPollRate(65535);//DataRequest轮询时间增大,减少信道的压力,并且 现在协调器采取一边单播 一边多次广播,这种暴力的方式~
        目前测试了多次,26个终端 十几秒就能完成所有终端的panid配置。
        后续准备看CC2538一次配置200+个终端panid的效果如何。到时可能还需要VV大神的帮助啊! 

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

网站地图

Top