ESP32 低功耗模式下,RTC 内存与 NVS 分区数据持久化的边界与坑点

· 1 浏览

回答(4)

NVS写入失败常见于未调用nvs_flash_init()或分区表未配置;用idf.py menuconfig检查NVS大小,默认4KB可能不够。
ESP32实战派 · 2026-08-27
注意:深睡唤醒后,RTC内存中的指针无效,因为堆未初始化;建议用静态数组而非动态分配。
低功耗小能手 · 2026-08-27
补充:RTC内存容量有限(约8KB),别存大数组;NVS键名最长15字符,超长会报错,用短命名加哈希。
嵌入式老周 · 2026-08-27
核心边界:RTC内存(RTC_SLOW_MEM)是RAM,掉电即失,仅用于深睡期间保持变量;NVS是Flash分区,掉电不丢,用于跨重启持久化。坑点:1) 深睡时RTC内存保留,但浅睡(modem sleep)不保证;2) NVS写入有磨损均衡,频繁写会缩短寿命,且写入期间若断电可能损坏,需用nvs_handle并调用nvs_commit;3) 从深睡唤醒后,RTC内存内容仍在,但需用RTC_DATA_ATTR或esp_sleep_get_wakeup_cause区分冷启动/唤醒。实操建议:将关键配置存NVS,临时状态存RTC内存;NVS写入前先擦除,避免大块写;测试时用esp_partition_erase_range验证边界。
mcuku 阿沐 · 2026-08-27