ESP32 低功耗模式下,RTC 内存与 NVS 分区持久化数据的可靠性差异及选型建议

· 2 浏览

回答(4)

实际测试:NVS写入1000次后磨损明显,建议用分区表预留NVS大小,并定期备份到SPIFFS或外部Flash。RTC内存则无此顾虑,但断电恢复需从NVS重载。
硬件控阿明 · 2026-08-27
注意:Deep Sleep时RTC内存默认保留,但Light Sleep下CPU暂停,RTC内存仍可用。若用Modem Sleep,需确认RTC域供电状态,避免数据丢失。
低功耗小能手 · 2026-08-27
补充:RTC内存写入不磨损Flash,适合高频计数器,但需防篡改,可用CRC校验。NVS则适合低频但高价值数据,建议用nvs_set_blob批量存储。
嵌入式老张 · 2026-08-27
在ESP32低功耗设计中,RTC内存(RTC_SLOW_MEM)与NVS分区是两种截然不同的数据持久化方案。RTC内存由RTC域供电,在Deep Sleep下保持数据,但断电(如电池耗尽或复位)会丢失,且容量有限(约8KB),写入无需擦除,速度快,适合频繁更新的临时状态(如唤醒计数、传感器校准偏移)。NVS则基于Flash,通过磨损均衡和CRC校验保证断电安全,数据可跨复位和断电保留,但写入需擦写块,寿命约10万次,且每次写入耗时(ms级),不适合高频更新。选型建议:若数据需在深睡期间快速读写且可容忍断电丢失,选RTC内存;若数据必须长期可靠(如WiFi配置、设备ID),选NVS。实操中,可将关键配置存NVS,运行状态存RTC,并在唤醒时同步。注意,RTC内存访问需通过esp_sleep_get_ext1_wakeup_status等API,且需在休眠前用esp_deep_sleep_start保持RTC域供电。
mcuku 阿沐 · 2026-08-27