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.

[参考译文] CC2640R2F:重新连接11。 或高于键合设备的电压

Guru**** 2611705 points
Other Parts Discussed in Thread: LAUNCHXL-CC26X2R1, BLE-STACK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1240918/cc2640r2f-reconnect-of-11-or-above-bonded-device-is-not-possible

器件型号:CC2640R2F
主题中讨论的其他器件:LAUNCHXL-CC26X2R1BLE-STACK

您好!

我有一个基于 multi_role 示例的应用、但进行了修改和扩展。 软件充当定制电路板上的外设。 我需要支持多达20个绑定器件。

为此我修改了最大键合定义:  

#define GAP_BONDINGS_MAX 20

因此、关于文档 simplelink_cc2640r2_sdk_5_30_00_03/docs/blestack/ble_user_guide/html/ble-stack-3.x/gapbondmngr.html 和 simplelink_cc2640r2_sdk_5_30_00_03/docs/blestack/ble_user_guide/html/ble-stack-common/combdef 更改了 flash_memory-cc2640.html 中的参数 

// For GAP: (BLE_NVID_GAP_BOND_END - BLE_NVID_GAP_BOND_START) >= GAP_BONDINGS_MAX*6
// For GATT: (BLE_NVID_GATT_CFG_END - BLE_NVID_GATT_CFG_START) >= GAP_BONDINGS_MAX.
// No overlap can exist between any of the ranges.
// All indexes are 1 Byte values and so should note exceed 0xFF or 255.

// Bonding NV Items -   Range  0x20 - 0x98    - This allows for 20 bondings
#define BLE_NVID_GAP_BOND_START         0x20  //!< Start of the GAP Bond Manager's NV IDs
#define BLE_NVID_GAP_BOND_END           0x98  //!< End of the GAP Bond Manager's NV IDs Range

// GATT Configuration NV Items - Range  0xA0 - 0xB4 - This must match the number of Bonding entries
#define BLE_NVID_GATT_CFG_START         0xA0  //!< Start of the GATT Configuration NV IDs
#define BLE_NVID_GATT_CFG_END           0xB4  //!< End of the GATT Configuration NV IDs

// Customer NV Items - Range  0xC0 - 0xD5 - This must match the number of Bonding entries
#define BLE_NVID_CUST_START             0xC0  //!< Start of the Customer's NV IDs
#define BLE_NVID_CUST_END               0xD5  //!< End of the Customer's NV IDs

作为中央设备,我使用几个智能手机(三星 S7, iPhone 7和8,三星 S10,小米等)与自定义应用程序.

测试设置: 最多可连接并绑定10部智能手机。 绑定连接后,断开和重新连接的这首10智能手机(与绑定索引0..9 )是工作没有问题。

然后连接并键合11。 智能手机和它正在工作:我可以发送和接收数据。 断开智能手机并重新连接:连接被外设禁止:

2023年06月22日17:28:55.384:GapMessageEvent:
LinkEstablishedEvent (0x05)
状态:0x00
DeviceAddressType:0x01
DeviceAddress:xx:xx:xx:xx:xx:xx (此处为 ramdom 地址)
连接处理程序:0x00
连接角色:0x04
连接间隔:0x28
连接延迟:0x00
ConnectionTimeOut:0x1F4
时钟精度:0x01


2023年06月22日17:28:55.507:GapMessageEvent:
LinkTerminatedEvent (0x06)
状态:0x00
连接处理程序:0x00
原因:0x16

智能手机12、13、14、15等也会发生同样的情况。 绑定 和首次连接工作正常。 重新连接失败。 同时我可以重新连接智能手机1至10。

现在我不知道导致这种行为的原因是什么。 我注意到的唯一一件事是:"正常工作"的智能手机重新连接地址类型2 (公共身份地址)。 "故障"智能手机以 地址类型1 (随机设备地址)重新连接、请参阅上面的日志输出。 但我不知道这些信息是否有帮助。

我做过的一次测试:

1.已删除智能手机的绑定7.

2.粘合另一个智能手机(它成为 bondandex 6 )。 粘接和第一次连接工作正常。 重新连接失败。

3.移除新智能手机的绑定。

4.绑定的智能手机7再次:第一次连接工作,所有重新连接失败。

您是否有任何想法或暗示会导致这种行为?

Br

安德烈亚斯

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

    Andreas、您好!

    感谢您与我们取得联系、

    首先、您是否成功地同时连接了全部20部电话? 换言之、一旦您将前10部电话连接到设备、然后首次尝试使用11、12、13等、您成功做到了吗?

    这是我的观点、我真的不知道如何进行连接、但要连接这么多手机、您需要对外设的广播和连接事件进行强有力的管理。 如果你想保持与所有电话的连接事件必须彼此不同步,更多的你需要在同一时间保持广告,我不惊讶,你击中墙壁连接所有电话。 您的广告间隔是多久?

    关于重新连接、设备连接的默认地址是什么? (随机设备地址或公共身份地址)

    如果您使用特定地址绑定了智能手机、然后断开并尝试重新连接、但地址已更改、则外设将自动拒绝连接、因为他无法识别该手机。

    如果能够看一看监听器布线、会很不错。

    此致、

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

    纪尧姆、您好!

    对不起,我可能会误导你。 我必须支持多达20个绑定器件、但  同时仅支持最多2个活动连接。 因此、我不需要管理20个活动连接。

     

    不同地说,一旦您将前10部电话连接到设备,然后首次尝试使用11、12、13等,您是否成功做到了?

    我可以连接和绑定电话11、12等第一次,但只有一次. 断开后、我无法再连接它们。 重新连接失败后、绑定信息也会保存在外设中。

    您的广告间隔是多少?

    一秒钟。  

    关于重新连接,默认地址设备连接什么? (随机设备地址或公共标识地址)

    债券列表中的前10部电话可以无问题地重新连接, 在重新连接时使用公共身份地址。 下面我们举例说明:

    GapMessageEvent:
    LinkEstablishedEvent (0x05)
    状态:0x00
    DeviceAddressType:0x02
    器件地址:08:78:08:xx:xx:xx <--可在电话设置中读取的公共地址
    连接处理程序:0x00
    连接角色:0x04
    连接间隔:0x27
    连接延迟:0x00
    ConnectionTimeOut:0x1F4
    时钟精度:0x01

    从11开始的电话。  我 在建立链路事件中看到随机设备地址:这是12的示例。 电话:

    LinkEstablishedEvent (0x05)
    状态:0x00
    DeviceAddressType:0x01
    器件地址:4A:C3:76:07:CC:24 <--随机地址  
    连接处理程序:0x00
    连接角色:0x04
    连接间隔:0x27
    连接延迟:0x00
    ConnectionTimeOut:0x1F4
    时钟精度:0x01

    如果您绑定了具有特定地址的智能手机,则断开连接并尝试重新连接,但地址已更改,外围设备将自动拒绝连接,导致无法识别电话。

    这是明确的预期行为。 问题是、为什么我看到从11点开始的手机。 (但不适用于前10个)该随机地址。

    如果能看监听器跟踪将会很好[/报价]

    我可以尝试使用 LAUNCHXL-CC26X2R1进行捕获。

    Br

    安德烈亚斯

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

    感谢你的评分

    我想你已经试过了,但这种行为是否同样与你使用的电话类型无关? 喜欢它更多的数字(后10手机),而不是手机本身?

    此外、正如指南中提到的、您必须擦除 NV 才能更改绑定配置、是否错过了此步骤?

    最后、在 bcomdef.h 中再次检查您的更改、默认值为10 Gaps_Bondings_MAX、尝试遵循相同的模式。

    此致、

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

    不同手机的行为是相同的: iPhone 7、8、三星 S7、S10e 和小米 MiA2。

    我使用 CCS12进行编程、但也使用闪存编程器2、我假设在使用 CCS 进行编程之前会自动擦除整个闪存。 附加我也可以做批量擦除与闪存编程2。

    对于 bcomdef.h、我遵循了指南中的规则。 对我来说、这些值看起来不错、我在第一篇文章中提供了它们。

    Br

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

    好的、尝试整体擦除、我知道。

    是的、我检查了您的、似乎没问题、因为图形在默认参数上略有不同:(我不确定它会发生什么变化、只是想提一下)

    对于绑定 NV 项目,端和起始之间的差异略高于6*(63GAP_BONDINGS_MAX而不是60 ),在您的情况下,您完全等于120。

    这似乎是内存管理问题、存储了第一组10个器件的键值(因为它是默认的间隙绑定最大数)、但其他器件丢失。

    此致、

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

    批量擦除无帮助。 在11. 再次发送错误提醒。 现在、我将扩大缝隙的 Ids 范围、

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

    好的、请及时更新、如果它不起作用、请考虑为我们提供 BLE 跟踪。

    此致、

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

    纪尧姆、您好!

    修改 ID 范围没有任何更改:

    // Bonding NV Items -   Range  0x20 - 0xBF    - This allows for 20 bondings
    #define BLE_NVID_GAP_BOND_START         0x20  //!< Start of the GAP Bond Manager's NV IDs
    #define BLE_NVID_GAP_BOND_END           0xBF  //!< End of the GAP Bond Manager's NV IDs Range
    
    // GATT Configuration NV Items - Range  0xC0 - 0xD4 - This must match the number of Bonding entries
    #define BLE_NVID_GATT_CFG_START         0xC0  //!< Start of the GATT Configuration NV IDs
    #define BLE_NVID_GATT_CFG_END           0xD4  //!< End of the GATT Configuration NV IDs
    
    // Customer NV Items - Range  0xE0 - 0xF5 - This must match the number of Bonding entries
    // bootloader password 1 + GAP_BONDINGS_MAX
    #define BLE_NVID_CUST_START             0xE0  //!< Start of the Customer's NV IDs
    #define BLE_NVID_CUST_END               0xF5  //!< End of the Customer's NV IDs

    我再也没有任何想法了。 看起来10以上器件的密钥未存储或被覆盖。 但为什么不清楚。 是否还必须更改其他值/定义/变量才能接受超过10个器件?

    P.S.:监听器布线不可用、因为使用 LAUNCHXL-CC26x2r1和 Wireshark 设置的监听器仅显示广播数据包、扫描 req/rsp、无连接数据包。 我记得旧版本的 SmartRF 数据包监听器/Wireshark 中是其它功能。

    Br

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

    尊敬的 Andreas:

    您是否有重新连接失败的任何原因或错误代码?

    您没有 Ellisys 蓝牙分析器、它们将嗅探无线中的所有数据包。

    此致、

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

    纪尧姆、您好!

    我所能做的就是使用断开原因0x16的链路终止事件。 是否有其他事件(HCI?) 我可以跟踪并获取更多有用信息。

    您没有 Ellisys 蓝牙分析器

    不是、只有 TI 才推出电路板。

    Br

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

    尊敬的 Andreas:

    目前我无法重现您的问题、我将深入了解它。

    您的申请必须同时拥有20个债券吗?

    我知道您可以删除一些绑定并创建新的绑定,以便存储所有密钥。 此过程应自动进行、是否适合您的应用?

    除了仅针对13个 GAP_Bondings_MAX 进行测试外、您还能测试相同的数值、我想知道它是否可以高于此值。 用户指南中提到了这一点 、最好仔细检查一下。 它位于 BLE-Stack > GAP Bond Manager 和 LE 安全连接 首选。

    最后、您能否确认您使用的是 ble-stack、而不是 ble-5stack?

    此致、

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

    纪尧姆、您好!

    很抱歉回复晚了。 我发现了问题的原因:

    在'stack library'项目中、由于历史原因链接了'bcomdef.h'、但未将其从版本中排除。 因此、该库是使用'bcomdef.h'中的默认值构建的、但应用程序具有修改的值。
    从编译中排除原始文件"bcomdef.h"后、一切都按预期运行。

    感谢您的承诺! 您可以关闭 TT。

    Br

    安德烈亚斯