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.

[参考译文] CC2541:CC2541 Central -断开多个器件的连接-连接手持设备的更改?

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1498903/cc2541-cc2541-central---disconnecting-multiple-devices---connhandle-change

器件型号:CC2541

工具/软件:

只是想知道是否有人可以确认或帮助这个。

我们有一个设计、while 作为中央器件运行、可连接多达3个外设。

最近、我再次使用此构建、尝试改进连接/断开连接。

一个奇怪的事情是、通过断开所有三个外设的连接来工作。 这一直很奇怪、
第三个断开连接的表现不同、需要很长时间。

通常连接三个设备、并分配 connHandle 0、1、2。 它们用于参考每个器件并在连接时存储在数组中。

如果我按顺序断开每一个连接。

0 -> 1 -> 2、前两个将以终止 REQ 状态0x16终止  

一切正常:- #define LL_STATUS_ERROR_HOST_TERM            0x16 //连接由本地主机终止

第三个命令也需要很长时间、并通过 Terminate REQ 0x22终止

#define LL_STATUS_ERROR_LL_TIMEOUT 0x22 //链路层响应超时
#define LL_STATUS_ERROR_LL_TIMEOUT_HOST 0x22 //链路层响应超时
#define LL_STATUS_ERROR_LL_TIMEOUT_PEER 0x22 //链路层响应超时

我尝试了序列之间的较大延迟(认为堆栈拥塞或其他情况)-但甚至5秒的断开间隙也没有任何区别。

然后,今天我尝试了这:

按相反顺序断开连接

2->1->0

这种工作正常、将快速运行、始终具有 Terminate REQ 0x16 (Happy Days!)

但我认为、一旦第一个链路断开、BLE 堆栈是否有可能重新配置 connHandle。

这将解释为什么在序列中使用 connHandle 2作为第三方总是做一些不同的事情?

因此、如果我使用序列0..1..2

0时断开。 其余的有效 connhandles 实际上是0..1

1断开时。 剩余的有效 connhandle 为0

因此、我的断开2现在不引用有效的 connHandle。

但因此,在另一个方向上做是可以的。

我有点需要了解这里的工作原理、以便在其中一个外设断开连接时可以正确管理、我是否需要更正我使用的所有 connHandles
外设进行通信。

感谢任何支持/答案。 在其他地方找不到关于这个的任何信息:-(

Rob

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

    你好 Rob!

    是否使用 GAP_TerminateLinkReq 断开外围设备的连接? 您能否展示用于断开外设连接的代码片段? 非常感谢!

    此致、
    Maxence

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

    您好、Maxence、

    很好地使用 GAPCentral Role_Terminate 链接()  ,然后调用..  GAP_TerminateLinkReq ()

    /**
    *@简短终止链接。
    *
    *在 central.h 中定义的公共函数
    */
    bStatus_t GAPCentral Role_Terminate 链接( uint16 connHandle )

    返回 GAP_TerminateLinkReq (gapCentralRoleTaskId、connHandle、HCI_DISCONNECT_REMOTE_USER_TERM);
    }

    是我的代码。 其中  mvrDevices[id].connHandle 是建立连接时 connGandle 的副本。


    bStatus_t MVR_DeviceDisconnect (uint8 id)

     bStatus_t 结果;
     结果=失败;

     if( mvrDevices[id].BLEState != BLE_STATE_IDLE && mvrDevices[id].BLEState != BLE_STATE_UNCONNECTING )
     {
       mvrDevices[id].BLEState = BLE_STATE_DISCONNECT;
       结果= GAPCentral Role_Terminate 链接( mvrDevices[id].connHandle );
       _debug_print ("H%d) t link - cHandle %d 状态%d \n\r"、id、mvrDevices[id].connHandle、结果);
     }
     暴露
     {
       _debug_print ("H%d) cHandle %d can disc? State\n\r"、id、mvrDevices[id].connHandle、mvrDevices[id].BLEState );
     }

     返回结果;

    }

    终端上的调试打印。 (断开订单0-1-2)

    断开设备连接
    D0
    H0) T link - cHandle 0状态0
    h0)终止 Rq 16
    H0)终止事件
    H0)清理
    D1
    h1) T link - cHandle 1状态0
    h1)终止 Rq 16
    h1)终止事件
    h1)清理
    D2
    h2) T link - cHandle 2状态0 (发送终止后出现大延迟、接收到终止 Rq22)、类似 connhandle 无效。
    h2)终止 Rq 22
    h2)终止事件
    H2)清理

    终端上的调试打印。 (断开订单2-1-0 -每次工作!)

    断开设备连接
    D2
    h2) T link - cHandle 2状态0
    h2)终止 Rq 16
    h2)终止事件
    H2)清理
    D1
    h1) T link - cHandle 1状态0
    h1)终止 Rq 16
    h1)终止事件
    h1)清理
    D0
    H0) T link - cHandle 0状态0
    h0)终止 Rq 16
    H0)终止事件
    H0)清理

    此致


    Rob

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

    您好!

    请告诉我您使用的是哪个 SDK?

    此致、
    Maxence

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

    您好、

    如果您同时断开所有手柄的连接、您是否可以通过致电来尝试断开所有手柄GAPCentralRole_TerminateLink(GAP_CONNHANDLE_ALL)的连接、并告诉我是否仍有延迟?

    谢谢您、
    Maxence

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

    最新版本1.5.20

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

    这不是我需要做的事情,以后要做的。 但我也可以尝试。

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

    此外、使用 GAP_CONNDLE_ALL 的问题虽然它会断开所有器件、但接收到的 链路 RQ 会通过堆栈终止
    表示最高句柄为 dsiconnect: h2-其中2为收到的连接。

    因此、这不允许我对我拥有的每个单独器件进行清理。

    断开设备连接
    ALL) T LINK 所有状态0
    h2)终止 Rq 16
    h2)终止事件
    H2)清理

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

    您好!

    您能否提供事件的监听器日志、以便我们尝试进行调试? 使用的 SDK 有点旧、因此很难真正找到问题的根源。

    此致、
    Maxence

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

    您好、Maxence、

    FYI -我正在努力获取一些日志。  

    目前、我看到的是在断开顺序中通过0-1-2失败的、看起来从不发送第3个 LL_Terminate 数据包。

    只需等待运行第3个监听器电路板、即可同时捕获全部3个器件。

    BR

    Rob

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

    您好、Maxence、

    是否有方法可以直接向您发送监听器日志-我不想在论坛上共享内容、因为它包含我们的自定义接口协议。

    BR

    Rob

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

    您好、

    您可以发送日志。

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

    您好、Maxence、

    您是否收到了我通过电子邮件发送的日志?

    BR

    Rob

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

    您好、

    是的,我收到了它们,但我似乎无法用 Wireshark 读取它们。 您使用什么解析器来读取日志?

    此致、
    Maxence

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

    不确定这是否有帮助、但这些是 Wireshark 的插件设置。

    我们不得不使用 Nordic Sniffer 设置、因为旧的 TI Dongles 无法可靠地连接3个通道。

    我没有自己设置这个,但如果你提供更具体的信息,你需要我可以找出.

    BR

    Rob

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

    您好、

    我将尝试重现 Nordic 嗅探器设置以读取您的嗅探器日志、看看我是否可以将其发送给我们的工程师。 由于 CC2541是一款较旧的器件、因此该错误可能需要大量时间才能得到解决、并且补丁需要在官方 SDK 中发布。 在您给我发送的邮件中、您提到您一直在使用更新的 CC2340器件、建议您继续这么做、因为这是拥有最新 BLE 堆栈的最佳选择。

    同时、使用GAPCentralRole_TerminateLink(GAP_CONNHANDLE_ALL)和清理 mvrDevices阵列中的所有器件可能是您的最佳解决方案。

    此致、
    Maxence

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

    您好、Maxence、

    我还有一个与此相关的问题-正如我一直在研究捕获结果一样。 似乎发生的情况是 Central 在某个点停止空的连接间隔数据包。

    我可以看到我们的外设请求15ms - 75ms 的连接间隔更新。 这不由 Central 处理、Central 似乎默认连接间隔为100ms。 (我找不到在 CC2541中央源代码头中设置此代码的位置)-您是否知道如何更改此代码。  

    我想知道我的 Central 是否只能在100ms 下运行、然后连接了3个外设、其最大连接间隔为75ms。 应该如何管理这一点。 我阅读过一些帖子、其中 Central 在这种情况下的运行速度可能比所需的最慢外设连接间隔快3倍、因此是25ms。 是否中央设备只能在一个连接间隔内连接到一个设备。 仅供参考、也没有实现从器件延迟。

    为什么在某些情况下、尤其是在多个设备连接断开的情况下、这可能会发生?

    PS: CC2340一段时间以来都不会在线、因为目前 CC2541市场上有7款产品。 我确实需要使这3个连接系统保持稳定。

    此致


    Rob

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

    您好、

    在简单 BLE 中心示例(位于C:\Texas Instruments\BLE-CC254x-1.5.2.0\Projects\ble\SimpleBLECentral)中、连接间隔设置位于simpleBLECentral.c文件中、并使用DEFAULT_UPDATE_MIN_CONN_INTERVALDEFAULT_UPDATE_MAX_CONN_INTERVAL宏进行定义。 这些宏在GAPCentralRole_UpdateLink函数中使用。 您可以查看工程用于此函数的参数。

    如果您的间隔连接太高、则可能会导致问题。 在单个连接中、蓝牙参数握手使中央设备和外设都能够商定一个对两者都适用的连接间隔、但我不知道如何在多个同步 BLE 连接中实现这一点。 您可以尝试减少这个数字并进行测试、看看它是否有效。

    此致、
    Maxence