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.

zstack3.0 终端断网后,进行重新搜索网络,而这个过程需要10s,请问这10s终端是一直等待协调器回应吗?有没办法缩减该时间?

如题:因为功耗原因,所以想要缩短; 而且通过测试,终端只会在一开始发送一个Beacon包,后面什么消息都没有发出,如果协调器没有收到这包beacon,终端在这段时间内也无法入网,需要等待下一包Beacon。

1. 发出Beacon包后,终端是一直处于接收模式,等待协调器入网响应吗?

2.能否缩短这一段时间?

  • 这10s内的电流,都处于30mA左右;
  • 填坑:
    发送Beacon的流程:
    发送信标后,PA设置为强化接收。
    (如果主机在该次周期没有收到信标,就需要等待下一次发送信标)
    该流程导致10s电流会维持在30mA左右的电流,因为相当于10s接收

    修改方式:将PA接收关闭,并进入睡眠
    是否能进入睡眠需要通过两个方面决定:

    1.OSAL方面
    PM2: 有定时任务,并且开启电源保护
    PM3: 将轮询设置为0,并且开启电源保护
    2.MAC层
    在mac_sleep.c中,
    macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags都为0。
    只有都为0才能进入睡眠
    两个方面都达到,才能进入睡眠

    减少Beacon包,接收时间的方法:
    (一个Beacon信标的总时间为10s,一个周期10s)
    在ZDApp.c - ZDApp_event_loop - ZDO_NETWORK_INIT - 添加一个定时任务:
    ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
    DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
    osal_start_timerEx(Copy_TaskID, TEST_EVT_7, 3000);
    (这里的3000,表示发送信标的时间)

    定时任务中,关闭PA接收:
    if( events & TEST_EVT_7 )
    {
    macRxHardDisable(); //关闭PA的RX强化接收
    isSleep(1); //进入睡眠
    return ( events ^ TEST_EVT_7 );
    }
    (剩下的时间进入睡眠)

    现在有个问题:每次申请入网后的最后会出现一个尖峰,还需优化
  • 发送Beacon的流程:
    发送信标后,PA设置为强化接收。
    (如果主机在该次周期没有收到信标,就需要等待下一次发送信标)
    该流程导致10s电流会维持在30mA左右的电流,因为相当于10s接收

    修改方式:将PA接收关闭,并进入睡眠
    是否能进入睡眠需要通过两个方面决定:

    1.OSAL方面
    PM2: 有定时任务,并且开启电源保护
    PM3: 将轮询设置为0,并且开启电源保护
    2.MAC层
    在mac_sleep.c中,
    macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags都为0。
    只有都为0才能进入睡眠
    两个方面都达到,才能进入睡眠

    减少Beacon包,接收时间的方法:
    (一个Beacon信标的总时间为10s,一个周期10s)
    在ZDApp.c - ZDApp_event_loop - ZDO_NETWORK_INIT - 添加一个定时任务:
    ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
    DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
    osal_start_timerEx(Copy_TaskID, TEST_EVT_7, 3000);
    (这里的3000,表示发送信标的时间)

    定时任务中,关闭PA接收:
    if( events & TEST_EVT_7 )
    {
    macRxHardDisable(); //关闭PA的RX强化接收
    isSleep(1); //进入睡眠
    return ( events ^ TEST_EVT_7 );
    }
    (剩下的时间进入睡眠)

    现在有个问题:每次调用入网后的最后会出现一个尖峰,需要抓包