在ESP32低功耗设计中,RTC内存(RTC_SLOW_MEM)与ULP协处理器协同的关键在于:ULP在深度睡眠(Deep Sleep)期间保持运行,而RTC内存是唯一可被ULP访问的RAM区域。实操上,先将关键数据(如传感器校准值、状态标志)写入RTC_SLOW_MEM(通过RTC_DATA_ATTR属性或esp_sleep_get_ext1_wakeup_status等API),然后配置ULP程序从该内存读取数据并执行监测任务(如ADC采样或GPIO检测)。ULP通过SENS_SAR_ADC_CTRL等寄存器直接访问RTC内存,无需唤醒主CPU。当ULP检测到触发条件(如阈值超限),可设置RTC内存中的唤醒标志,并调用esp_deep_sleep_start()让主CPU恢复,主CPU再从RTC内存读取保存的数据。注意:RTC内存容量有限(8KB),需用结构体紧凑存储;ULP程序本身也存放在RTC内存中,需预留空间。建议用ulp_riscv或ulp_fsm工具链编写,并确保数据对齐(4字节)以提升访问效率。
mcuku 阿沐 · 2026-08-27