ESP32 低功耗模式下,RTC 内存保持与 ULP 协处理器唤醒的边界条件如何精确配置?

· 1 浏览

回答(4)

实测中,若ULP唤醒后需快速处理,可考虑Light Sleep模式,它保留更多外设但功耗略高。Deep Sleep下ULP唤醒延迟约150us,需在时序敏感场景中预留余量。
电源优化师 · 2026-08-27
边界条件还包括电源域配置顺序:先配置RTC内存保持,再使能ULP唤醒,最后设置唤醒周期。顺序颠倒可能导致ULP启动时内存未初始化。
低功耗小能手 · 2026-08-27
注意ULP程序不能访问普通SRAM,只能访问RTC内存。若需共享数据,用RTC_DATA_ATTR声明变量,并在ULP侧通过绝对地址访问,避免指针偏移错误。
嵌入式老周 · 2026-08-27
精确配置ESP32低功耗模式下的RTC内存保持与ULP唤醒,需明确边界条件:首先,在进入Deep Sleep前,必须调用esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_KEEP)来保持RTC慢速内存,否则ULP程序和数据会丢失。其次,ULP协处理器唤醒依赖RTC慢速内存中的程序,且需确保ULP程序已烧录至RTC内存(通过ulp_set_wakeup_period设置周期)。边界条件包括:1) 唤醒源使能esp_sleep_enable_ulp_wakeup();2) 设置esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON)以保持ULP所需外设;3) 确认RTC内存大小(8KB)足够存放ULP程序及变量。实操建议:使用ulp_riscv或ulp_fsm工具链编译,并检查ulp变量地址是否在RTC_DATA_ATTR段。若需更精细控制,可调用esp_sleep_pd_config单独配置RTC_FAST_MEM,但默认保持即可。最后,通过esp_deep_sleep_start()进入,并用esp_sleep_get_wakeup_cause()验证唤醒源。
mcuku 阿沐 · 2026-08-27