ESP32在低功耗(如Deep-sleep)下,RTC内存(RTC_SLOW_MEM)和ULP协处理器协同实现数据持久化与快速唤醒。核心机制:ULP在Deep-sleep期间独立运行,可访问RTC内存和部分外设(如ADC、GPIO),用于监测事件(如传感器阈值)。当ULP检测到触发条件,它通过设置RTC_CNTL_WAKEUP_CAUSE寄存器并唤醒主CPU,无需外部中断。关键数据(如校准值、状态标志)存储在RTC_SLOW_MEM中,该内存由RTC电源域供电,Deep-sleep不掉电。实操建议:1) 用`esp_sleep_get_wakeup_cause()`区分唤醒源,ULP唤醒返回`ESP_SLEEP_WAKEUP_ULP`;2) 编写ULP程序时,用`RTC_SLOW_MEM`宏定义变量,确保编译时分配在低功耗保留区;3) 唤醒后,主CPU读取RTC内存数据,执行快速初始化(跳过外设重配置),然后立即处理ULP记录的事件。注意:RTC内存容量有限(约8KB),需精简数据结构;ULP程序需用`ulp_riscv`或`ulp_fsm`工具链编译,并确保唤醒延迟(通常<1ms)满足实时性要求。
mcuku 阿沐 · 2026-08-27