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.

[参考译文] CC2652R7:在某些器件上蓝牙连接失败

Guru**** 2893300 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1196896/cc2652r7-bluetooth-connections-fail-with-some-devices

器件型号:CC2652R7
"Thread:SysConfig"中讨论的其他器件

我有一个使用 SDK 06.30.01.03的 CC2652以及它附带的 BLE 堆栈。 我无法通过某些器件连接到器件。 Google Pixel 3A 和5均无法连接、而 Pixel 6和 Samsung S21能够无问题连接。  

我能够捕获由手机发出的针对像素3A 和像素6的连接请求。 遗憾的是、用于捕获数据包的器件在收到连接请求数据包时挂起一秒钟、因此连接过程中没有任何其他数据包。 我知道 CC2652根据我的应用程序的日志收到了连接请求、但我不确定它是否在响应。 在连接失败后、CC 停止广播和扫描响应、但在成功连接之后或期间不会停止。

像素3A 连接失败:

像素6成功连接:

SysConfig 的蓝牙部分

ble.addressMode = "ADDRMODE_PUBLIC";
ble.deviceRole = "PERIPHERAL_CFG+CENTRAL_CFG";
ble.deviceName = "<name>"; // name changed for this post
ble.extAdv = false;
ble.bondManager = false;
ble.bonding = false;
ble.maxBonds = 0;
ble.bondPairing = "GAPBOND_PAIRING_MODE_NO_PAIRING";
ble.noOsalSnv = true;
ble.defaultTxPower = "HCI_EXT_TX_POWER_5_DBM";
ble.disableDisplayModule = true;
ble.scanInt = 3500;
ble.scanWin = 3500;
ble.maxConnNum = 2;
ble.maxNumIcallEnabledTasks = 4;
ble.maxPDUSize = 251;
ble.oadDebug = true;
ble.oneLibSizeOpt = false;
ble.scanDuration = 11000;
ble.advRptFields = ["SCAN_ADVRPT_FLD_ADDRESS","SCAN_ADVRPT_FLD_DATALEN","SCAN_ADVRPT_FLD_EVENTTYPE","SCAN_ADVRPT_FLD_RSSI"];
ble.numOfAdvSets = 1;
ble.radioConfig.codeExportConfig.$name = "ti_devices_radioconfig_code_export_param0";
ble.connUpdateParamsPeripheral.$name = "ti_ble5stack_general_ble_conn_update_params0";
ble.connUpdateParamsPeripheral.paramUpdateDelay = 3000;
ble.connUpdateParamsPeripheral.reqMaxConnInt = 60;
ble.connUpdateParamsPeripheral.reqMinConnInt = 40;
ble.advSet1.$name = "ti_ble5stack_broadcaster_advertisement_set0";
ble.advSet1.advParam1.$name = "ti_ble5stack_broadcaster_advertisement_params0";
ble.advSet1.advParam1.name = "legacyAdvParams";
ble.advSet1.advParam1.primIntMax = 2000;
ble.advSet1.advParam1.primIntMin = 1000;
ble.advSet1.advParam1.txPower = "otherTxPower";
ble.advSet1.advParam1.txPowerValue = 5;
ble.advSet1.advData1.$name = "ti_ble5stack_broadcaster_advertisement_data0";
ble.advSet1.advData1.advertisingFlags = ["GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED","GAP_ADTYPE_FLAGS_GENERAL"];
ble.advSet1.advData1.GAP_ADTYPE_128BIT_MORE = true;
ble.advSet1.advData1.name = "legacyAdvData";
ble.advSet1.advData1.numOfUUIDs128More = 1;
ble.advSet1.advData1.numOfUUIDs16More = 1;
ble.advSet1.advData1.UUID016More = 0xFCFF;
ble.advSet1.advData1.GAP_ADTYPE_LOCAL_NAME_COMPLETE = true;
ble.advSet1.advData1.GAP_ADTYPE_FLAGS = true;
ble.advSet1.advData1.UUID0128More = system.utils.bigInt("FFFFFFFFFFFFFFFFFFFFFFFF",16);
ble.advSet1.scanRes1.$name = "ti_ble5stack_broadcaster_advertisement_data1";
ble.advSet1.scanRes1.name = "scanRespData";
ble.advSet1.scanRes1.GAP_ADTYPE_SERVICE_DATA = true;
ble.advSet1.scanRes1.numOfUUIDs16SD = 1;
ble.advSet1.scanRes1.UUID016SD = 0x192A;
ble.advSet1.scanRes1.UUID016SDData = system.utils.bigInt("FF",16);
ble.advSet1.scanRes1.GAP_ADTYPE_MANUFACTURER_SPECIFIC = true;
ble.advSet1.scanRes1.companyIdentifier = 0xF30A;
ble.advSet1.scanRes1.additionalData = "0xFFFFFFFF00";
ble.connUpdateParamsCentral.$name = "ti_ble5stack_general_ble_conn_update_params1";

我在使用 SDK 04.40.04.04的 CC1352上运行了类似的 BLE 配置、可以正常连接。

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

    您好!

    感谢您与我们联系。 我们将调查您的问题并回复您。 同时,我有几个问题可以帮助我们尽可能有效地解决这一问题。 在6.40 SDK 版本上是否可以看到此行为? 您能否分享具体的 Android 版本以及遇到问题的设备的版本? 连接行为失败的重现性如何? 它是每次发生还是仅在部分时间发生?

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    • 在6.40 SDK 版本上是否可以看到此行为?
      • 可以
    • 您能否分享具体的 Android 版本以及遇到问题的设备的版本?
      • 像素6 (没问题)- Android 13、内部版本 TQ1A.230205.001
      • 像素5 (问题)- Android 13、内部版本  TQ1A.230205.001
      • 像素3A (问题)- Android 12、内部版本 SP2a.220505.008
    • 连接行为失败的重现性如何? 它是每次发生还是仅在部分时间发生?
      • 每一次都有问题的电话。 切勿用于不会遇到此问题的电话。

    同样值得注意的是,这个问题也发生在 iPhone 上,虽然我不知道它是在哪个版本的 iOS 上。

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

    您好!

    如果您运行简单外设演示、是否会遇到相同的行为?

    此致、

    Rogelio

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

     否、简单外设示例工作正常。

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

    还有什么可以尝试的呢? 这一问题开始阻碍发展。 谢谢你。

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

    我发现在 simple peripheral 示例中禁用扩展广播导致我的手机无法连接到该外设、因此在上面的 SysConfig 中重新启用了、但它未解决问题。 除了扩展广播外、我在简单外设示例上复制了我的所有外设设置、但我的手机仍然能够连接。

    将简单的外设示例添加到外设+中央设备中似乎并不容易、因此我选择从我的构建中删除中央组件。 我仍然无法连接到设备。

    我已经注意到、尝试连接将导致 CC 突然增加3mA。 不确定这意味着什么、但如果我不得不猜猜猜猜、可能是 无线电或堆栈突然陷入了无限循环。

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

    我要感谢大家迄今所提供的帮助。

    实验很多之后、我们发现、如果我们强制使用1M PHY、我们就可以连接到所有电话。 这样做很明显会将我们的传输速率降低一半、这并不理想、因为我们有时会通过 BLE 移动兆字节的数据。 它还会增加功耗、这对于我们的低功耗器件也不是理想的选择。

    我们希望尽可能解决2M 该问题。

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

    嗨、ch701x、

    如果可以列出对连接参数所做的更改、感谢迄今所取得的进展。

    大型手机显然改为2M PHY 无法连接到这些特定的手机。  

    此致、

    Rogelio

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

    初始化 HCI 时所使用的驱动程序

    • HCI_LE_WriteSuggestedDefaultDataLenCmd(251, 2120);
    • HCI_EXT_OverlappedProcessingCmd(HCI_EXT_ENABLE_OVERLAPPED_PROCESSING);
    • HCI_LE_SetDefaultPhyCmd (HCI_PHY_USE_PHY_Param、HCI_PHY_1_Mbps、HCI_PHY_1_Mbps);//这个是修复问题

    我们发现、通过较旧的手机连接到 CC 时、手机会尝试协商使用2M PHY、协商会使 CC 进入不良状态。 使用最后一个要点中的此行将禁止协商。

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

    谢谢。

    这绝对是奇怪的行为,我更深入地看它。

    此致、

    Rogelio

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

    您好!

    我对延期和这一延误可能造成的任何不便深表歉意。 您仍在观察此问题吗? 如果有、那么您是否可以尝试通过1M PHY 连接到器件、一旦连接建立、就使用2M PHY? simple_peripheral 示例实现了此功能并可用作相关的参考。

    此致、

    1月