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:CC2540绑定问题

Guru**** 2521600 points
Other Parts Discussed in Thread: CC2540

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/716940/cc2540-cc2540-bonding-problem

器件型号:CC2540

大家好!

我正在开发基于 CC2540 SoC 的器件、我希望从 CC2540中将其用作中央设备、并且我在绑定方面遇到了问题。 整个过程如下所示:

1-主机计算机的用户向特定的 BLE 设备发送连接请求

2 - CC2540使用 GAPBOND_ERASE_ALLBONDS 参数删除所有绑定的器件、然后我的应用在设置 GAPBOND_ERASE_ALLBONDS 参数后在闪存上写入内容

3 -然后、CC2540尝试通过调用 GPCentralRole_EstablishLink 函数来建立 BLE 链路

4 -然后、BLE 连接的另一侧 注意到连接请求、并打开规格 LED

5 -然后对等设备交换绑定所需的密钥(我在监听器中看到此过程)

然后、我在 CC2540中的应用收到 GAPBOND_Pairing_State_Complete 事件、并打开指示链路已建立的 LED 指示灯

7 -连接保持继续、设备可以使用保存的密钥重新连接到 eachother

注意:如果主机用户发送断开连接请求、我们会再次使用 GAPBOND_ERASE_ALLBONDS 参数删除所有绑定的器件、然后在设置 GAPBOND_ERASE_ALLBONDS 参数后、我的应用在闪存上写入内容。

在正常状态下、步骤1-7工作完成、所有工作正常。 但是、在用户向 CC2540发送连接和断开请求的某个时间(随机、有时为2周、有时为一天)后、会发生问题。 问题是、步骤1-5正常工作、但我在 CC2540中的应用程序未收到 GAPBOND_PAING_STATE_COMPLETE 事件、而且剂量不会通过 BLE 发送任何数据包。 此外、20秒后、外设器件会超时、然后开始广播、然后 CC2540和外设会彼此自动连接。 如果出现此问题、则每次在下次连接时都会发生、直到我刷新 CC2540、然后它正常工作、直到下次出现此问题。  

这个问题对我来说是很奇怪的,我不知道如何解决这个问题。 在下面、我输入了一些代码来帮助解决这个问题:

这是第2步中用于删除所有绑定的代码 I execute。

void remove_all_bond_devices (void)
{
uint8 * bonding_addresses;
uint8 idx;
uint8 cnt=0;
GAPBondMgr_GetParameter (GAPBOND_bond_count、&cnt);
bonding_addresses =(uint8 *) osal_mem_Mgr (cnt * BOND_galloc
;gapBONBADDR_b_bandelt =(UAP8
);bond_bond_band_gall_gap_band_eset_addresses =(UAP0);gap_bond_band_band_gap_gap_gap_bondrand_delt (Ub

当我收到 NL_UPDATE_EV 时、我执行以下代码:

void name_list_update (void)
{
osal_SNV_write (name_list_SNV_ID、sizeof (bonding_fap_t)* gap_bonding_MAX、bond_fap_list);
} 

现在有人可以建议我解决这个问题吗?

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

    在下面的屏幕截图中、您可以看到断开和自动连接序列(froum 不允许我上传扩展名为.pcpang 的 ble dump)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否有其他格式的监听器日志?

    您能否检查您的应用程序是否曾使用堆栈中的不同事件进行回调?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有基于 CC2540的监听器、我将.pcapng 扩展名更改为.psd 进行上传、如果可以、请将.psd 更改为.pcapng 并查看它。
    thankse2e.ti.com/.../1_5F00_First_5F00_Connection_5F00_Always_5F00_Faild.psd

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我的朋友、
    我已经将 GAP_Bondings_MAX 设置为1、正如我知道何时有 BLE 连接可用并且我使用 GAPBOND_ERASE_ALLBONDS 参数调用 GAPBondMgr_SetParameter 函数、TI 将延迟从闪存擦除绑定的对等器、直到当前链接终止。 正如我所说的、当主机用户向 CC2540发送连接请求时、我将调用 remove_all_conded_devices 函数、然后尝试连接到新的对等设备。 在此过程中是否可能发生冲突并引发问题?

    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否尝试在链路终止状态下移动 GAPBOND_ERASE_ALLBONDS、并查看这是否解决了问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您是否已解决问题? 如果是、那么我想关闭这个线程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我将 GAP_Bondings_MAX 变量更改为2、然后该问题不再发生。

    感谢你的帮助