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.

[参考译文] CC2540:作为同时连接到2个器件的中央设备、与一个外设的连接突然发生、但 CC2540仍然认为它已连接。#39

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/989507/cc2540-as-central-connecting-to-2-devices-at-the-same-time-the-connection-to-one-peripheral-suddenly-but-the-cc2540-still-believe-it-s-connected

器件型号:CC2540
主题中讨论的其他器件: CC2640

我使用 CC2540作为同时连接2个外设的中央设备。

无法保持与两个外设的连接、它始终至少断开与其中一个外设的连接。 我在外设中获取的错误代码是 GATT CONN 超时、但是 CC2540似乎没有检测到断开连接、即使在监控超时超时超时超时超时之后也是如此。

我已经测试了以下内容:

  1. 在 GAP_LINK_TERMINATED_EVENT 上添加了断点:问题发生时、执行永远不会在此断点停止。 (如果我强制断开外设、 或者两个外设几乎同时断开、但出现相同的错误、则会停止、但仅适用于其中一个外设)
  2. 添加了使用 HCI_EXT_GetConnInfoCmd 检查连接信息的代码:当问题发生时、函数会响应连接仍处于活动状态、即有2个活动连接。
  3. 我关闭已断开连接的外设以检查问题是否在该侧、表示已断开连接、但仍保持连接:CC2540仍认为外设已永久连接(已过监控超时)

为什么我获取 GATT CONN 超时 以及为什么监控超时不起作用?

这是连接的配置:

GAP_SetParamValue (TGAP_CONN_EST_INT_MIN、200);   
GAP_SetParamValue (TGAP_CONN_EST_INT_MAX、400;
GAP_SetParamValue (TGAP_CONN_EST_Superv_TIMEOUT、200);
GAP_SetParamValue (TGAP_CONN_EST_Latency、0);
GAP_SetParamValue (TGAP_CONN_EST_MAX_CE_LEN、100);

我已经尝试使用默认 MAX_CE_LEN、但它会更频繁地给出错误

我还尝试了较低和较高的连接间隔、但 也发生了这种情况。

没有与哪个外设产生问题相关的模式的迹象、这种情况随任何情况发生。

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

    我刚刚确认、它也可以与两个外设断开连接、但 CC2540仍然认为它已连接

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

    您好!

    我指派了一名专家来帮助您的查询。 您能否提供您正在使用的 SDK 版本以及应用程序所基于的项目?

    此致、

    1月

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

    您好、Jan、SDK 为1.5.1.1、基本项目为 simpleBLE Central

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

    您好、Nicolas、

    GATT CONN 超时不是连接的实际超时。 由于外围设备和中央设备仍在通信、因此您从未看到链路监控超时、但如果您要获取 BLE 监听器日志、您可能会看到来回的连接事件是空的。  

    当您启动未在30秒内完成的 GATT 操作时、会发生 GATT 连接超时。 这可能是出于多种原因。 如果您可以提供监听器日志、这将非常有用。  

    另请确保将 MAX_CE_LEN 设置为可确保能够适应连接事件中的所有数据包的值。 您的器件稳定在哪个连接间隔?

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

    您好、Nicolas、

    GATT CONN 超时不是连接的实际超时。 由于外围设备和中央设备仍在通信、因此您从未看到链路监控超时、但如果您要获取 BLE 监听器日志、您可能会看到来回的连接事件是空的。  

    当您启动未在30秒内完成的 GATT 操作时、会发生 GATT 连接超时。 这可能是出于多种原因。 如果您可以提供监听器日志、这将非常有用。  

    另请确保将 MAX_CE_LEN 设置为可确保能够适应连接事件中的所有数据包的值。 您的器件稳定在哪个连接间隔?

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

    大家好、Evan、我知道您说的内容、但我已经放弃了、我手头没有监听器、但我进行了一项测试、告诉我连接不再进行、我关闭了外设、3秒后仍然继续 (监控超时) CC2540仍然认为它已连接、就像 GATT 连接超时阻止 CC2540意识到连接已断开一样。  

    此外、如果任何人都应提供 GATT 连接超时、则应为 CC2540、因为它是生成读取请求和写入请求的客户端。 外设(GATT 服务器)未生成任何通知或指示。 但是、由于外设上的 GATT 连接超时而导致的断开连接发生在 CC2540提供超时之前。 CC2540意识到在下一个显然不会从外设中得到任何响应的读取或写入请求之后大约30秒的超时。

    我已经在7.5ms 至500ms 的宽范围内尝试过连接间隔、即使最快的连接间隔似乎更快地失败、它也会在一段时间后一直失败。

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

    大家好、我已经使用监听器进行了记录、正如我所期望的那样、连接被完全断开、在外设指示断开连接后、没有更多的连接数据包。  

    我已经确认、如果仅连接了1个外设、并且未执行扫描或其他连接、连接就会稳定、并且可以一直持续。 但是、一旦我激活第二个外设的扫描、无论它是否找到了某个外设、第一个连接都会在一段时间后中断。

    在我看来、CC2540一旦开始扫描和/或同时连接到另一个外设、就无法跟上连接时序。  

    在我们的应用中、总是有一些特征的读取和/写入、每个特征有20个字节。 MTU 为默认值(23字节)

    在哪里可以找到一个中央设备连接到多个外设的合适示例、这些外设对每个外设执行密集的写入和读取操作? 我想尝试使用经过测试的固件来解决硬件问题

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

    我做了更多的测试、可以同时连接到两个外设、如果没有对特性的写入或读取、连接不会中断、一旦我开始发送写入和读取请求、连接就会在一段时间后中断。

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

    Nicolas、

    我很抱歉没有得到我的答复。 几周前、我似乎没有收到一封电子邮件、通知我您的回复。 抱歉。  

    您能否分享您使用的嗅探器? 感谢您运行附加测试、这将是我的下一个问题。  

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

    Evan、您好、这里是我捕获的监听器跟踪

    提醒一下、我正在进行中央扫描、同时连接2个不同的外设。 连接并配对(需要绑定)后、我开始执行以下操作:
    对于外设1、我读取5个特性、并分别写入7 (写入请求) 20个字节

    对于外设2、我读取1个特性、并分别写入4 (写入请求)  20个字节

    我正在等待外设读取或写入下一个特征的响应。

    连接参数如下:  

    连接间隔最小值:75ms

    连接间隔最大值:500ms

    监控时间2s

    延迟0

    我所面临的问题是、一段时间(不一致)后、一个或两个外设的连接中断、外设显示错误0x08 (GATT 连接超时)、但 CC2540 (中央)不 会触发断开事件、即使在通过2s 监测超时后也是如此。 只有当我尝试写入或读取下一个特征时、我才会获得 GATT 超时、并且我决定调用 GAPentalRole_TerminateLink 并重置与外设连接相关的所有变量。 但是、有时无法重新连接到器件、我再次开始扫描、但它无法再次连接、我仍在检查广播事件是否未显示或连接失败。

    今天、我还进行了一些其他测试:

    1.只向其中一个外设发送请求(读取和写入)。 连接持续时间更长、但仍然失败、CC2540不会触发断开事件。

    2.将延迟设置为1。 据我所知、它仍然失败、延迟是外设决定何时报告还是不报告、但中央应继续生成连接事件、 因此、这是一种预期行为、与我的想法一致(CC2540作为中心 缺少连接事件)

    3.发送和接收的字节数更少:我已经测试了每个特性的写入和读取字节数小于20字节。 它仍然失败、没有变化。  

    4.我甚至在 CC2540上使用制冷功能尝试了连接、只是为了放弃射频晶体和天线电路正在加热、频率漂移导致连接事件缺失。 问题仍然存在,需要一些时间,但仍然失败。

    5.使用写命令而不是写请求。 它提高了吞吐量、但仍然失败、并且在连接和发送到一个外设时进行扫描似乎需要更多的时间。

    如果 CC2540能够触发断开事件、则最终断开是可以容忍的、但不必等待更长的超时(GATT 超时)而不是监控超时。  

    结论:我在这里看到2个问题:

    CC2540无法处理2个带有读取/请求的连接、以及 SPI 中断作为从器件、因为它不能生成准确的连接事件

    2. CC2540未检测到断开连接、因此必须存在处理监控超时的问题。

    为了继续前进、我希望获得 一个经过测试(最好是由 TI 提供)的代码或十六进制代码、该代码或十六进制代码可同时用作一个中央设备、该设备可同时处理至少2个外设、并且能够在每个连接间隔上保持读数写入请求。 以便在我们的硬件中进行评估和比较。

    此外、我们正在考虑改用较新的 BLE 芯片。 CC2540上的支持似乎已停止(Wiki 已删除)。 可以选择 CC2640、但我们想知道 CC2640的 SDK 是否与 CC2540具有相同的结构(即使它们具有不同的架构)、以及迁移代码需要多少时间。

    e2e.ti.com/.../3513.sniffer.rar

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

    您好、Nicolas、

    正如我在其他两个线程中提到的。 我将亲自研究这个问题。 我对延误深表歉意。 感谢您提供监听日志。 您能否澄清您是否仍有此问题、或者您是否已对此主题进行过任何其他发现? 我将研究这一点、并在明天结束前提供更新。

    此致、

    1月

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

    您好、Nicolas、

    关于从 CC2540移植到 CC2640、 CC2640 BLE 软件开发指南中有一节专门介绍 CC2540和 CC2640之间的整体移植过程。 我认为这将是确定移植过程所涉及的努力的良好起点。 您可能还会发现以下 E2E 主题对 您有所帮助:https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/bluetooth-forum/405312/effort-for-porting-cc2541-projects-to-cc2640

    您的项目是否基于 SimpleBLECentral 和 SimpleBLEPeripheral? 如果是,那么到目前为止,已经做了哪些修改? 在使用未修改 的 SimpleBLECentral 和 SimpleBLEPeripheral 工程时、您是否能够测试此行为(外设断开连接且未被检测到)? 我认为这可能有助于我们缩小这个问题的根源。

    此致、

    1月

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

    您好 Jan、  

    我将代码基于 SimpleBLECentral、但由于 SimpleBLECentral 不处理多个连接、因此进行了大量修改。

    我们使用的外设非常简单、仅实现 GATT 表和配对、其中一个外设是可能不使用 CC2540实现的硬件器件、另一个外设是用作外设的移动应用。

    我们还使用 DE REAL 器件和 REAL 应用进行了测试、但问题仍然存在、为了简化和删除外部变量、我们使用 2个智能手机和使用通用应用(nrfConnect)来模拟外设 、该应用会生成 GATT 表并处理与我们的中央设备的配对和绑定。

    如果德州仪器声称 CC2540能够连接多达3个外设、那么您必须拥有一个可连接多达3个外设的经测试代码、我们希望获得该代码并在我们的硬件中进行测试。 您能向我们提供该代码吗?

    话虽如此、如果我们不从外设连续写入或读取特征、我们可以连接到两个外设并无限期地保持连接、 因此、我希望测试了用于连接多达3个外设的德州仪器开发的代码、以持续向外设发送和接收请求。

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

    您好、Nicolas、

    感谢您提供更多信息。  作为快速测试、您能否尝试将所有设备的连接间隔设置为彼此的倍数? 我相信以下 E2E 主题对您有所帮助: https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/bluetooth-forum/501753/cc2540-data-exchange-with-multiple-connections-slaves

    您能否告诉我们、遵循该主题中的建议是否会对您观察到的行为产生任何影响?

    此致、

    1月