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.

[参考译文] CC2652R:在 doggapBondMgrReadBondRec API 之后、系统会冻结

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1173090/cc2652r-after-doging-gapbondmgrreadbondrec-api-the-system-like-to-freeze

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

我的工作方式与 GAP 绑定管理器和 LE 安全连接中的图90类似—SimpleLink CC13XX/CC26XX SDK BLE5-Stack 用户指南2.02.07.00文档

使用 simplelink_cc13xx_cc26xx_sdk_6_30_00_84。  

使用 project_zero_CC26X2R1_LAUNCHXL_tirtos7_ticlang

按如下方式修改 PROJECT_ZERO  

uint8_t peerDeviceAddr[B_ADDR_LEN];
GAP_Peer_Addr_Types_t pPeerAddrType;

gapBondRec_t pSaveBondRec;
gapBondLTK_t pLocalLtk;
gapBondLTK_t pPeerLtk;
uint8_t pPeerIRK[KEYLEN];
uint8_t pPeerSRK[KEYLEN];
uint32_t pPeerSignCount;
gapBondCharCfg_t charCfg;

空 GetBondInformation();

 案例 GAP_LINK_established 事件: 在 void ProjectZero_processGapMessage (gapEventHdr_t * pMsg)中

  memcpy (peerDeviceAddr、pPkt->devAddr、B_ADDR_LEN);
 pPeerAddrType=(GAP_Peer_Addr_Types_t)(pPKT->devAddrType & MASK_ADDRTYPE_ID);

案例 GAPBOND_Pairing_State_Bond_Saved:  In void ProjectZero_processPairState (pzPairStateData_t * pPairData)
if (status ==成功)

LOG_info0 ("债券储蓄成功");

 GetBondInformation();

空 GetBondInformation()

uint8_t readStatus=故障;
pPeerSignCount = 0;

int i;


readStatus = gapBondMgrReadBondRec (pPeerAddrType、
peerDeviceAddr、
pSaveBondRec (&P)、
pLocalLtk (&P)、
&pPeerLtk,
pPeerIRK、
pPeerSRK、
pPeerSignCount、
charCfg);
if (readStatus =成功)

log_info0 ("gapBondMgrReadBondRec 成功\n");
#if 0
log_info0("Addr :");
for (i=0;i < 6;i++)

LOG_Info1 ("0x%x "、pSaveBondRec.addr[i]);

log_info0("addrType :");
log_info1 ("%d "、pSaveBondRec.addrType);

log_info0("stateFlags:");
log_info1 ("%d "、pSaveBondRec.stateFlags);

LOG_info0("local LTK :");
for (i=0;i < KEYLEN;i++)

LOG_Info1 ("0x%x "、pLocalLtk.LTK[i]);

log_info1 (" DIV:0x%x "、pLocalLtk.div);
log_info1 (" keysize:0x%x "、pLocalLtk.keysize);

log_info0("random:");
for (i=0;i < 8;i++)

LOG_Info1 ("0x%x "、pLocalLtk.rand[i]);

log_info0("peer LTK:");
for (i=0;i < KEYLEN;i++)

LOG_Info1 ("0x%x "、pPeerLtk.LTK[i]);

log_info1 (" DIV:0x%x "、pPeerLtk.div);
log_info1 (" keysize:0x%x "、pPeerLtk.keysize);

log_info0("random:");
for (i=0;i < 8;i++)

LOG_Info1 ("0x%x "、pPeerLtk.rand[i]);

log_info0("peer irk :");
for (i=0;i < KEYLEN;i++)

LOG_Info1 ("0x%x "、pPeerIRK[i]);

log_info0 ("对等 SRK:");
for (i=0;i < KEYLEN;i++)

LOG_Info1 ("0x%x "、pPeerSRK[i]);

log_info1 (" attattHandle:0x%04x "、charCfg.attattHandle);
log_info1 ("值:0x%02x "、charCfg.value);
#endif

}否则{
log_info0 ("gapBondMgrReadBondRec Failed \n");

 绑定后、 我的手机将无法连接。  

当多个低功耗蓝牙器件作为外设使用 gapBondMgrReadBondRec 和 gapBondMgrImportBond API 时、如何实现它以保持稳定。  我正在处理一个文件。   您能检查一下吗?  

 e2e.ti.com/.../project_5F00_zero_5F00_CC26X2R1_5F00_LAUNCHXL_5F00_tirtos7_5F00_ticlang.zip

此致、

否  

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

    您好、Noh、

    感谢您的参与。

    我建议分步测试代码、以确定问题。

    1. 未修改的示例是否按预期工作?
    2. gapBondMgrReadBondRec()函数是否按预期工作?
    3. 等等

    遇到问题时、请尝试使用调试器( 此处提供了调试指南)来确定是否出现错误。

    最后但同样重要的是、在查看您的代码时、我看到您正在设置器件的地址。 我想知道是否可以在以下方面改进:

    • 您可以使用 SysConfig 设置器件的地址(请参阅 BLE >常规配置>地址模式)
    • 所选地址应满足蓝牙核心规范版本5.3 |第6卷 B 部分、§1.3。 否则其他器件将无法正常工作
    • 如果您擦除器件上的绑定(通常在重新刷写器件时)、请确保同时擦除电话上的绑定、否则可能会在电话上触发某些安全机制

    注意:对于将来的请求、请确保在共享源代码时使用"插入">"代码"。 这简化了对代码段的回顾。

    我希望这将有所帮助、

    此致、

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

    你(们)好  

    我的测试方案如下所示

    将耳机与电话绑定 ,然后尝试连接 电话。

     我在 UART 中捕获日志。   

     您可以查看附加的文件。 有3个文件。  

     BLE_BON_CONNECT_OK、BLE_BON_CONNECT_FAIL、  

     project_zero_CC26X2R1_LAUNCHXL_tirtos7_ticlang.zip

    在源代码中删除 getBondInformation 函数时、BLE_BUK_CONNECT_ok 为日志  

    当源代码中存在 getBondInformation 函数时、BLE_BUK_CONNECT_FAIL 为日志

    是 BLE_Bond_connect_ok 和 BLE_Bond_FAIL 之间的差异。

    BLE_BON_CONNECT_OK 中   

    #000028 [ 40.680]信息:(project_zero.c:1562)配对已启动
    #000029 [ 40.680]信息:(project_zero.c:1562)配对已启动
    #000030 [40.935]信息:(project_zero.c:1620) BondMgr 请求的密码。 我们正在显示密码123456
    #000031 [ 46.699 ]信息:(project_zero.c:1822)已更新5C:CB:99:A1:86:55的参数、间隔:35.0ms、延迟:0、超时:2000ms
    #000032 [50.818]信息:(project_zero.c:1568)配对成功
    #000033 [50.818]信息:(project_zero.c:1591)债券储蓄成功
    #000034 [ 51.618 ] INFO:(project_zero.c:1822)已更新5C:CB:99:A1:86:55的参数、间隔:7.50ms、延迟:0、超时:5000ms <GAP_LINK_PARAM_UPDATE_EVENT.
    #000035 [52.429] INFO:(project_zero.c:1822)已更新5C:CB:99:A1:86:55的参数、间隔:35.0ms、延迟:0、超时:2000ms  

    <GAP_LINK_PARAM_UPDATE_EVENT.

    BLE_CONNECT_FAIL 中

    #000028 [ 406.740 ]信息:(project_zero.c:1562)配对已启动
    #000029 [ 406.740 ]信息:(project_zero.c:1562)配对已启动
    #000030 [ 407.030 ]信息:(project_zero.c:1620) BondMgr 请求的密码。 我们正在显示密码123456
    #000031 [412.795] INFO:(project_zero.c:1822)已更新5C:CB:99:A1:86:55的参数、间隔:35.0ms、延迟:0、超时:2000ms
    #000032 [ 415.023 ]信息:(project_zero.c:1568)配对成功
    #000033 [ 415.023 ]信息:(project_zero.c:1591)绑定保存成功
    #000034 [ 415.025 ]信息:(project_zero.c:1481) gapBond 成功

    BLE_Bond 保存成功后、CONNECT_FAIL 没有任何 GAP_LINK_PARAM_UPDATE_EVENT。   我不知道为什么 BLE 堆栈无法发送 它。

    然后 、我在编辑的部分中添加了如下注释。  

    //插入代码-start
    GetBondInformation();
    //插入代码-结束

    您能检查我的问题吗?   

    或者、如果您有 gapBondMgrReadBondRec 和  HCI_EXT_SetBDADDRCmd 和 gapBondMgrImportBond 的示例。  

    我想明白了。  

     

    e2e.ti.com/.../7573.project_5F00_zero_5F00_CC26X2R1_5F00_LAUNCHXL_5F00_tirtos7_5F00_ticlang.zip

    e2e.ti.com/.../ble_5F00_bond_5F00_connect_5F00_fail.zipe2e.ti.com/.../ble_5F00_bond_5F00_connect_5F00_ok.zip

     

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

    您好!

    感谢您提供的详细信息。

    要清除、两个日志文件(即 ble_bond_connect_ok 和 ble_bond_connect_fail)都显示绑定成功。

    我可以发现两个日志之间的唯一区别是、如您所述、如果您调用的日志为"正常"、则会收到两个附加连接参数更新:

    [引用 userid="543528" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1173090/cc2652r-after-doging-gapbondmgrreadbondrec-api-the-system-like-to-freeze/4416271 #4416271"]

    #000034 [ 51.618 ] INFO:(project_zero.c:1822)已更新5C:CB:99:A1:86:55的参数、间隔:7.50ms、延迟:0、超时:5000ms <GAP_LINK_PARAM_UPDATE_EVENT.
    #000035 [52.429] INFO:(project_zero.c:1822)已更新5C:CB:99:A1:86:55的参数、间隔:35.0ms、延迟:0、超时:2000ms  

    <GAP_LINK_PARAM_UPDATE_EVENT.

    [/报价]

    但是、这两个连接参数更新对稍后使用的连接参数没有影响(我是说、第二次更新基本上会将间隔设置回:35.0ms、延迟:0、超时:2000ms、如#000031所设置)。

    行为差异可能来自在某些情况下提前发送连接参数更新的稍微不同的时序。

    如果您没有收到额外的"GAP_LINK_PARAM_UPDATE_EVENT"、您可以考虑再发送一个连接参数更新。

    在所有情况下、我都要关闭此线程、因为绑定没有问题。

    此致、