Part Number:CC2640R2F
你好!
我使用cc2640R2的器件,做从机使用。与CC2642R2F对接,反复链接中,发现广播消息出现异常。请帮忙看一下?
什么原因会导致该问题发生或怎么解决。
谢谢!
CC2640R2使用的sdk:simplelink_cc2640r2_sdk_3_10_00_15 。
正常的广播报文:
反复链接后,异常的广播报文:
Alex Zhang:
您好,请问您这边使用的两个芯片的sdk版本分别是多少,以及是否为官方的开发板,还是自行设计的电路?
再提供您这边使用的demo是哪个例程?跑的例程还是开发板出现的这个问题?
,
quan chen:
CC2640R2使用的sdk:simplelink_cc2640r2_sdk_3_10_00_15 。
与开发板一样的自研单板。
按照mac地址链接时是没有问题的。在反复接入后,会出现上述问题。
,
Alex Zhang:
如果您这边使用ti的开发板去跑例程,会遇到这样的问题吗?
,
quan chen:
我把代码在CC2640R2F的开发板上,验证,也出现相同的问题。
,
Alex Zhang:
是使用的例程还是您这边在例程上进行了修改?
,
quan chen:
在例程修改的代码。
,
quan chen:
在设备运行中,我先关闭adv广播,然后再修改广播消息的内容,在使能广播。这个会导致协议栈异常吗?目前看,如果这里修改,会概率性出现广播消息异常问题。
//!< Free the scan response data GapAdv_destroy(advHandleLegacy, GAP_ADV_FREE_OPTION_ALL_DATA);
bStatus_t status = FAILURE; GapAdv_params_t advParamLegacy = GAPADV_PARAMS_LEGACY_SCANN_CONN_Bruce;
// Create Advertisement set #1 and assign handle status = GapAdv_create(&SimplePeripheral_advCallback, &advParamLegacy, &advHandleLegacy); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Load advertising data for set #1 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLegacy, GAP_ADV_DATA_TYPE_ADV, sizeof(advertData), advertData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Load scan response data for set #1 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLegacy, GAP_ADV_DATA_TYPE_SCAN_RSP, sizeof(scanRspData), scanRspData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Set event mask for set #1 status = GapAdv_setEventMask(advHandleLegacy, GAP_ADV_EVT_MASK_START_AFTER_ENABLE | GAP_ADV_EVT_MASK_END_AFTER_DISABLE | GAP_ADV_EVT_MASK_SET_TERMINATED); }
// Start advertising since there is room for more connections GapAdv_enable(advHandleLegacy, GAP_ADV_ENABLE_OPTIONS_USE_MAX, 0);
,
Alex Zhang:
您好,您可以参考一下ti这边官方的training
dev.ti.com/…/ble_scan_adv_basic.html
,
quan chen:
你好!
我把文档看了编码,分析了一下现在的处理流程。目前从流程处理上是没有问题的。
我现在的流程是:关闭广播,注销广播句柄,重新创建句柄,加载新的广播数据,在使能广播包。
请在看一下:广播数据概率异常,会有什么方面的原因触发?
谢谢!
,
Alex Zhang:
您这边注意一下广播间隔时间与连接间隔时间,调整一下,看是否会有帮助。
,
quan chen:
这个广播间隔,
primIntMin = 3000, .primIntMax = 3000,
–这个周期是很长的了,需要修改为两者不一直吗?
,
Alex Zhang:
您好,我这边需要时间看一下您的问题,谢谢。
,
quan chen:
你好,这个问题有异常点吗?
另外,在GapAdv_disable与GapAdv_enable,在建联时关闭,断链时打开,这样反复操作,会触发协议栈异常吗?
从代码流程中看,现在也就这里在变化。
谢谢!
,
Alex Zhang:
对我来说,问题是由广告被销毁而没有禁用的事实引起的。这意味着在您修改数据缓冲区的内容时,无线电仍有 RF 操作排队。
为了避免这种情况,我建议调用GapAdv_disable,等待事件GAP_EVT_ADV_END_AFTER_DISABLE接收,然后调用你引用的代码。
注意:下次请使用插入代码功能添加代码片段,因为它可以避免支持团队手动复制代码
我希望这会有所帮助,
,
quan chen:
你好!
谢谢你的分析。
你现在是否有过复现?还是从原理上分析的。
,
Alex Zhang:
您好,您的问题得到解决了吗?
,
quan chen:
没有,这个重启可以恢复,概率也很低。
你最新说的方法,我还没有验证。
,
Alex Zhang:
希望您这边可以验证一下,我这边的分析是由TI产品线的工程师提出的意见。