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:手机始终处于连接外围设备的过程中、无法成功连接

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1489758/cc2340r5-the-phone-is-always-in-the-process-of-connecting-to-peripheral-devices-and-cannot-connect-successfully

器件型号:CC2340R5

工具/软件:

SDK 版本:8.40.00.64

CCS 版本:12.7.0.00007  

项目:basic_ble_LP_EM_CC2340R5_freertos_ticlang


当我作为外围设备测试 CC2340时、在运行一段时间后、我发现可以在 iPhone 上使用 NRF 应用扫描蓝牙广播、但我无法在 Android 手机上使用 NRF 应用扫描它。 此外,虽然 iPhone 可以扫描广播,但它无法连接,并且将始终处于连接状态。 然而,从广播数据来看,它似乎没有被冻结,因为当我测试时,一个数字被广播,这个数字是每分钟+1 ,这似乎是正常的。


我想问在什么情况下会发生这种情况?
或者是否修改了蓝牙的某些参数?

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

    您好:

    感谢您联系我们! 您能否提供 CC2340的连接更新请求参数、并可能提供数据包监听器日志? 我怀疑这个问题是因为 iPhone 设备与 Android 设备之间的连接参数不同。

    此致、

    Tarek

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

    我想这是因为 IOS 系统会记住某些参数、如 MAC、因此可以对其进行扫描。 可能 CC2340的一些参数实际上已更改、因此 Android 系统无法扫描 CC2340、因为虽然 IOS 系统可以扫描它、但它无法连接、并在重新启动后恢复正常。

    我在 BLEAppUtil_convertGATTEvents 末尾添加了 GATT_BM_FREE、但这不会影响 GAP。

    以下是连接参数的设置。 很抱歉、我没有嗅探器、因此无法提供日志。

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

    您好、Ryan、

    感谢您的答复!  我对此有几个问题:

    默认 basic_ble 工程是否会产生相同的行为?

    对初始项目进行了哪些更改?

    要确保 IOS 设备不记住参数、请确保在 IOS 设备的蓝牙列表中"忘记设备"。 还值得一提的是、Androids 通常具有较小的连接间隔、这可能说明您可以在 IOS 设备上扫描设备、但不能在 Android 设备上扫描设备的原因。

    此致、

    Tarek

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

    尊敬的 Tarek:

    (1) 我很长时间没有使用默认的 basic_ble 工程。

    (2) 如以上注释所述、我在 BLEAppUtil_convertGATTEvents 中添加了 GATT_BM_FREE、每分钟更改一次广播内容。

    (3)我猜 BLEAppUtil_convertGATTEvents 可能已添加 GATT_BM_FREE、因为作为外围设备、当通过中央设备或手机连接时、BLEAppUtil_convertGATTEvents 似乎触发方法= 0x7F、这似乎是一个更新连接参数的事件。 如果连接因其他蓝牙设备的干扰而中断、也将执行 GATT_BM_FREE、这可能会导致蓝牙连接参数异常?

    (4)提到的第三点是、当我让无法连接的 CC2340在一天后继续广播并连接时、似乎能够再次正常连接。

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

    您好、Ryan、

    我询问默认 basic_ble 工程的原因是为了看看默认参数是否起作用、因为这有助于我准确找出问题所在。 我有几个问题:

    您如何更改广播内容?

    您是否曾在 Android 端看到设备广告?

    您是否曾经能够连接到 iPhone、即使短暂的时间也是如此?

    能否详细说明一下第4点的含义。 连接是什么意思 运转相当正常  一天之后? 这对两个器件都是这样吗?

    另外、请确保手机上的蓝牙列表中有"忘记设备"。

    此致、

    Tarek

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

    尊敬的 Tarek:

    1.我使用 GapAdv_prepareLoadByBuffer (advDATA1、GAP_ADV_FREE_OPTION_ADV_DATA);和 GapAdv_loadByHandle (外设 AdvHandle_1、GAP_ADV_DATA_TYPE_ADV、SEND_SIZE、 advData1);更改广播内容

    2.没有,我没有看到设备广告在 Android 方面的 情况发生

    3.不,我不能连接到 iPhone 的情况发生.

    4. 我尝试连接后,仍然无法连接,我离开 CC2340运行了一天,连接似乎有所改善,但这可能只是因为当时蓝牙设备太多,造成干扰。

    与默认工程不同、我调用 HCI_EXT_SetBDADDRCmd 来在执行 App_Stack InitDoneHandler 之前更改器件 MAC 和器件名称

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

    您好、Ryan、

    感谢您回答我的问题! 这肯定是意料之外的行为、我仍在尝试找出问题。 根据您对 API 的描述、您对 API 的使用是正确的。

    如果可能,你可以让 FAE 负责你的帐户通过电子邮件发送你的代码(因为没有数据包监听器日志),以便我可以更好地了解正在发生什么?  

    我还想知道您为什么 在 BLEAppUtil_convertGATTEvents 的末尾添加了 GATT_BM_FREE  

    最后、我还想知道您是否能够使用另一个作为中央器件运行的 LaunchPad 连接到器件。

    我们希望很快就能解决这个问题!

    此致、

    Tarek

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

    尊敬的 Tarek:

    1. 对不起,由于公司 IT 部门的上传限制,我无法将代码邮寄给您。

    2. 我在 BLEAppUtil_convertGATTEvents 末尾添加了 GATT_BM_FREE、因为我在测试是否需要发布 GATT 相关方法。 当我将 CC2340开发为中央器件时、发现需要在 GATT_eventhandler 中发布该方法、因此我还测试了是否需要将其作为外设发布。

    3、 问题发生时,我尝试使用中央侧的 CC2340扫描,但仍然失败。

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

    您好、Ryan、

    是否可以尝试 使用 BLEAppUtil_invokeFunctionNoData()而不直接调用 GapAdv_prepareLoadByHandle? 我相信这可以解决您的问题。

    为此、您必须在您的文件中将函数的参数设为全局参数。 它将如下所示:

    uint8_t peripheralAdvHandle_1;
    uint16_t len;
    uint8_t *advData1;
    
    void loadingFunction();
    
    /* The function where you where initially calling GapAdv_loadByHandle */
    somefunction()
    {
        /* Some code */
        status = BLEAppUtil_invokeFunctionNoData(loadingFunction);
        /* More code */
    }
    
    loadingFunction()
    {
        GapAdv_loadByHandle(peripheralAdvHandle_1, GAP_ADV_DATA_TYPE_ADV, send_size, advData1)
    }

    我希望这能解决您的问题!

    此致、

    Tarek