TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2642R-Q1: 在蓝牙配对完成后使用gapBondMgrReadBondRec函数,在断开蓝牙后卡死。

Part Number:CC2642R-Q1

1.在使用蓝牙例程过程,打开配对绑定功能,在配对完成后SP_PAIR_STATE_EVT事件下case GAPBOND_PAIRING_STATE_BOND_SAVED里面使用gapBondMgrReadBondRec()这个函数,在断开蓝牙连接后出现卡死状况,上电重启程序也不能运行,只能重新刷写程序。

2.使用gapBondMgrReadBondRec函数的方法是从C:\ti\simplelink_cc13xx_cc26xx_sdk_7_10_01_24\docs\ble5stack\ble_user_guide 的 GAP Bond Manager and LE Secure Connections章节学习的。

3.请问这种情况怎么解决?

Yolande Wang:

您好,

遇到在使用 `gapBondMgrReadBondRec()` 函数后造成系统卡死的情况,可能是由于在特定的事件处理中进行了不适当的操作,或者是资源管理(如内存)上的问题。以下是一些建议和步骤来解决这个问题:

1. 确保你按照 TI 文档中的指导正确使用 `gapBondMgrReadBondRec()` 函数。包括函数调用的上下文、传入的参数以及对返回值的处理。

2. 进行调试和记录一些日志并提供给我们,这样我们也能更快定位问题。 – 在调用 `gapBondMgrReadBondRec()` 之前和之后添加日志打印,观察程序的行为和变量的状态。 – 使用调试工具逐步执行,查看在哪一步操作后程序开始出现异常行为。

,

Yolande Wang:

这个函数是从 NV 提取绑定信息,为了成功提取绑定信息,应用程序需要输入对等设备的地址类型和对等设备的地址。建立链接时,这些信息将从 BLE5-Stack 提供给应用程序。

我按照  BLE5 User guide 中的描述导入之前读取的 Bonding 时(如下所示),可以看到导入成功

// Parameters needed for storing bonding information.gapBondRec_t pSavedBondRec1;gapBondLTK_t pLocalLtk1;gapBondLTK_t pPeerLtk1;uint8_t pPeerIRK1[KEYLEN];uint8_t pPeerSRK1[KEYLEN];uint32_t pPeerSignCount1;gapBondCharCfg_t charCfg1;uint8_t readStatus = FAILURE;readStatus = gapBondMgrReadBondRec(PEER_ADDRTYPE_RANDOM_OR_RANDOM_ID,pSavedBondRec.addr,&pSavedBondRec1,&pLocalLtk1,&pPeerLtk1,pPeerIRK1,pPeerSRK1,pPeerSignCount1,&charCfg1);if (readStatus == SUCCESS){// If read success, then export the data// Here we will print it out for later use.// For the print, we added the following defines// Please consider your own example and modify as needed#define SP_ROW_DEBUG_BondLog(TBM_ROW_APP + 9)#define SP_ROW_DEBUG_PeerAddr (TBM_ROW_APP + 10)#define SP_ROW_DEBUG_LocalLTK (TBM_ROW_APP + 16)#define SP_ROW_DEBUG_PeerIRK(TBM_ROW_APP + 40)#define SP_ROW_DEBUG_PeerSRK(TBM_ROW_APP + 56)Display_printf(dispHandle, SP_ROW_DEBUG_PeerAddr, 0,"Peer Device Addr = [0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x];",pSavedBondRec1.addr[0],pSavedBondRec1.addr[1],pSavedBondRec1.addr[2],pSavedBondRec1.addr[3],pSavedBondRec1.addr[4],pSavedBondRec1.addr[5]);Display_printf(dispHandle, SP_ROW_DEBUG_PeerAddr+1, 0, "Peer Device AddrType = 0x%02x; stateFlag = 0x%02x;",pSavedBondRec1.addrType,pSavedBondRec1.stateFlags);Display_printf(dispHandle, SP_ROW_DEBUG_PeerAddr+2, 0, "Local Device eDiv = 0x%02x; keySize = 0x%02x", pLocalLtk1.div, pLocalLtk1.keySize);Display_printf(dispHandle, SP_ROW_DEBUG_PeerAddr+3, 0, "peer Device SignCount = 0x%08x;", pPeerSignCount1);for (i = 0; i < KEYLEN; i++){Display_printf(dispHandle, SP_ROW_DEBUG_LocalLTK+i, 0, "Local Device LTK[%d]= 0x%02x;", i, pLocalLtk1.LTK[i]);Display_printf(dispHandle, SP_ROW_DEBUG_PeerIRK+i, 0, "Peer Device IRK[%d]= 0x%02x;", i, pPeerIRK1[i]);Display_printf(dispHandle, SP_ROW_DEBUG_PeerSRK+i, 0, "Peer Device SRK[%d]= 0x%02x;", i, pPeerSRK1[i]);}for (i = 0; i < B_RANDOM_NUM_SIZE; i++){Display_printf(dispHandle, SP_ROW_DEBUG_LocalLTK+16+i, 0, "Local Device rand[%d]= 0x%02x;", i, pLocalLtk1.rand[i]);}Display_printf(dispHandle, SP_ROW_DEBUG_PeerSRK+16+1, 0, "Charcfg attrHandle = 0x%04x; value = 0x%02x", charCfg1.attrHandle, charCfg1.value);}

,

?? ?:

我这边也是导入成功,有log打印出来,但是在在蓝牙断开后会死机,如果不用这个函数则一切正常,这边您方便的化能不能把你加了上述函数的代码工程分享一下,我这边做个对比,如果不方便就算了 ,十分感谢您的帮助。

,

Yolande Wang:

您好,

?? ? 说:导入成功,有log打印出来,但是在在蓝牙断开后会死机,如果不用这个函数则一切正常

建议逐步测试一下代码。

根据您的描述 gapBondMgrReadBondRec() 函数是按预期工作的。

尝试使用调试器(可在此处获取调试指南)来确定如何引发错误。

或者,您把文件贴上来,我们会对您的代码进行检查。

,

Yolande Wang:

您的问题解决了吗?

,

?? ?:

您好,问题已经解决了,是示例有问题,你们的技术支持已给出了解决办法,感谢您的帮助  谢谢。

,

Yolande Wang:

不客气,问题解决了就好。

,

Yolande Wang:

您使用的是哪个示例,最终如何解决的,可以分享一下吗?

,

?? ?:

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1326000/cc2642r-calling-gapbondmgrreadbondrec-causes-hwi-exception-at-next-disconnection

在这个链接里已经有解决方法

,

Yolande Wang:

好的,感谢分享。

赞(0)
未经允许不得转载:TI中文支持网 » CC2642R-Q1: 在蓝牙配对完成后使用gapBondMgrReadBondRec函数,在断开蓝牙后卡死。
分享到: 更多 (0)