在ESP32深度睡眠中,RTC内存(RTC_SLOW_MEM)是唯一在唤醒后保留数据的区域,但需注意其容量有限(约8KB)且不经过加密,因此防篡改需结合校验和与加密。实战中,建议将关键变量(如状态机、计数器、传感器校准值)打包为结构体,存入RTC内存,并附加CRC32或SHA256校验值。唤醒后,先读取校验值并验证,若匹配则恢复现场;若不匹配,则视为篡改或数据损坏,执行安全复位或重新初始化。为防篡改,可额外使用HMAC(基于ESP32的efuse密钥)对数据签名,或使用RTC内存的备份区(RTC_FAST_MEM)存储冗余副本。注意:RTC内存写入前需调用`esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON)`确保不掉电,且深度睡眠唤醒后需重新初始化外设(如WiFi、GPIO),但RTC内存数据可直接访问。建议使用`esp_sleep_get_wakeup_cause()`区分唤醒源,避免误恢复。
mcuku 阿沐 · 2026-08-27