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.

[参考译文] CC2642R:即使之前已成功完成绑定、也会在下电上电后触发修复。

Guru**** 2582905 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1017678/cc2642r-repairing-is-triggered-after-power-cycle-even-though-bonding-is-successfully-completed-previously

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

尊敬的 TI 团队:

我在配对方面遇到了一些问题、当两个器件配置为"GAPBOND_Pairing_mode_wait_for_Req"时不会自动触发

因此、我使用"GAPBondMgr_Pair"启用了配对

配对已完成、绑定也已完成。

但是、当我重新启动器件时、配对会再次触发、如果已绑定、则应该不会触发。

请 帮助我们找出根本原因并解决此问题。

在哪些情况下会擦除绑定条目以及如何验证它们。

谢谢、

Maqsood

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

    您好、Maqsood、

    我们的默认 simple_peripheral 示例应支持此功能、而无需显式调用 GAPBondMgr_Pair();即此操作应由栈处理。 具体而言、我将查看[SDK_INSTALL_DIR]/source/ti/ble5stack/host/.中的 gapbondmgr.c 此文件包含所有绑定/配对逻辑。

    [引用 userid="266752" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1017678/cc2642r-repairing-is-triggered-after-power-cycle-even-though-bonding-is-successfully-completed-previously ]但当我重新启动设备时、配对会再次触发、如果已绑定、则不应再触发。

    查看 gapbondmgr.c 时、您会发现需要调用单独的 API 来将绑定添加到 nv。 同样、这应该已经实现。

    [报价 userid="266752" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1017678/cc2642r-repairing-is-triggered-after-power-cycle-even-though-bonding-is-successfully-completed-previously "]擦除绑定条目的情形是什么以及如何验证这些条目。

    绑定条目只有在明确请求时才会被擦除(如果 GAPBondMgr_SetParameter()在传递 GAPBOND_ERASE_ALLBONDS 的情况下被调用,设置为 true)。 还有一些其他情况,如果在 gapbondmgr.c 中搜索 gapBondMgrErasebond(),则可以找到所有这些情况

    但愿这对您有所帮助。 除了 一个相关帖子中链接的资源之外、请参阅 我们的 Simplelink Academy 安全基础实验室。

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

    尊敬的 Ammar:

    感谢您的回复。

    我尝试了 gapbondmanager.c 中的几个设置、但配对仍不会被触发。 我手动触发配对已测试了是否保留绑定、但在重启后、它将再次触发配对。

    我在代码中使用以下设置:

    //配置绑定管理器
    uint8_t pairMode = GAPBOND_Pairing_mode_wait_for_Req;
    uint8_t MIPTM = true;
    uint8_t ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;//GAPBOND_IO_CAP_DISPLAY_YS_NOGAPBOND_IO_CAP_DISPLAY_ONLY;
    uint8_t 绑定= true;
    uint8_t secureConnection = GAPBOND_SECURE_CONNECTION_ALLOW_ALLOW_;
    uint8_t autoSyncWL = false;
    uint8_t eccReGenPolicy = 0;
    uint8_t KeySize = 16;
    uint8_t removeLRUBond = false;
    uint8_t bondFailAction = GAPBOND_FAIL_TERMINATE_LINK;
    uint8_t KeyDistList = GAPBOND_KEYDIST_MENCKEY | GAPBOND_KEYDIST_MIDKEY | GAPBOND_KEYDIST_MSIGN | GAPBOND_KEYDIST_SENCKEY | GAPBOND_KEYDIST_KONKEY | GAPBOND_SIGN_KOND_MSIGN;
    uint8_t eccDebugKeys = false;
    uint8_t eraseBondWhileInConn = false;

    我们是否缺少任何其他设置。

    谢谢、

    Maqsood

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

    您好、Maqsood、

    您如何确认配对未触发? 您是否正在寻找密钥条目?

    使用默认的 simple_peripheral 示例、您是否看到任何问题? 如果您尝试写入加密特征、则会触发配对。 使用 simple_profile、这是特征5。

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

    尊敬的 Ammar:

    我通过在 passcodeCB 函数中放置断点来验证。

    是的、我们已配置密钥配对。 但问题是我们在两个配对器件中都配置了"GAPBOND_Pairing_mode_wait_for_REQ"。

    是的、我们已启用"GATT_permit_AUTHEN_READ"和"GATT_permit_AUTHEN_write"。

    我将尝试使用 simple_profile 代码。

     

    谢谢、

    Maqsood

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

    尊敬的 Ammar:

    我使用的是 SDK 4.30.0054。  

    谢谢、

    Maqsood

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

    感谢 Maqsood 的跟进工作。 是的、请尝试 simple_peripheral/central 示例、因为此处已启用此功能。

    [引用 userid="266752" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1017678/cc2642r-repairing-is-triggered-after-power-cycle-even-though-bonding-is-successfully-completed-previously/3777290 #3777290"]但问题是我们在两个配对设备中都配置了"GAPBOND_Pairing_mode_wait_for_REQ"。

    其中一个设备(外围设备或中央设备)必须启动配对、因此我建议在一端进行更改 同样、您可以在此处查看 simple_peripheral/central 示例以获取指导。

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

    尊敬的 Ammar:

    感谢您提供信息。

    我对简单外设和中央示例之间的设置进行了一些比较:

    简单外设:

    //设置 GAP 绑定管理器。 有关更多信息、请参阅中的部分
    //用户指南:
    // software-dl.ti.com/.../

    //连接后不要发送配对请求;对等设备必须
    //开始配对
    uint8_t pairMode = GAPBOND_Pairing_mode_wait_for_Req;
    //使用经过身份验证的配对:需要密码。
    uint8_t MIPTM = true;
    //此设备仅具有显示功能。 因此、它将显示
    //配对期间的密码。 但是、由于默认密码是
    //使用,不需要显示任何内容。
    uint8_t ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;
    //请求绑定(存储长期密钥以便在后续时重新加密
    //不进行修复的连接)
    uint8_t 绑定= true;
    //如果绑定列表已满,是否替换最近最少使用的条目,
    //并且已绑定新设备。
    //替代方法是配对成功,但绑定失败,除非应用程序有
    //手动擦除至少一个绑定。
    uint8_t replaceBonds = false;

    GAPBondMgr_SetParameter (GAPBOND_Pairing_mode、sizeof (uint8_t)、&pairMode);
    GAPBondMgr_SetParameter (GAPBOND_MITM_protection、sizeof (uint8_t)、&MIPTM);
    GAPBondMgr_SetParameter (GAPBOND_IO_Capabilities、sizeof (uint8_t)、&ioCap);
    GAPBondMgr_SetParameter (GAPBOND_BUSIONIND_ENABLED、sizeof (uint8_t)、&bonding);
    GAPBondMgr_SetParameter (GAPBOND_LRU_Bond_replacement、sizeof (uint8_t)、replaceBonds)(replaceBonds);

    简单的中心:

    //设置 GAP 绑定管理器。 如需更多信息、请参阅 GAP 绑定管理器
    //用户指南中的部分:
    // software-dl.ti.com/.../

    //在连接后不发送配对请求;设备等待
    //应用程序开始配对
    uint8_t pairMode = default_pairing_mode;
    //不要使用经过身份验证的配对
    uint8_t MIPTM = DEFAULT_MITM_MODE;
    //这是一个只显示的设备
    uint8_t ioCap = DEFAULT_IO_Capabilities;
    //在配对过程中创建绑定
    uint8_t 绑定= default_bonding_mode;
    //如果绑定列表已满,是否替换最近最少使用的条目,
    //并且已绑定新设备。
    //替代方法是配对成功,但绑定失败,除非应用程序有
    //手动擦除至少一个绑定。
    uint8_t replaceBonds = false;

    GAPBondMgr_SetParameter (GAPBOND_Pairing_mode、sizeof (uint8_t)、&pairMode);
    GAPBondMgr_SetParameter (GAPBOND_MITM_protection、sizeof (uint8_t)、&MIPTM);
    GAPBondMgr_SetParameter (GAPBOND_IO_Capabilities、sizeof (uint8_t)、&ioCap);
    GAPBondMgr_SetParameter (GAPBOND_BUSIONIND_ENABLED、sizeof (uint8_t)、&bonding);
    GAPBondMgr_SetParameter (GAPBOND_LRU_Bond_replacement、sizeof (uint8_t)、replaceBonds)(replaceBonds);

    //缺省 GAP 配对模式
    #define DEFAULT_Pairing_MODE GAPBOND_Pairing_MODE_WAIT_TO_REQ

    //默认 MIPTM 模式(配对时需要密码或 OOB)
    #define DEFAULT_MITM_MODE 错误

    //默认绑定模式,对绑定为真
    #define default_bonding_mode true

    //缺省间隙键合 I/O 功能
    #define DEFAULT_IO_Capabilities GAPBOND_IO_CAP_DISPLAY_ONLY

    MIPTM 的两个设置似乎都不同。 以粗体突出显示

    您能否解释在上述情况下谁将触发配对。

    谢谢、

    Maqsood

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

    您好、Maqsood、

    这里的关键是 、在两种情况下、DEFAULT_Pairing_mode 都设置为 GAPBOND_Pairing_mode_wait_for_Req。 在这种情况下、在建立初始连接时不会触发配对。

    您使用的是什么 SDK? 这些设置均可在 SysConfig 文件中修改。 实际上、默认的 simple_central 已设置为启动配对。

    请查看我们 的安全基础 Simplelink Academy 实验以及 它指向的有关配对/安全的相关 BLE5-STACK 用户指南部分。

    编辑:对注释进行了更正

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

    尊敬的 Ammar:

    目前我们使用的是 SDK4.30.00.54。

    在 设置 GATT 特征值时、我们使用"GATT_permit_AUTHEN_READ"和"GATT_permit_AUTHEN_write"。

    当另一个设备尝试读取该值时、它将失败、因为需要进行身份验证、这必须触发配对。

    我们的一名现场团队成员在早期 SDK 3.20.00.68上执行了 POC ,该软件会自动触发广播。

    但使用新的 SDK 4.30.00.54时、情况并非如此。  

    我们手动触发配对、配对将延迟完成、绑定将完成、

    但是、当我们重启电源时、配对将被触发。 某种程度上、绑定条目会被保留。

    谢谢、

    Maqsood

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

    您好、Maqsood、

    您是否在默认 simple_peripheral 示例中看到预期的行为?

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

    尊敬的 Ammar:  

    很抱歉耽误你的回答。

    实际上、我们将器件配对后、假设 A 与 Raspberry Pi (中央模式)成功配对、绑定成功。

    但是、当我们与类似器件 A 和另一个 A 配对时、它不会触发配对。 当我们手动触发时、配对绑定不会发生。

    请参阅下面的说明:

    我们有一个器件、在大多数情况下、它将是一个外设。

    我们 要求此类设备在网络中相互通信。

     

     

    我们已将器件配置为与"GAPBOND_Pairing_mode_wait_for_REQ"配对。

    这可以与另一个中央设备正常配合使用、这意味着配对工作正常。

     

    但是当我们尝试在两端对相似的器件时、我们最终得到"GAPBOND_PAING_MODE_WAIT_TO_REQ"

    在这种情况下、我们将了解、如果我们启用如下所示的身份验证、它应该会触发配对、但不会触发。

     

    {ATT_UUUUUUAR_SIZE、meshService_Rx_bufferCharUUID}、

           //GAT_permit_write、

           GATT_permit_AUTHEN_WRITE、//|GATT_permit_author_write|GATT_permit_encrypt_write、

           

            0、

            MESH Service_Rx_bufferChar_value

        }、     

     

    我们使用 GAPBondMgr_Pair()手动触发了配对;如下所示,但不会进行绑定:

     

     

    if (pMsg->method == ATT_ERROR_RSP)

         {

           //此处处理错误

           if ((pMsg->msg.errorRsp.errCode = ATT_ERR_Insufficient)||

              (pMsg->msg.errorRsp.errCode =ATT_ERR_Insuffical_AUTHEN)||

                (pMsg->msg.errorRsp.errCode = ATT_ERR_Insuffical_Author)

           {

             //触发与其他节点的配对

             //bStatus_t stat = GAPBondMgr_Pair (pMsg->connHandle);

           }

     

     

    我们已经尝试了中央和外设示例,它们正在工作,但中央设备具有“GAPBOND_Pairing_mode_initiate”。 我们无法设置此设置、因为设备将尝试与其他所有设备配对。 我们只是希望器件与特定器件配对。

     

    您能不能帮助我们配对具有"GAPBOND_Pairing_mode_wait_for_REQ"的设备

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

    您好!

    [引用 userid="266752" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1017678/cc2642r-repairing-is-triggered-after-power-cycle-even-though-bonding-is-successfully-completed-previously/3815517 #3815517">我们已经尝试了中央和外设示例,它们正在工作,但中央设备具有"GAPBOND_Pairing_mode_initiate"。 我们无法设置此设置、因为设备将尝试与其他所有设备配对。 我们只是希望器件与特定器件配对。[/quot]

    由于您知道要配对的特定设备、您是否考虑启用接受/拒绝列表?

    您还可以通过不输入与未知设备的连接来管理上述内容。 如果您与无法识别的设备建立连接、应用程序应处理终端并避免与该设备配对。

    您能否提供监听器捕获您通过无线方式看到的行为?