大家好!
我正在开发基于 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); }现在有人可以建议我解决这个问题吗?
