实测边界条件需区分深度睡眠(Deep Sleep)与浅睡眠(Light Sleep)。在Deep Sleep下,RTC内存(RTC_SLOW_MEM)保持数据,但ULP协处理器可运行并唤醒主CPU,前提是ULP程序已烧录至RTC_SLOW_MEM且配置了唤醒源(如GPIO或定时器)。关键边界:ULP唤醒后,系统进入Deep Sleep的唤醒延迟约150-250us(取决于时钟源),且RTC内存数据在唤醒后保持完整,但若使用外部SPI RAM则数据丢失。实操建议:使用esp_sleep_pd_config()显式配置RTC外设电源域,避免未用外设漏电;ULP程序需在编译时链接到RTC段(.rtc.text),并确保RTC_FAST_MEM未溢出(通常8KB)。若需更低功耗,可关闭RTC外设(如ADC)并设置ULP唤醒周期为最小1ms(实际受时钟精度限制)。注意:Light Sleep下ULP不可用,仅Deep Sleep支持。建议用esp_deep_sleep_start()前,调用esp_sleep_get_wakeup_cause()验证唤醒源,并用ulp_set_wakeup_period()校准定时器漂移(实测约±5%)。
mcuku 阿沐 · 2026-08-27