微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > cc2530 ZStack广播问题

cc2530 ZStack广播问题

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

我在用zstack开发时碰到这样一个问题,想请教下这是什么原因?

测试环境::一个协调器,一个路由器,一个终端设备,zstack版本是ZStack-CC2530-2.5.1a。

组网的方式是:协调器下挂路由器,路由器下挂终端设备,测试每个设备的广播消息是否发送到其他两个设备。

测试发现协调器和路由器发广播消息终端设备都收不到广播消息,但是终端设备发广播消息路由器和协调器都能收到。如果改下组网方式,把路由器和终端设备都挂在协调器下,测试每个设备发广播消息另外两个设备都能收到广播消息。

请问这是为什么呢?

广播消息发送的代码如下:

    afAddrType_t dstAddr;
    char msgData[16];

    dstAddr.addr.shortAddr = 0xffff;
    dstAddr.addrMode = (afAddrMode_t)AddrBroadcast;
    dstAddr.endPoint = DEVICE_ENDPOINT;
    
    AF_DataRequest(&dstAddr, &CModule_epDesc,
        CMODULE_CLUSTERID,
        (byte)osal_strlen(msgData) + 1,
        (byte *)&msgData,
        &CModule_TransID,
        AF_DISCV_ROUTE, AF_DEFAULT_RADIUS);

你在终端设备的POLL_RATE设置了多少?

有抓包的数据吗?

W好,很高兴看到您的回复。

我的POLL_RATE设置如下。后来我把-DRFD_RCVC_ALWAYS_ON设置为TRUE,把-DRFD_RCVC_ALWAYS_ON设置为TRUE之后没有加POWER_SAVING NWK_AUTO_POLL这两个宏定义。终端设备可以收到广播消息,但是很奇怪的是协调器发一次广播消息,终端设备会收到两次或者三次相同的广播消息。请问是不是哪里设置的有问题呢?

还想请教下用sniffer packet抓包的时候cc2530 flash的程序被仿真器下载的抓包程序覆盖了,这样其他设备还能通过网络地址发数据到抓包设备吗?

/* The number of milliseconds to wait between data request polls to the coordinator. */
-DPOLL_RATE=1000

/* This is used after receiving a data indication to poll immediately
 * for queued messages...in milliseconds.
 */
-DQUEUED_POLL_RATE=100

/* This is used after receiving a data confirmation to poll immediately
 * for response messages...in milliseconds
 */
-DRESPONSE_POLL_RATE=100

/* This is used as an alternate response poll rate only for rejoin request.
 * This rate is determined by the response time of the parent that the device
 * is trying to join.
 */
-DREJOIN_POLL_RATE=440

因为当路由器收到广播数据以后,也会转发,所以在终端设备上,你会看到收到2条广播数据!

W,非常感谢您的回复,还有一个现象想麻烦您帮我确认下是否正常?

网路中有一个协调器,一个路由器挂在协调器下,一个终端设备也是挂在协调器下。

先通过协调器发送广播消息,内容为123456,我通过串口打印的数据如下,终端设备收到了两条相同的从协调器发来的广播消息,但是从rssi值可以看出-25dbm是协调器的,-61dbm是路由器转发的,因为我是把协调器和终端设备放在一起的,路由器隔的比较远。这和您说的路由器会转发一致。

bcast by:0000  data:123456  rssi: -25dbm
bcast by:0000  data:123456  rssi: -61dbm

再用路由器发送广播消息,内容为AAAAA,终端设备也收到了两条相同的从路由器发来的广播消息,如下所示,这也和您说的一致。

bcast by:9471  data:AAAAA  rssi: -63dbm
bcast by:9471  data:AAAAA  rssi: -23dbm

现在我把路由器断电,再从协调器发广播消息123456,终端设备收到了3条一样的广播消息,如下所示,这是为什么呢?是不是有问题呢?

bcast by:0000  data:123456  rssi: -23dbm
bcast by:0000  data:123456  rssi: -23dbm
bcast by:0000  data:123456  rssi: -24dbm

另外一个问题,如果我从终端设备发广播消息BBBBBB,协调器和路由器都只会收到一次广播消息,为什么终端设备发的广播路由器不会再转发给协调器呢?

bcast by:C45C  data:BBBBBB  rssi: -23dbm

你把具体的抓包数据发下来可以吗?

最后一种情况,终端设备自己没有发送广播数据的能力,所以当终端设备需要发广播数据的时候,先把数据发给父设备,然后父设备在广播,所以协调器和路由各收到一条!

W您好,

我用packet sniffer抓包看了广播数据,附件是抓包保存文件。我看了应该是重复收到了广播消息。第一次收到了两次广播数据,按您的分析是路由器广播了一次,所以是两次。第二次收到3次相同数据时我已经把路由器关闭了。麻烦您帮忙确认下问题,谢谢。

我用packet sniffer的时候有两个疑惑:

1、我用的电脑的系统是win7,安装packet sniffer之后开始抓包,发现抓不到任何数据包。后来换到同事的xp系统上,测试能正常抓包。我是在ti官网上下载的packet sniffer安装包。版本是Setup_SmartRF_Packet_Sniffer_2.18.1,不知道你们碰到这种问题?

2、抓包的时候连接debugger之后会下载程序到cc2530,我之前的程序应该是被擦除了。那这样抓包除了抓广播数据包,单播的数据能抓到吗?此时抓包的设备在网络中的网络地址在哪里可以看到?

你好,

当把路由器关闭以后,协调器广播出来的数据包是同一个数据包,你可以看到抓包文件里面Broadcast seq.num=0xFD, 三条广播数据的这个值都是一样的。

在协议栈里面如果广播数据的广播半径不等于1,也就是说其他设备收到以后必定会转发的,那么在协议栈里面有一个zgBcastDeliveryTime,当一个设备发送出去广播数据以后,在这个时间内应该会收到其他设备转播过来的这条广播数据,如果这个时间timeout以后还没有其他设备转播数据,此时认为这条广播数据没有发送成功,需要重新发送 zgMaxBcastRetires,这个值就是重新发送的次数,协议栈里面默认值是2,uint8 zgMaxBcastRetires   = MAX_BCAST_RETRIES;

所以你会看到发了三条广播数据。

1, 应该没这个问题,我在用的也是win7的,相关的配置,驱动都对的吧

2,广播和单播都是在软件上做的配置,硬件只要符合同样的调制解调的,在对应的频率下都会收进来的!

明白了,非常感谢您的帮助。

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

网站地图

Top