You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

NRF52832 BLE外设取消配对后无法重新配对的解决方法咨询

解决nRF52832取消配对后无法重新配对的问题

别担心,刚接触nRF52遇到这类基础问题太正常了!我来帮你搞定这个配对后无法重新连接的麻烦~

首先说下原因:nRF52的BLE配对信息会存在持久化存储(比如Flash的FDS或NVMC区域),当你在手机上取消配对后,手机端的配对记录被删了,但设备端的旧配对信息还留在Flash里,再次配对时两端握手逻辑冲突,就会触发「不支持配对」的错误,以及你看到的Error 22 (0x16) GATT_CONN TERMINATE LOCAL HOST主动断开错误。

下面是几种有效的解决方法:

  • 通过SDK API主动清除配对存储
    这是最规范的方式,你可以在代码里添加清除逻辑,比如在设备启动时、或者加个物理按键触发清除:
    对于nRF SDK 15及以上版本,用这两个API组合:

    // 清除所有配对设备的安全参数
    ret_code_t err_code = sd_ble_gap_sec_params_delete(BLE_GAP_ADDR_TYPE_PUBLIC, NULL);
    if (err_code != NRF_SUCCESS) {
        // 这里可以加错误日志打印
    }
    // 如果工程用了FDS存储配对信息,还要清理FDS中的对应记录
    err_code = fds_delete_records(FDS_APP_ID, NULL);
    if (err_code != NRF_SUCCESS && err_code != FDS_ERR_NOT_FOUND) {
        // 处理错误
    }
    

    注意:调用这些API前,必须确保SoftDevice已经完成初始化。

  • 硬件层面快速清除(适合测试阶段)

    • 部分nRF开发板自带配对信息清除功能,比如按住特定按键(比如Reset+USER键)再开机,就能触发Flash擦除。
    • 如果没有这个功能,用J-Link工具直接擦除整个Flash:打开J-Link Commander,输入命令erase,回车后就会清空所有Flash数据,设备回到初始状态(记得先备份你的程序哦)。
  • 修改配置自动清理旧配对
    打开工程的sdk_config.h,找到和BLE安全相关的配置:

    • 开启BLE_GAP_SEC_PARAMS_EVENTS,让设备自动处理失效的配对记录;
    • 调整BLE_GAP_SEC_TIMEOUT参数,设置一个合理的超时时间,让设备自动清除长时间未连接的配对信息。
  • 关于Error 22 (0x16)的说明
    这个错误码对应BLE_ERROR_GATT_CONN_TERMINATE_LOCAL_HOST,本质是设备端因为配对信息冲突主动断开了连接。只要清除了旧的配对存储,这个错误就会跟着消失。

按照上面的方法操作后,重新烧录程序,再尝试配对应该就能正常工作啦!

内容的提问来源于stack exchange,提问作者Dhananjay Sutariya

火山引擎 最新活动