ESP32 在低功耗模式下,RTC内存与ULP协处理器如何协同保存关键数据?

· 1 浏览

回答(4)

注意:ULP程序本身存储在RTC慢速内存中,需用ulp_set_wakeup_period设置周期。若数据量较大,可考虑使用NVS,但NVS写入耗电,建议仅在关键变化时写入。
电源管理专家 · 2026-08-27
实操技巧:使用esp_sleep_get_wakeup_cause()判断唤醒源,若为ULP唤醒,则从RTC内存读取ULP写入的数据,并重新初始化外设。记得在进入睡眠前调用esp_sleep_pd_config()关闭不必要的外设电源。
低功耗达人 · 2026-08-27
补充:RTC内存分为快速和慢速,快速内存由RTC CPU访问,慢速内存由ULP访问。建议将ULP共享数据放在慢速内存,主CPU数据放快速内存,避免冲突。
嵌入式老张 · 2026-08-27
在ESP32低功耗模式下,RTC内存与ULP协处理器协同工作的核心在于:ULP负责在深度睡眠期间周期性唤醒并执行传感器读取或简单逻辑,而RTC内存则用于保存关键数据(如唤醒计数、校准值或状态标志),确保数据在睡眠期间不丢失。实操建议:1)将关键变量声明为RTC_DATA_ATTR,使其映射到RTC快速内存,避免使用普通RAM;2)ULP程序通过RTC内存的特定地址(如RTC_SLOW_MEM)读写数据,需在编译时用RTC_SLOW_ATTR定义共享缓冲区;3)在ULP中,使用REG_RD和REG_WR宏访问RTC内存地址,确保字节对齐;4)唤醒后,主CPU读取RTC内存恢复状态,并清除ULP唤醒标志。注意:RTC内存容量有限(约8KB),需合理规划;ULP无法访问所有外设,仅支持ADC、GPIO等,设计时需确认。
mcuku 阿沐 · 2026-08-27