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.

[参考译文] CC2340R5:CC2340R53 连接参数

Guru**** 2770985 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1613703/cc2340r5-cc2340r53-connection-parameters

器件型号: CC2340R5
主题: SysConfig 中讨论的其他器件

你好。

我的团队和我正在为 CC23 编写一些固件、充当 BLE 外设。  

我们注意到、使用默认连接参数时、iOS(充当中央设备)无法连接。

以下是我们的观察结果:

  • iOS 不会向我们的应用程序报告“已连接“状态
  • 我们的嵌入式端显示已建立连接

在和 iPhone 上使用蓝牙 HCI 日志记录配置文件、并通过 PacketLogger(Mac 软件)读取 HCI 日志、我们注意到以下情况:

  • 移动设备会尝试在最小和最大连接间隔内使用 50 (62.5ms) 来协商连接参数
  • 嵌入式端以包含 minConnectionInterval 12 (15ms) 和 maxConnectionInterval 24 (30ms) 的(接受)回复进行响应。
  • (两个间隔之间没有重叠)
  • 这里的通信只是停止,没有断开,没有
  • 这意味着:这不是配对问题、而是连接问题。

作为一个实验、我们尝试使用 GAP_UpdateLinkParamReq、其中最小和最大连接间隔乘法器的宽松值为 50、连接延迟为 0、连接超时为 500ms。

我们注意到以下情况:

  • 移动设备会尝试在最小和最大连接间隔内使用 50 (62.5ms) 来协商连接参数
  • 嵌入式端以 50 (62.5ms) 的 minConnectionInterval 和 62 (77.5ms) 的 maxConnectionInterval 进行响应
  • 移动端发送一条连接更新完成消息、同意连接间隔为 50 (62.ms)
结语:
  • 嵌入式端的当前默认连接参数与 iOS 不兼容。
  • 即使在连接后、我们也无法触发配对尝试;没有 iOS API 来创建配对关系。 相反、当特征交互返回的身份验证/授权不足时、将触发配对。

在 TI、我们有以下问题供您回答:

  • 为什么手机和芯片之间的通信刚刚停止? 我们期望它失败或继续使用当前的连接参数;(谁在等待谁?)
    • 如果这是 iOS 本身的错误,我们不能做任何事情,只能报告它将由苹果在未来解决
  • 当支持连接参数之间没有重叠时、嵌入式侧是否应以 HCI_LE_HCI_ Remote_Connection_Parameter_Request_Negative_Reply 进行响应?
  • 我们注意到监控超时未更新为请求的值 (500)。
  • 我们在代码中的任何位置都找不到 12/24 默认参数、TI 是否使用与 iOS 不兼容的默认参数? 它们设置在哪里?
    • 我们找到 ti_ble_config.h、但它提到间隔为 400 min、800 max、0 latancy 和 600 timeout。
    • 我们还找到了 GAP_initator.h、但这提到了 80、80、0 和 2000。 我还怀疑该文件未在我们的用例中用作外设。
  • 正确的参数应该是什么?

我们找到了 GapInit_setPhyParam () 函数,所以也许我们应该开始在我们的初始代码中的某处添加它吗?  

如下所示:(将值替换为合理的默认值)

GapInit_setPhyParam (init_PHY_1M、init_PHYPARAM_CONN_INT_MIN、50);
GapInit_setPhyParam (init_PHY_1M、init_PHYPARAM_CONN_INT_MAX、50);
GapInit_setPhyParam (init_PHY_1M、init_PHYPARAM_CONN_LATENCY、0);
GapInit_setPhyParam (init_PHY_1M、init_PHYPARAM_SUP_TIMEOUT、500);

 

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

    其他一些注意事项。

    1.我想知道 GapInit_setPhyParam 是否只能用于中心? 因此、这可能不是我们的解决方案(因为我们只需要编写外设)

    2.我发现我们有一个流氓装饰者在某处调用了一个相对严格的值 6 minInterval, 6 maxInterval 的 Set Connection Parameters 函数。 这些工作正常的 Android ,但据说是太紧的 iOS。 将它们替换为 30 minInterval 和 60 maxInterval 似乎允许连接到 iOS、同时仍可用于 Android。 我仍然不明白为什么我们在 HCI 扫描仪中看到值 12 和 24。

    我想知道什么是一组合适的参数。 您会推荐什么?

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

    您好、Xavier、

    感谢您联系我们! 这绝对是奇怪的行为。 您使用的是哪个 SDK 版本?

    [引用 userid=“672253" url="“ url="~“~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1613703/cc2340r5-cc2340r53-connection-parameters ]为什么手机和芯片之间的通信停止了? 我们期望它失败或继续使用当前的连接参数;(谁在等待谁?)

    在 BLE 中、中央控制连接参数、外设只能请求新参数。 在开箱即用示例中、在 BLEAPPUTIL_LINK_PARAM_UPDATE_REQ_EVENT 情况下处理连接参数更新请求。 如屏幕截图所示、器件将使用请求中发送的参数以接受方式进行响应。  

    如果这是 iOS 本身的错误,我们不能对此做任何事情,只能报告它将由苹果在未来解决

    我个人多次连接到 IOS 设备,使用不同的版本,所以我认为这不是任何一方的错误。 这可能只是一个小的误配置。

    ]当支持连接参数之间没有重叠时、嵌入式端是否应改为 HCI_LE_HCI_ Remote_Connection_Parameter_Request_Negative_Reply 进行响应?

    您能详细说明一下您在这里的意思吗? 作为 BLE 外设、该器件能够支持短至 7.5ms 且长达 4 秒的连接间隔。 “支持的“连接参数完全取决于您对应用程序的需求。 值得一提的是外设可以  仅接受或拒绝  连接参数更新请求。 它无法发送具有不同参数的响应。

    我们注意到监督超时没有更新到请求的值 (500)。

     它根本没有变化吗? 请记住、监控超时的单位为 10ms、而不是 1ms。

    我们在代码中的任何位置都找不到 12/24 默认参数、TI 是否使用与 iOS 不兼容的默认参数? 它们设置在哪里?
    • 我们找到 ti_ble_config.h、但它提到间隔为 400 min、800 max、0 latancy 和 600 timeout。
    • 我们还找到了 GAP_initator.h、但这提到了 80、80、0 和 2000。 我还怀疑该文件未在我们的用例中用作外设。
    [/报价]

    SysConfig 中设置了默认参数、生成 ti_ble_config.h 文件。 连接到 IO 中心时、TI 默认参数无关紧要。 这是因为中央确定初始连接参数。

    我发现我们在某处有一个流氓装饰者调用一个相对严格的值为 6 minInterval、6 maxInterval 的 Set Connection Parameters 函数。 这些工作正常的 Android ,但据说是太紧的 iOS。 将它们替换为 30 minInterval 和 60 maxInterval 似乎允许连接到 iOS、同时仍可用于 Android。 我仍然不明白为什么我们在 HCI 扫描器中看到值 12 和 24。

    连接间隔值以 1.25ms 为单位、因此 24 x 1.25 = 30。  

    我想知道 GapInit_setPhyParam 是否仅适用于中心器件? 因此、这可能不是我们的解决方案(因为我们只需要编写外设)

    由于外设不会启动任何连接、因此 GapInit_setPhyParams 本质上对外设无用。

    我希望这些回答能让您更好地理解。 如果没有、请让我知道您尝试使用您的设备实现的目标、我会帮您实现这一目标! 此外、我建议您查看我们的 BLE 连接 SimpleLink Academy

    此致、

    Tarek D

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

    您好 Tarek、感谢您的快速响应。

     您使用的是哪个 SDK 版本?

    simplelink_lowpower_f3_SDK_9_11_00_18

     我个人多次连接到 IOS 设备,使用不同的版本,所以我认为这不是任何一方的错误。 这可能只是一个小的误配置。

    根据经验、您会推荐哪些连接参数?

     它根本没有变化吗? 请记住、监控超时的单位为 10ms、而不是 1ms。

    我需要重新运行测试、但日志表明监督超时没有改变。 我会再次检查。

     SysConfig 中设置了默认参数、生成 ti_ble_config.h 文件。 连接到 IO 中心时、TI 默认参数无关紧要。 这是因为中央确定初始连接参数。

    好的,我们看到的默认参数是来自苹果的一面,然后.  

     连接间隔值以 1.25ms 为单位、因此 24 x 1.25 = 30。

     感谢您的澄清、但在本例中、在我们将外设更改为请求 30、60 之前、我们在 HCI 日志中看到最大 12 分钟、24 小时。 当时、我们要求 6、6。 我猜 12、24 都来自 iOS(?)

     由于外设不会启动任何连接、因此 GapInit_setPhyParams 本质上对外设无用。

    好的、感谢您确认这一点。

     

    我们目前使用 CC23 芯片的计划涉及将其用作 BLE 外设。  

    我们有一个需要在其上运行的现有应用程序。 此应用程序需要与 Android 和 iOS 设备(作为中央设备)进行通信。  

    我们目前正在构建的 TI-CC23 特定层绕过 BLEAppUtil 框架、倾向于直接管理 iCall API。  

     

    目前,我们对 Android 没有太多的麻烦 — 这只是 iOS 似乎造成了头痛. 你有过类似的经历吗?

    我需要进一步了解我们如何处理“更新连接参数“请求/响应。

    如果 Central (iOS) 是发起 ConnParams 请求的平台、很奇怪我们的外设除了建议值之外还在做任何其他事情。 奇怪的是、外设建议的值(看似)会导致两个器件之间的通信不同步。

    如需更多信息、在重新创建第一篇文章中提到的错误时、在假定连接已完成的情况下、TI 芯片会快乐地继续。 iPhone 将等待“连接完成“响应。 为什么我们在 Android 上看不到这一点,或者当使用不同的 ConnParams 值时,仍然是一个谜。

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

    嘿、Xavier、

    您能否分享一些代码片段、这些代码片段说明如何处理连接参数更新请求? 可能是问题所在。

    此致、

    Tarek D

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否分享一些说明如何处理连接参数更新请求的代码片段? 问题可能出在此处。

    在 INIT 时、我们执行  GAP_SetParamValue (GAP_PARAM_LINK_UPDATE_decision、GAP_UPDATE_REQ_ACCEPT_ALL);

    我们不处理  GAP_UPDATE_LINK_PARAM_REQ_EVENT、因为我们将标志设置为“Accept all“。

    当我们调用以下函数时出现了错误、其值为 min = 6、max = 6。 这在连接后立即调用。

    gapUpdateLinkParamReq_t req
          .connectionHandle = connectionContext.connectionHandle
          .intervalMin = connectionContext.parameters.minConnIntMultiplier
          .intervalMax = connectionContext.parameters.maxConnIntMultiplier
          .connLatency = connectionContext.parameters.slaveLatency
          .connTimeout = connectionContext.parameters.supervisorTimeoutMs
          .signalIdentifier = 0
        };

        bStatus_t STATUS = GAP_UpdateLinkParamReq (&req);

    这就是我们在 ConnParams 方面所做的一切。

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

    嘿、Xavier、

    我预计当连接到 IO 设备时、GAP_UpdateLinkParamREQ 将失败。 IO 设备的连接参数非常严格。 但是、除非您的应用程序代码强制断开连接、否则不应该发生断开连接的情况。

    正如“额外“检查一样、您是否在 syscfg 文件中将“Parameters Updates Request decision“设置为“Accept All“? (BLE ->外设配置)

    此外、如果未从外设发送连接参数更新请求、您是否可以维护连接?

    此致、

    Tarek D

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如“额外“检查一样、您是否在 syscfg 文件中将“Parameters Updates Request decision“设置为“Accept All“(全部接受)? (BLE ->外设配置)[/报价]

    您能解释一下这是什么意思吗? 您是指更改 ti_ble_config.h 中的以下行吗?  

    #define DEFAULT_PARAM_UPDATE_REQ_RECATION GAP_UPDATE_REQ_PASS_TO_APP
    最终目的
    #define DEFAULT_PARAM_UPDATE_REQ_RECATION GAP_UPDATE_REQ_ACCEPT_ALL

    我不确定应该直接修改此文件。 考虑到在初始化传输层时调用 GAP_SetParamValue 时、我们没有读取这个 default_param_update_REQ_decision 变量、我不确定更改此变量会对任何内容产生影响。

    此外、如果不从外设发送连接参数更新请求、是否可以保持连接?

    如果我们删除参数更新请求、则连接似乎需要维持良好。 显然、在 GAP_UpdateLinkParamReq 之后的某个位置会出现问题。 您提到 iOS 拒绝大多数(所有?) 连接参数请求、因此我们可能需要了解如何处理它。 发送错误请求后、我看不到任何 HCI 事件日志供我们挂钩、大概是因为该“accept_all"标志“标志。 我们是否应该尝试使用 PASS_TO_APP 并自行覆盖它?

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

    您好、Xavier、

    我不确定我们应该直接修改此文件。 考虑到在初始化传输层时调用 GAP_SetParamValue 时、我们没有读取这个 default_param_update_REQ_decision 变量、我不确定更改此变量会对任何内容产生影响。

    是的、如果您未调用 GAP_SetParamValue、您是对的、它不会影响任何内容。

    如果我们删除参数更新请求、则连接似乎可以维持正常。 显然、在 GAP_UpdateLinkParamReq 之后的某个位置会出现问题。 您提到 iOS 拒绝大多数(所有?) 连接参数请求、因此我们可能需要了解如何处理它。 发送错误请求后、我看不到任何 HCI 事件日志供我们挂钩、大概是因为该“accept_all"标志“标志。 我们是否应该尝试使用 pass_to_app 并自行覆盖它?

    我正在进一步了解 IOS 连接参数更新请求、但与此同时、我运行了一个快速测试、我能够发送连接参数更新请求、一切都按预期运行。 我附加了一个数据包监听器日志屏幕截图、显示正在接受的更新请求。  

    至于 HCI 事件、您应该仍会接收 BLEAPPUTIL_LINK_PARAM_UPDATE_EVENT 事件。 默认情况下、basic_ble 工程只会打印一条消息“Conn Status:Params update failed“。 您能否分享您的项目或处理此事件所需的代码?

    此外、在最后的测试中、您是否可以尝试导入 basic_ble 示例、并在不进行任何修改的情况下将其刷写到电路板上、并尝试使用 IO 器件连接到电路板。 建立连接后、使用设备的交互式菜单发送连接参数更新请求。 这将帮助我们确定问题是出在 IO 端还是 CC2340 端。

    此致、

    Tarek D

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、如果您未调用 GAP_SetParamValue、则您是正确的、它不会影响任何内容。

    我们正在调用 GAP_SetParamValue、我们只是不使用 ti_ble_config.h 中提到的#default 变量

    至于 HCI 事件、您应该仍会接收 BLEAPPUTIL_LINK_PARAM_UPDATE_EVENT 事件。 默认情况下、basic_ble 工程只会打印一条消息“Conn Status:Params update failed“。 您能否分享您的项目或处理此事件所需的代码?

    如前所述、我们绕过 BleAppUtils 以直接调用栈。

    当通过严格的 6 min 6 max connparams 请求时、我们不会收到 HCI 事件。

    我仍然假设这是因为我们的设置“Accept_all"处于“处于活动状态。

    为了捕获 ICallEvents、我们执行以下操作:

    //

    命名空间
      {
        基础:::功能 onICallEvent;

        uint8_t ICallEventHandler (uint8_t 事件、uint8* pMessage)
        {
          return onICallEvent (event、pMessage);
        }
      }
    //构造函数
      {
    ...
     
    onICallEvent =[this](uint8_t 事件、uint8* pMessage)
        {
          返回此-> HandleHciEvent(reinterpret_cast (*pMessage));
        };
        iCall_init();
        iCall_createRemoteTasks ();
        reall_assert (iCall_registerAppCback (&selfentity、ICallEventHandler)==成功);
      }
    //
    如果我们打算尽管“accept_all",“,但、但仍接收 param_link_update_events、那么我们应该在该 onICallEvent lambda 内看到它们。
    此外、作为您最终的测试、您能否尝试导入 basic_ble 示例、并在不进行任何修改的情况下将其刷写到电路板上、然后尝试使用 IOS 设备连接到电路板。 建立连接后、使用设备的交互式菜单发送连接参数更新请求。 这将帮助我们确定问题出在 IO 端还是 CC2340 端。

    以下工程是否正确?simplelink_lowpower_f3_SDK_8_40_02_01\examples\rtos\LP_EM_CC2340R53\ble5stack\basic_ble?

    我想我们需要使用 CodeComposerStudio 来实现这一点吗? 我们不在工作流程中使用该工具、但 我会了解是否可以解决该问题。

    您提到使用设备的交互式菜单 — 建议使用什么方法来完成此操作?

    为了便于您参考、我们在定制电路板上安装了 CC23、我们不使用 LaunchPad 测试板。

    在我们的代码中、我们当前仅将 UART 用于输出。 basic_ble 是否提供了通过 UART 或类似功能发送输入的设置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在进一步了解 IOS 连接参数更新请求、但与此同时、我运行了一个快速测试、并能够发送连接参数更新请求、一切都按预期运行。 我附加了一个数据包监听器日志屏幕截图、显示正在接受的更新请求。   [/报价]

    另外,感谢您检查此结果 — 我将自行检查是否获得相同的结果。

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

    大家好、我设置了 Code Composer Studio。 接下来、我使用 FreeRTOS、basic_ble、TI Arm Clang 的模板为 CC2340R53 创建了一个新工程。  

    我构建了 Release\basic_ble_LP_EM_CC2340R53_freertos_ticlang.hex 并通过 J-Link 将其刷写到电路板中、该链接中报告了没有 eros。

    在这里、我不确定如何继续。 我无法打开与器件的串行连接。

    你有什么建议? 我是否应该尝试在 launch.json 中创建运行配置来尝试使用 CCS 进行调试? 您是否有一个示例、说明这可能是怎样的?

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

    嘿、Xavier、

    basic_ble 示例使用 UART 和输出信息、但是、要使用交互式菜单、您需要使用 LaunchPad 上的按钮(似乎没有这种选择,因为您在定制电路板上)。

    不用担心、我将进行必要的修改、以便外设在建立连接几秒钟后自动发送连接参数更新请求。 我将在下一个回复中分享代码、并说明如何使用它。

    此致、

    Tarek D

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

    嘿、Xavier、

    请查看随附的修改后的 app_connection.c 文件、您可以在开箱即用 basic_ble 示例中替换该文件。  

    此文件将允许器件每隔几秒连续自动地向其连接的中央端发送连接参数更新请求。

    e2e.ti.com/.../app_5F00_connection.c

    如果您仍然看到问题、或者您有任何其他问题、请告诉我!

    此致、

    Tarek D

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

    您好、

    我能够使用您对 app_connection.c 所做的更改构建一个 HEX、并通过 NRF CONNECT 将 iPhone 连接到“Basic BLE project“。

    我不确定如何继续、因为我没有日志。 我可以通过 JLink 打开串行连接、但我看不到任何日志。

    我希望能够验证栈如何处理 connparam 交换、并能够尝试一些更改等操作


    //将参数更新传递给应用程序以供其决定。
    #define DEFAULT_PARAM_UPDATE_REQ_RECATION   GAP_UPDATE_REQ_PASS_TO_APP
    最终目的

    //将参数更新传递给应用程序以供其决定。
    #define DEFAULT_PARAM_UPDATE_REQ_RECATION   GAP_UPDATE_REQ_ACCEPT_ALL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Xavier、

    我为延误道歉! 我不在办公室。

    您可以通过几种不同的方式进行验证:

    • 发送连接参数更新请求后、您可以修改代码以点亮定制电路板上的任何 LED
    • 发送连接参数更新请求后、您可以修改要输出到 jlink 的代码
    • 获取所需的软件

    很抱歉无法提供更详细的解决方案、但我没有足够的关于您的定制电路板的信息。

    我希望这对您有所帮助! 如果您还有任何问题、或者需要我的帮助来实施、请告诉我。

    此致、

    Tarek D