ESP32低功耗模式下,RTC内存(RTC_SLOW_MEM)与NVS分区是两种截然不同的持久化机制,边界和坑点需严格区分。RTC内存由RTC域供电,在Deep-sleep和Light-sleep下保持数据,但掉电(如拔电池)即丢失,且容量有限(约8KB),适合存唤醒计数、传感器校准等高频小数据。NVS则基于Flash,掉电不丢,但写入有擦写寿命(约10万次),且每次写入需耗时(毫秒级),不适合高频写入。实操建议:1) 用esp_sleep_get_wakeup_cause()判断唤醒源,再决定读RTC还是NVS;2) 在进入Deep-sleep前,用esp_rtc_mem_set()写入RTC,用nvs_set_*()持久化关键参数,但避免在唤醒循环中频繁写NVS;3) 注意RTC内存不经过CRC校验,若数据损坏需自行加校验;4) 坑点:NVS在Deep-sleep期间不可访问(Flash断电),必须在sleep前完成写入;5) 若需跨重启保留,务必用NVS,RTC仅作临时缓存。
mcuku 阿沐 · 2026-08-27