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.

CC2652P: Zstackapi_pauseResumeDeviceReq暂停网络时的问题

Part Number: CC2652P

SDK:simplelink_cc13x2_26x2_sdk_5_10_00_48

使用Zstackapi_pauseResumeDeviceReq暂停网络时间过长时,再进行恢复网络操作导致设备无法恢复网络,调试发现可以触发ZDO_beaconNotifyIndCB,间隔很久之后才会触发ZDO_NetworkDiscoveryConfirmCB

抓包发现也是先发送becaon req,也接收到了becaon rsp,但是rejoin req间隔了很久才出现

  • 请问问题是在ZR还是ZED节点上?是否可以提供在例程上复现问题的步骤以方便复现呢?谢谢。

    Best regards,

    Shuyang

  • ZED节点上,例程将按键指向事件改为自定义的暂停恢复事件,设置zstack_pauseResumeDeviceReq.pause = true;调用Zstackapi_pauseResumeDeviceReq进行暂停网络,间隔13分钟左右,然后设置zstack_pauseResumeDeviceReq.pause = false;调用Zstackapi_pauseResumeDeviceReq进行恢复网络,此时会延迟18分钟左右ZDO才能接收到ZDO_NWK_DISC_CNF进行后续的rejoin,感觉是在zstack线程阻塞住了。

    if(appServiceTaskEvents & GENERICAPP_NETWORK_PAUSE_EVT)
    {
        zstack_pauseResumeDeviceReq_t zstack_pauseResumeDeviceReq = { 0 };
        zstack_pauseResumeDeviceReq.pause = true;
        Zstackapi_pauseResumeDeviceReq(appServiceTaskId, &zstack_pauseResumeDeviceReq);
    
        appServiceTaskEvents &= ~GENERICAPP_NETWORK_PAUSE_EVT;
    }
    
    if(appServiceTaskEvents & GENERICAPP_NETWORK_RESUME_EVT)
    {
        zstack_pauseResumeDeviceReq_t zstack_pauseResumeDeviceReq = { 0 };
        zstack_pauseResumeDeviceReq.pause = false;
        Zstackapi_pauseResumeDeviceReq(appServiceTaskId, &zstack_pauseResumeDeviceReq);
    
        appServiceTaskEvents &= ~GENERICAPP_NETWORK_RESUME_EVT;
    }

  • 感谢提供代码,我先尝试复现一下现象再给您反馈,谢谢。

    Best regards,

    Shuyang

  • 我在LaunchPad开发板上确实复现了您所说的现象,但具体原因的分析需要产品线协助。我已将此问题反馈至英文E2E论坛:

    https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1060039/cc2652r-end-device-takes-very-long-to-resume-after-pause-for-more-that-10-minutes

    有结果后会第一时间在此进行更新,您也可以直接在英文帖子中补充讨论,谢谢。

    Best regards,

    Shuyang

  • 我的账户无法在英文论坛参与讨论,但是这个API在DMM_OAD项目中被DMMPolicy_registerAppCbs使用,使用这个API暂停时的确会关闭pollrate轮询,此时进入休眠模式,在恢复时如果出现故障,会在使用无线电进行beaconReq后阻塞zstackTask,导致设备无法进入休眠模式,跟Ryan Brown1所说的故障相同

  • 我在开发板上用断点调试,在发出beacon request之后到发送Rejoin request这一段时间程序可以单步走的,您说zstackTask被阻塞住了,是有发现程序具体卡在某一个语句中吗?如果有这个线索,会帮助我们进一步定位问题所在。

    Best regards,

    Shuyang

  • 也许不是阻塞,但是故障发生之后将无法向macTask发送指令,无法进入ZMacEventLoop触发MAC_SCAN_TASK_EVT,这导致无法进行rejoin操作;即使是手动触发Zstackapi_DevNwkDiscReq这类API也不行,由于这些在ROM中,我无法进一步进行调试。

    现在我尝试在ZDApp_ResumeNwk中添加ZMacReset(FALSE),似乎可以解决这一故障,但是不清楚这具体重置了什么。

    void ZDApp_ResumeNwk()
    {
        APSME_HoldDataRequests(0); // Enable APS data request again
    
        if ( 0 != ZG_BUILD_COORDINATOR_TYPE || 0 != ZG_BUILD_RTR_TYPE )
        {
            NLME_SetLinkStatusTimer();
    
            byte val = TRUE;
            ZMacSetReq(ZMacRxOnIdle, &val);
    
            ZDApp_SetParentAnnceTimer();
        }
        else if ( ZG_DEVICE_ENDDEVICE_TYPE )
        {
    ++      ZMacReset(FALSE);
            //This will set the poll rate as it was before.
            nwk_SetCurrentPollRateType( POLL_RATE_DISABLED, FALSE );
            //this will prepare the device to perform rejoin and will send the notification to the app that the parent is lost.
            bdb_parentLost();
        }
    }

  • 我和产品线的应用工程师讨论了这个问题,目前怀疑是在bdb_parentLost函数中调用的ZMacSetReq会导致出现问题,产品线正在进一步调查此问题,并会在后续SDK当中进行改进,谢谢。

    Best regards,

    Shuyang