This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

NWK_AUTO_POLL终端设备收不到数据问题(非常着急啊)

Other Parts Discussed in Thread: CC2530, CC2531, CC2591

我在使用NWK_AUTO_POLL编译选项时碰到个问题,想请教下谁知道这是什么原因呢?谢谢

我在编译选项里面增加了NWK_AUTO_POLL,f8wConfg.cfg里面与NWK_AUTO_POLL相关的宏定义如下,用这样的配置编译出来的程序终端设备收不到协调器发送的广播消息,但是终端设备可以发送广播消息给协调器。我的网络中就一个协调器和一个终端设备。

-DRFD_RCVC_ALWAYS_ON=FALSE

/* 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

  • 你是一个协调器和一个end device做的实验对吧?

    重新下载下一站一个协议栈并安装,不修改任何东西,让协调器周期性广播数据,看终端设备是否有收到。

  • VV您好,

    我现在用的ZStack版本是ZStack-CC2530-2.5.1a,你是让我重新下载一个ZStack-CC2530-2.5.1a版本安装,还是下载最新的ZStack版本呢?我看了官网上最新的协议栈有Z-STACK-HOME:,Z-STACK-LIGHTINGZ-STACK-ENERGY三个版本,我们是要做通用的设备,这三个版本似乎是针对了不同的profile使用的。而且从这三个协议栈的描述上看三个协议栈支持的芯片也有差别,我现在用的芯片是cc2530,cc2531还有功放cc2591。

    麻烦您帮忙看下我该使用哪个版本的最合适呢?谢谢。

  • 下载2.5.1a就可以了, 你再测试下,如果还有问题的话,把你对协议栈的配置告诉我,我可以做测试。

  • VV您好,

    官网上的2.5.1a下载链接已经无法下载了,入下面的截图所示。

    我把之前的协议栈卸载了,重新安装了一遍之前下载的ZStack-CC2530-2.5.1a.exe,这个安装文件的大小如下图所示,测试发现还是有这样的问题。

    我对协议栈的配置如下:

    1、编译选项设置
    NWK_AUTO_POLL
    HOLD_AUTO_START
    SOFT_START
    NV_RESTORE
    NV_INIT
    BUILD_ALL_DEVICES
    ZTOOL_P1
    MT_TASK
    MT_ZDO_FUNC
    MT_ZDO_MGMT
    LCD_SUPPORTED=DEBUG

    2、f8wConfig.cfg文件都是默认值,没有修改;

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

        afAddrType_t dstAddr;

        dstAddr.addr.shortAddr = 0xffff;
        dstAddr.addrMode = (afAddrMode_t)AddrBroadcast;
        dstAddr.endPoint = CMODULE_ENDPOINT;
        
        AF_DataRequest(&dstAddr, &epDesc,
            BCAST_CLUSTERID,
            mallocLen,
            pMsgData,
            &TransID,
            AF_DISCV_ROUTE, AF_DEFAULT_RADIUS);

    麻烦您帮忙看下是不是哪里配置的问题?谢谢

  • 协议栈不用协议栈,直接安装的文件名不一样就可以了。

    你的dst的endpoint 是不是你的节点的endpoint呢?

  • 您好,

    我设置的endpoint是终端设备的endpoint,我把协调器和终端设备的endpoint都定为端口10,广播消息的cluster id都设置为0x2000,这个应该没有问题吧?

    我把f8wConfig.cfg里面的-DRFD_RCVC_ALWAYS_ON改为TRUE,终端设备就能收到协调器发送的广播消息了。这是想用NWK_AUTO_POLL这个功能就不行了。

    您看我前面贴出来的编译选项是否有问题呢?

  • 当使用NWK_AUTO_POLL以后,把DRFD_RCVC_ALWAYS_ON改为False

    然后POLL_RATE=1000

    节点是否每隔1s钟在发,data request,

    你用抓包看下!

  • VV您好,

    我按照您说的方法把-DRFD_RCVC_ALWAYS_ON=FALSE,-DPOLL_RATE=1000,加入NWK_AUTO_POLL,用packet sniffer抓下来的数据包如附件poll.psd所示。看样子节点没有1s发送data request。抓包数据的整个过程如下:

    1、打开packet sniff开始抓包;

    2、打开协调器;

    3、打开终端设备;

    4、通过协调器广播发送了“123”字符数据,发送了三次,终端设备没有收到这三次广播消息;

    5、通过终端设备广播发送“321”字符数据,发送了两次,协调器收到了这两次广播消息。

    麻烦您帮忙看下是不是终端设备没有发送data request呢?谢谢

    poll.psd
  • 你好,

    你是2.5.1a的协议栈,有做过什么改动吗?

    能否用SmartRF Flash Programer把芯片的Flash擦除下,然后重新烧写程序,把节点的入网过程也用抓下包!

  • VV您好,

    我用的是2.5.1.a这个版本的协议栈,我没有改动协议栈。

    按照你说的我把flash擦除了重新烧写程序用抓包工具把协调器组网和终端设备入网的过程也抓包了,抓包文件如附件6.psd。操作步骤如下:

    1、擦除协调器和终端设备的flash,重新烧写程序;

    2、协调器上电创建网络;

    3、终端设备上电加入网络;

    4、终端设备发送了3次广播数据“123”,协调器也收到了这3次广播数据;

    5、协调器发送了3次广播数据“321”,终端设备没有收到数据;

    麻烦您帮忙看下数据包是否正常?为什么NWK_AUTO_POLL就没有作用呢?

    再次感谢您之前的回复与帮助。

    6.psd
  • 你选的是哪个工程?

    编译选项都没改动过吧?

    奇了怪!

  • VV您好,

    我是从GenericApp改的工程,改动的方法就是按照《Create New Application For CC2530DB.pdf》里面的步骤更改的。

    编译选项设置如下:

    NWK_AUTO_POLL
    HOLD_AUTO_START
    SOFT_START
    NV_RESTORE
    NV_INIT
    BUILD_ALL_DEVICES
    ZTOOL_P1
    MT_TASK
    MT_ZDO_FUNC
    MT_ZDO_MGMT
    LCD_SUPPORTED=DEBUG

    主要是加了BUILD_ALL_DEVICES编译选项,再通过设置NVRam中的ZCD_NV_LOGICAL_TYPE来确定设备为协调器或终端设备。会不会是BUILD_ALL_DEVICES造成的呢?

    还有现在TI官网上为什么不能下载2.5.1a这个版本的协议栈呢?

  • 去下载吧

    http://u.163.com/sjoS7Jcc  提取码: EmJKdKAR 

    下载好告诉我!

    别新建工程,直接安装,打开已经有的工程,选好设备,下载就可以了。

  • VV您好,

    我已经下载好了,非常感谢!

    您说的“别新建工程,直接安装,打开已经有的工程,选好设备,下载就可以了。”这个是让我重新安装协议栈,把project下的GenericApp下载到板子测试NWK_AUTO_POLL功能吗?(这个我已经测试了,用GenericApp测试终端设备会各一秒发送一次data request包的,工作是正常的)

    您看我前面发给您的我自己的编译配置选项是否有什么问题?

    会不会是BUILD_ALL_DEVICES这个编译选项造成的问题呢?

    谢谢。

  • VV您好,

    问题已经解决了,非常感谢您这段时间的耐心回答与帮助。

  • bx da您好:

    我和你遇到了一样的问题,请问最终是怎么解决问题的?

    是 HOLD_AUTO_START,  BUILD_ALL_DEVICES 这两个相互冲突吗?

  • 能提供一下解决方法吗?

  • 您好,我在官网搜索了好久,没有看见ZStack-CC2530-2.5.1a.exe,只有Z-stack-home,还有gateway什么的,请问能给我一个链接吗?

  • bx da你的问题是怎么解决的? 我也碰到了开启NWK_AUTO_POLL,终端设备收不到数据的现象。麻烦分享一下吧

  • 我遇到的情况应该和题主的问题是一样的,我想我找到问题了,我来回答我自己的问题:

    题主应该和我的想法一样,想在一个工程Configurations里面通过BUILD_ALL_DEVICES编译项来实现对协调器、路由、终端角色的互转。

    然后想法很丰满现实很骨感,因为协调器/路由、终端在协议栈里面option的配置是不一样的,其中如下图的库文件是不一样的。其他的对比一下就知道了。

    所以解决的办法就是终端需要新建工程Configurations来实现,这也是TI官方sensorDEMO 例程的解决办法。

    当然应该也有其他解决办法,欢迎交流。

  • 确实是这样. 这里的库是不一样的.所以没有办法全都统一起来. 我当时就是因为这里被改成了rooter,终端会接收不到数据

  • 你好,你的问题怎么解决的?麻烦分享一下解决方案。

  • 大可以把1S的Data Request关闭,自己程序里面控制NwkPollReq去发送。