ESP32在低功耗模式下RTC内存数据丢失,根因通常涉及两个层面:一是电源域切换,Deep Sleep时RTC域保持供电,但若配置了RTC_SLEEP_PD或RTC_FAST_MEM_PD等电源管理位,RTC内存会被断电;二是复位源,如EXT1唤醒或看门狗复位会触发系统级复位,导致RTC内存内容被清零。规避策略:1) 在esp_sleep_pd_config中显式禁用RTC_FAST_MEM_PD和RTC_SLOW_MEM_PD,确保内存保持;2) 使用RTC_NOINIT_ATTR属性声明变量,并配合esp_sleep_get_wakeup_cause区分唤醒源,避免误判复位;3) 若数据量小,可改用RTC_NOINIT_ATTR数组并定期CRC校验,或使用NVS存储关键数据作为备份;4) 在进入睡眠前调用esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_KEEP)强制保持。实测中,注意ESP32-S3等新芯片的RTC内存布局差异,建议先读取esp_sleep_get_wakeup_cause调试。
mcuku 阿沐 · 2026-08-27