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.

[参考译文] CC2340R5:如何确保键合信息未损坏?

Guru**** 2534260 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1566651/cc2340r5-how-to-make-sure-bond-information-is-not-corrupted

器件型号:CC2340R5


工具/软件:

您好论坛、

 我正在从事一个项目、在该项目中、我需要在从关断状态唤醒时或在运行时任意唤醒时了解绑定信息、并且还需要实施一种机制来检测损坏。 您能为此提出任何 API 或基本代码吗?

此外,这个 gapbondmgr 文档有一个 API 'gapBondMgrReadBondRec ()',用于读取绑定信息,但我没有在 SDK 9.11.00.08 中看到这个 API。 此外、该 API 的描述不能明确说明如果存在多个债券信息、会返回哪个债券记录? 例如,如果有 3 债券信息,我要读第一和第三或可能是所有的,如何做到这一点?

此致

Vaibhav

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

    您好!

    您是正确的、  最新 SDK 中的 gapBondMgrReadBondRec 已替换为 GapBondMgr_readBondFromNV 函数。  传递给此函数的 gapBondNvRecord_t 对象将填充绑定的值。 两个功能具有相同的用途。 该函数的文档目前存在一个错误、未显示该错误、但您仍可以在  C:\ti\simplelink_lowpower_f3_sdk_9_11_00_18\source\ti\ble\host\gapbondmgr\gapbondmgr.h 文件中读取该错误:

    /**
     * @fn      GapBondMgr_readBondFromNV
     *
     * @brief   Read bond record from NV
     *
     * @param   mode - whether to read by index (GAPBOND_READ_BY_IDX) or by address (GAPBOND_READ_BY_ADDR)
     * @param   pIdentifier - pointer to bond index (0 - GAP_BONDINGS_MAX) or device address (6 bytes BDADDR)
     * @param   addrType - address type, only relevant if mode = GAPBOND_READ_BY_ADDR
     * @output  pBondRecord - pointer to output, must be allocated by the caller
     *
     * @return  SUCCESS if bond was read successfully
     *          bleGAPNotFound if there is no bond record
     *          bleInvalidRange if the bond index is out of range or the mode is invalid
     *          bleGAPBondItemNotFound if an item is not found in NV
     */

    因此、您可以从索引或从绑定的设备的地址中选择绑定。

    我认为我们不支持任何在 NVS 中检测腐败的功能。 您能否详细介绍一下 NVS 腐败的威胁模型或使用案例?

    此致、
    Lea

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

    您好、Maxence、

    这里的用例是钥匙扣、从之前基于 CC26xx 的开发经验中、我们观察到 NVS 损坏问题和债券信息丢失。 为了降低在低电压条件下发生意外复位的风险、我们实现了电池电压监控。 我们还在评估保护 NVS 完整性和保留绑定信息的策略。 您能否提出一些在预防 NVS 腐败和债券损失方面所看到的有效措施或最佳做法?

    此致

    Vaibhav

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

    您好!

    如果在 NVS 写入过程中发生 NVS 写入、则可能会在断电时发生 NVS 损坏。 但我们不知道任何 NVS 损坏问题时,失去电源和不使用 NVS,或当失去电源和做 NVS 读取。

    为了 100%确保 NVS 写入正确并且不会破坏任何内容、您可以 在 NVS_WRITE 函数的参数中设置 NVS_WRITE_POS_VERIFY 标志。 该标志在 NVS 写入之后添加 NVS 读取、以确保写入正确。

    您的代码如下所示:

    if (NVS_write(nvsHandle, (uint32_t)FLASH_ADDRESS(page, offset), pBuf, len, NVS_WRITE_POST_VERIFY) != NVS_STATUS_SUCCESS) 
    {
        // Handle write failure
        // Log or implement error handling
        NVS_close(nvsHandle);
        return;
    }
    
    // Continue code

    此致、
    Lea