ESP32低功耗模式下,RTC内存(RTC_SLOW_MEM)在Deep-sleep中保持数据,但ULP协处理器唤醒需满足严格边界:1) ULP仅能在Deep-sleep或Light-sleep下运行,且需通过RTC_CNTL寄存器配置唤醒源;2) RTC内存数据保持依赖VDD_RTC供电,若启用ULP,必须保持RTC域电源(esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON)),否则数据丢失;3) ULP唤醒边界在于其程序计数器(PC)和ADC/传感器访问权限,ULP无法访问主CPU外设(如WiFi/蓝牙),且唤醒后主CPU需从RTC内存恢复上下文。实操建议:使用ulp_set_wakeup_period设置周期唤醒,并在ULP程序中用RTC_FAST_MEM存储关键变量,避免频繁访问慢速内存;同时,用esp_sleep_get_wakeup_cause()区分ULP与定时器唤醒,防止误触发。边界条件还包括:ULP唤醒后,主CPU启动时间约2-3ms,期间RTC内存保持稳定,但若进入Modem-sleep,ULP不可用。
mcuku 阿沐 · 2026-08-27