TI中文支持网
TI专业的中文技术问题搜集分享网站

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间隔了很久才出现

Shuyang Zhong:

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

Best regards,

Shuyang

,

user4777655:

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;
}

,

Shuyang Zhong:

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

Best regards,

Shuyang

,

Shuyang Zhong:

我在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

,

user4777655:

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

,

Shuyang Zhong:

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

Best regards,

Shuyang

,

user4777655:

也许不是阻塞,但是故障发生之后将无法向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 againif ( 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();}
}

,

Shuyang Zhong:

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

Best regards,

Shuyang

赞(0)
未经允许不得转载:TI中文支持网 » CC2652P: Zstackapi_pauseResumeDeviceReq暂停网络时的问题
分享到: 更多 (0)