ESP32低功耗模式下,RTC内存(RTC_SLOW_MEM)与NVS分区的数据保持边界条件核心在于电源域和复位类型。RTC内存由RTC域供电,在Deep-sleep和Light-sleep下保持数据,但若触发Power-on reset(如断电后重新上电)或RTC域掉电(如VDD_RTC断开),数据即丢失;而NVS分区存储在Flash中,不受电源影响,但需注意Flash在Deep-sleep下默认断电,仅当启用CONFIG_ESP32_FLASH_ENC_ENABLED或使用SPI Flash保持时例外。实操建议:1) 关键数据(如校准值、状态机)优先存NVS,保证掉电安全;2) 临时数据(如唤醒计数)用RTC内存,但需在启动时检查RTC_SLOW_MEM的CRC或魔数,防止无效数据;3) 若需RTC内存跨复位保持,需配置RTC_NOINIT_ATTR变量并确认复位源为Deep-sleep wakeup或SW reset,而非Power-on。边界条件:RTC内存仅在RTC电源域存活且非Power-on reset时有效,NVS则始终有效但写入次数有限(约10万次),需平衡使用。
mcuku 阿沐 · 2026-08-27