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

CC2640R2F: 蓝牙广播消息异常问题分析

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产品线的工程师提出的意见。

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F: 蓝牙广播消息异常问题分析
分享到: 更多 (0)