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.

协调器不发送route request的问题

Other Parts Discussed in Thread: CC2538, Z-STACK

我用的CC2538+zmesh协议栈

我设置协调器工作在many to one模式,CONCENTRATOR_ENABLE设置为true

CONCENTRATOR_DISCOVERY_TIME = 3;

用sniffer抓包发现,协调器只发送link status,不发送route request,是怎么回事

  • 进一步发现,如果协议栈中定义了

    -DNV_INIT
    -DNV_RESTORE

    则协调器不会发送route request,如果没有定义,则会发送route request

    我用的Z-Stack Mesh 1.0.0,代码没有任何修改,只是在f8wcoord.cfg中增加如下:

    ==========================================================================

    //保存网络状态
    -DNV_INIT
    -DNV_RESTORE

    -DCONCENTRATOR_ENABLE=TRUE
    -DCONCENTRATOR_DISCOVERY_TIME=3

    //Link Status 网络维护包,邻居表
    -DNWK_LINK_STATUS_PERIOD=3

  • 又进一步发现,在ZDApp.c的479行:

    // At start up, do one MTO route discovery if the device is a concentrator
    if ( zgConcentratorEnable == TRUE )
    {
    // Start next event
    osal_start_timerEx( NWK_TaskID, NWK_MTO_RTG_REQ_EVT, 100 );
    }

    当定义了NV_INIT和NV_RESTORE,执行到479行时zgConcentratorEnable 值为0,怀疑协议栈在恢复NV变量的时候有bug。。

  • 原来是IAR的问题,IAR download and debug的时候不擦除flash吗,

  • @chao sun3

    CONCENTRATOR_DISCOVERY_TIME = 3的含义,协调器每隔3秒会发一次MTO Router Request,而且是广播数据。

    这样的频率太高了,一方面是网络内大量的广播数据,另外是每发一次MTO Router Request会让下面的节点重新选择一次Coordinator的路径,没必要如此频繁的选择到Coordinator的路径。一般建议把改变量设置为120s发一次

    -DNWK_LINK_STATUS_PERIOD=3是用来维护邻居之间的链路状况的,一般默认为为15s一次,3s种太短了。