You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32-C3 BLE Mesh快速配网重启后反复复位问题求助

ESP32-C3 BLE Mesh 持久化配置复位崩溃问题

环境

  • 硬件:ESP32-C3芯片、esp32-c3-devkitm-1开发板
  • 软件:ESP-IDF 4.4.2
  • 项目:基于BLE Mesh快速配网服务器示例,新增NVS闪存持久化存储BLE Mesh入网配置功能

问题现象

  • 节点通过nRF Mesh移动App成功入网后功能正常
  • 复位ESP32后尝试重新连接,设备立即崩溃复位,无法再次通过nRF Mesh App完成配网
  • 仅能通过按键触发esp_ble_mesh_node_local_reset()清除NVS闪存中的配置,才能重新执行配网流程

关键错误日志

E (404909) BT_OSI: osi_alarm_new alarm_cbs exhausted

assert failed: hash_map_set hash_map.c:129 (data != NULL)
Core 0 register dump:
MEPC : 0x403816be RA : 0x40389470 SP : 0x3fcb3490 GP : 0x3fc91000
TP : 0x3fc80d9c T0 : 0x37363534 T1 : 0x7271706f T2 : 0x33323130
S0/FP : 0x0000008e S1 : 0x00000001 A0 : 0x3fcb34cc A1 : 0x3fc928c1
A2 : 0x00000001 A3 : 0x00000029 A4 : 0x00000001 A5 : 0x3fc9a000
A6 : 0x7a797877 A7 : 0x76757473 S2 : 0x00000009 S3 : 0x3fcb35d9
S4 : 0x3fc928c0 S5 : 0x3fcb38bc S6 : 0x00000000 S7 : 0x00000000
S8 : 0x00000000 S9 : 0x00000000 S10 : 0x00000000 S11 : 0x00000000
T3 : 0x6e6d6c6b T4 : 0x6a696867 T5 : 0x66656463 T6 : 0x62613938
MSTATUS : 0x00001881 MTVEC : 0x40380001 MCAUSE : 0x00000007 MTVAL : 0x00000000
MHARTID : 0x00000000

Stack memory:
3fcb3490: 0x00000000 0x3fcb38bc 0x3c0f6780 0x4038f1e2 0x3fc93118 0x3c0f6780 0x3fc933d4 0x3c0f6802
3fcb34b0: 0x3fc93128 0x3fcb34c4 0x3fc9312c 0x3c0e4028 0x3fc928c0 0x00393231 0x3fc9dce4 0x65737361
3fcb34d0: 0x66207472 0x656c6961 0x68203a64 0x5f687361 0x5f70616d 0x20746573 0x68736168 0x70616d5f
...
ELF file SHA256: 19cc199fd03b8d83

Rebooting...
ESP-ROM:esp32c3-api1-20210207
Build:Feb 7 2021
rst:0x3 (RTC_SW_SYS_RST),boot:0xe (SPI_FAST_FLASH_BOOT)
Saved PC:0x403812e0
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd5810,len:0x16b4
load:0x403cc710,len:0x930
load:0x403ce710,len:0x2d28
entry 0x403cc710
I (35) boot: ESP-IDF 4.4.2 2nd stage bootloader
...
I (909) Mesh: init Bluetooth Mesh.
W (1639) BLE_MESH: bt_mesh_proxy_server_prov_disable, Already
I (1649) Mesh Prov: ESP_BLE_MESH_NODE_PROV_COMPLETE_EVT
I (1649) Prov cmplt: net_index: 0x0000, addr: 0x007e
I (1649) Prov cmplt: flags: 0x0000, iv_index: 0x00000000
I (1659) Mesh Prov: ESP_BLE_MESH_PROV_REGISTER_COMP_EVT, Error Code: 0
I (1669) Mesh Prov: ESP_BLE_MESH_NODE_SET_UNPROV_DEV_NAME_COMP_EVT, Error Code: 0

E (1679) BT_OSI: osi_alarm_new alarm_cbs exhausted
E (1679) BLE_MESH: Alarm not created
W (1689) BLE_MESH: bt_mesh_prov_enable, Already
I (1689) Mesh Prov: ESP_BLE_MESH_NODE_PROV_ENABLE_COMP_EVT, Error Code: -120

问题分析与解决建议

核心问题定位

日志中osi_alarm_new alarm_cbs exhausted和hash_map_set断言失败是关键,说明从NVS加载配置后,BLE Mesh栈初始化时耗尽了OSI Alarm资源,导致哈希表操作异常,最终触发设备复位。

解决方向

  1. 校验NVS存储的配置完整性

    • 确保存储到NVS的Mesh配置包含所有必要参数(网络索引、节点地址、IV索引、网络密钥、应用密钥等),避免加载不完整数据导致栈初始化异常
    • 仅在配网完成事件(ESP_BLE_MESH_NODE_PROV_COMPLETE_EVT)触发后,确认Mesh状态稳定时,才将配置写入NVS
  2. 调整Mesh初始化与配置加载顺序

    • 先完成BLE Mesh栈的基础初始化,再从NVS加载配置,避免未初始化的栈加载配置导致资源泄漏
    • 加载配置后,判断设备是否已处于配网状态,若已配网则跳过配网使能流程(日志中bt_mesh_prov_enable, Already说明重复触发了配网使能)
  3. 修复OSI Alarm资源泄漏

    • ESP-IDF 4.4.2存在BLE Mesh栈OSI Alarm资源未正确释放的已知问题,建议升级到ESP-IDF v4.4.5或更高补丁版本
    • 检查自定义NVS存储逻辑,避免重复注册Alarm或未正确释放相关资源
  4. 优化配网状态判断逻辑

    • 复位后加载NVS配置成功后,直接进入已配网节点的正常运行模式,无需再次启用配网代理,避免配网逻辑冲突

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 12:59:13