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.

[参考译文] CC2642R:广播数据对现有蓝牙连接的影响

Guru**** 2589265 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1381588/cc2642r-impact-of-broadcast-data-on-existing-bluetooth-connection

器件型号:CC2642R

工具与软件:

您好!

1.通过一个1s 周期的软件计时器,每秒重新加载不同的广播数据,并将已建立的连接(作为主机)的连接参数更新为:间隔1s ,超时8s ,延时0。 通过仿真、可以知道已接收到 GAP_LINK_PARAM_UPDATE_EVENT、但在后续连接事件中不会将任何数据包作为主机发送、从而导致连接超时断开连接。

2、以1为基础,将重载广播数据的计时周期设为2s ,或者将连接间隔更新为625ms ,使连接参数更新后,数据包发送出去,保持连接。 但是、无法针对每个连接事件发送数据包。 通常、发送数据包需要2到3个连接间隔。

3、当广播只在开始时启用而不重新加载广播数据时,上述连接参数更新后可以保持连接,连接事件的包发送相对完整。

您能否帮助分析上述大量广播数据对现有连接造成影响的原因、并就如何避免这种影响提供建议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    早上好。

    感谢您的咨询。 您能否指定您正在使用的 SDK 版本以及此版本是否基于 SDK 中的开箱即用示例? 请看一下您用于传输数据的函数的返回状态(GATT 写入、通知?)、我可能怀疑是"bleNoResources"返回状态。 此外、要重新分配多少广播数据、您如何执行此操作(通过缓冲区加载/加载我的句柄?)。 我看到它附带了监听器日志、如果您也可以共享日志文件本身、会很有用。

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨 μ A、

    1. SDK 版本:simplelink_cc13x2_26x2_SDK_5_20_00_52

      在项目实例的基础上:简单的

    2.为广播转换尝试了以下两种方法 μ A:

    GapAdv_disable (advHandleLegacy、GAP_ADV_ENABLE_OPTIONS_USE_MAX、0);

    GapAdv_loadByHandle(advHandleLegacy,GAP_ADV_DATA_TYPE_ADV,sizeof ( advDataXpNormal ), advDataXpNormal );

    GapAdv_enable (advHandleLegacy、GAP_ADV_ENABLE_OPTIONS _USE_MAX、0);

    或 μ A

    GapAdv_prepareLoadByBuffer( advertData, false );

    len=sizeof (提前数据);

    (d)管理信息系统 ć;

    缓冲区(Len,广告数据);

    3.我们实际上不需要发送数据 μ 但是它在连接中的作用是GAP、程序中心 μ 所以在正常情况下它应该发送一个空包。从日志来看、我们的主机似乎没有发送空包 μ 这导致了连接的时间中断。、 μ s

    您好!
    一些其他信息:
    1.今天,我试图在每次连接事件完成时打开/关闭广播或重新加载广播数据。 我发现、一旦打开/关闭广播或重新加载广播、主机就无法在下一个连接间隔中发送空数据包、必须等到下一个连接间隔才能发送它。
    2.从下面的日志中可以看出、当连接间隔为30ms 时、交互时间实际上是60ms;当连接间隔更新为1s 时、交互时间实际上是2s。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mo、

    感谢您提供更多信息。 我不确定这是什么示例、或者这些(不是英文)的退货状态是什么。

    您如何修改广播数据(代码中的位置)? 您设置的最大连接数是多少? 我看到"远程用户终止连接"、这是由于运行"主连接参数请求"后的中央设备断开连接、您正在更新参数、如果您不执行此操作、您是否仍看到断开连接? 您的中心是谁、它是移动应用程序吗?

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1.这是主从应用程序。 在连接中、CC2642是中央设备、外设是另一个 CC2642器件。

    2.最大连接数为3。

    3.如果关闭此功能中的广播,然后再次打开,您会发现在现有连接的下一个连接间隔中没有数据包。

    当连接间隔为1s 时、每2s 将有一个连接事件。

    当连接间隔为30ms 时、每60ms 将有一个连接事件。

    屏幕截图来自此日志。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mo、

    我明白了。 这可能是因为堆栈没有足够的时间启用/禁用连接事件之间的广播、并且它正在使数据排队、并在下一个连接事件中发送数据。 我想问一下、这是否会对应用造成负面影响? 如果进一步增加连接时间、您会看到同样的问题吗?

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1、当连接间隔更新为1时、且每次广播需要在1以内关闭和打开、此时将不会有连接事件、连接将超时、断开。

    2.这似乎受到打开广播的操作的影响、因为两个连接事件间隔1秒、这应该是足够的时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mo、

    我建议您看看 文档中的"连接公平性"部分。 如果通过广播导致连接事件丢失、则可以尝试提高连接事件的公平性、此处存在问题。

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我在初始化期间调用了以下函数、但问题仍然存在。

    HCI_EXT_SetQOSDefaultParameters (LL_QoS _HIGH_PRIORITY、
    LL_QoS_TYPE_PRIORITY、
    LL_QoS_CONN_TASK_TYPE);
    HCI_EXT_SetQOSDefaultParameters (LL_QoS _LOW_PRIORITY、
    LL_QoS_TYPE_PRIORITY、
    LL_QoS_ADV_TASK_TYPE);

    启用广播的行动是否必然会导致中心角色的下一个连接事件丢失? 此版本的 SDK 是否会出现这种情况?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mo、

    这可能需要大量资源、因为两项任务大致同时执行。 您能否分享一下如何以 x_interval 间隔启用/禁用广播数据的更多信息(如果可能为代码段)?

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    静态空 SimplePeripheral_processConnEvt (Gap_Conn R407pt_t* pReport)

    每次连接事件到达时、将在此函数中执行以下操作:

    GapAdv_disable (advHandleLegacy、GAP_ADV_ENABLE_OPTIONS_USE_MAX、0);

    GapAdv_enable (advHandleLegacy、GAP_ADV_ENABLE_OPTIONS _USE_MAX、0);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mo、

    我可以问一下用例是什么吗? 为什么在每个连接事件中都禁用和启用广播? 您何时修改广播数据? 据我所知、GapAdv_disable()仅将处理程序用作参数。

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    由于有两个不同的广播数据需要在1秒的时间内切换、但发现当连接间隔更新为1秒时不会发生连接事件、因此为了便于禁用然后启用广播或更新广播数据的操作、连接事件将丢失、然后在函数(static void SimplePeripheral_processEvt* pRConnReport)中执行这些操作 Gap_Conn。

    GapAdv_disable (advHandleLegacy);

    GapAdv_enable (advHandleLegacy、GAP_ADV_ENABLE_OPTIONS _USE_MAX、0);

    或者

    GapAdv_disable (advHandleLegacy);

    GapAdv_loadByHandle (advHandleLegacy、GAP_ADV_DATA_TYPE_ADV、sizeof (advertData)、advertData);

    GapAdv_enable (advHandleLegacy、GAP_ADV_ENABLE_OPTIONS _USE_MAX、0);

    或者

    GapAdv_prepareLoadByBuffer( advertData, false );

    GapAdv_loadByHandle (advHandleLegacy、GAP_ADV_DATA_TYPE_ADV、sizeof (advertData)、advertData);

    无论这些程序是否在该函数中执行(static void SimplePeripheral_processConnEvt ( Gap_Conn Rcont_t* pReport )),连接事件丢失问题都会出现。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mo、

    当广播在连接事件中在 GAP_EVT_ADV_END 处停止时、是否可以尝试修改广播数据(运行 GapAdv_disable/GapAdv_enable)? 为此、您可以使用 时钟GPTimer 等计时器 、仅 在1秒后修改 GAP_EVT_ADV_END 中的广播数据。 确保启用了多个连接、以便设备即使在建立连接后也能继续广播。

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这种方法已经过尝试、也存在连接丢失事件的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mo、

    当更新广播数据的频率与其中一个连接事件的频率(1秒)不同时、是否也是这种情况?

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这已经过尝试、仍然发生连接丢失事件。 当广播数据更新频率为1时、当连接间隔为625ms 时、某些连接事件将丢失;当连接间隔为800ms 时、将丢失更多连接事件;当连接间隔大于或等于1时、所有连接事件都将丢失。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    由于缺勤而造成延迟、对此深表歉意、并感谢您提供更多信息。 我正在努力在我这边重现这一问题。 虽然不是完全建议这么做、但您是否尝试过在不禁用/启用广播的情况下直接修改广播数据、或者像在用户指南中那样通过 缓冲器或处理程序加载广播?在启用广播的情况下直接操作缓冲器?

    我假设此处可能发生的情况是、禁用/启用广播会在无线电侧引入延迟、无论广播/连接之间的优先级如何(您已经验证过)、都会推送连接事件。 您能否确认从 GapAdv_disable ()返回的 bStatus_t 是什么? 我还想问一下您是否能够成功地修改广播数据?

    我在这里看到的另一个选项是在广播侧递增计数器(每次它进入 GAP_EVT_ADV_END 时)、并在 N*COUNTER 值更新广播数据之后(其中 N*COUNTER 是两个新广播信息之间的间隔)。

    BR、

    David。