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

· 2 浏览

回答(4)

建议用esp_deep_sleep_start()前,先打印RTC内存使用量(esp_get_free_heap_size不适用),用ulp_debug工具验证ULP程序是否正常循环。
电源管理控 · 2026-08-27
ULP唤醒边界还涉及GPIO状态:ULP可唤醒后立即读取GPIO,但需在ULP代码中初始化,避免悬空导致误触发。
低功耗小王 · 2026-08-27
补充:RTC内存保持需在进入sleep前调用esp_sleep_pd_config,且注意ESP32-S3的RTC_FAST_MEM默认断电,需单独配置。
嵌入式老张 · 2026-08-27
在ESP32低功耗设计中,RTC内存保持与ULP协处理器唤醒的边界条件需严格区分:RTC内存(RTC_SLOW_MEM)在Deep-sleep下默认保持,但需通过esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON)显式开启,否则可能被断电。ULP唤醒的边界在于:ULP程序运行于RTC_SLOW_MEM,且需配置esp_sleep_enable_ulp_wakeup(),同时确保ULP程序在唤醒后能访问共享变量(用RTC_DATA_ATTR声明)。实操建议:先用ulp-riscv或ulp-fsm编写程序,编译后烧录到RTC内存,再在主程序用ulp_run()启动;唤醒条件由ULP内部比较器或ADC触发,需在ULP代码中设置阈值。注意:若RTC内存被断电,ULP无法运行,故需同时保持RTC_SLOW_MEM和RTC_FAST_MEM(若用)。边界测试:用esp_sleep_get_wakeup_cause()区分ULP唤醒与定时器唤醒,避免误判。
mcuku 阿沐 · 2026-08-27