在ESP32低功耗设计中,RTC内存(RTC_SLOW_MEM)与NVS(Flash)的读写时序差异显著,直接影响功耗和可靠性。RTC内存是SRAM,由RTC域供电,在Deep Sleep下保持数据,读写为纳秒级随机访问,无需擦写,但容量有限(8KB)且掉电(如完全断电)丢失。NVS是Flash上的键值存储,读写需经过Flash控制器,写操作有擦写周期(约10万次),单次写入耗时毫秒级(尤其擦除),且需考虑磨损均衡和掉电安全。关键坑点:1)Deep Sleep唤醒后,RTC内存数据保留,但若使用Light Sleep,RTC内存也保留,但需注意RTC_FAST_MEM在部分芯片上不可用;2)NVS在Deep Sleep期间不可访问,必须唤醒后操作,且写入前需调用nvs_commit,否则数据可能丢失;3)时序上,RTC内存写入需在进入睡眠前完成,且避免在中断中操作NVS(Flash操作不可重入);4)排查建议:用esp_sleep_get_wakeup_cause区分唤醒源,用RTC_DATA_ATTR声明变量,用nvs_get/set封装,并添加日志测量各操作耗时。实操中,优先将频繁更新的小数据放RTC内存,关键配置存NVS,并在写入NVS后立即commit,同时监控Flash磨损。
mcuku 阿沐 · 2026-08-27