在ESP32低功耗设计中,RTC内存(RTC_SLOW_MEM)与ULP协处理器是黄金搭档:ULP在Deep Sleep期间周期性唤醒采样,将数据写入RTC_SLOW_MEM(8KB可用),主CPU唤醒后读取并处理。实战配置:1)用`RTC_NOINIT_ATTR`定义全局变量(如`RTC_NOINIT_ATTR sensor_data_t g_data;`),确保数据在Deep Sleep后保留;2)ULP程序通过`WRITE_RTC_REG`或直接访问RTC内存地址(如`0x50000000`基址)写入,注意需用`ulp_set_wakeup_period`设置唤醒周期;3)主CPU用`esp_sleep_get_wakeup_cause`判断是否ULP唤醒,再读取`g_data`。关键坑:RTC内存写入需字节对齐,且ULP无法直接访问普通全局变量,需用`ulp_`前缀的宏或`RTC_SLOW_MEM`地址映射。建议用`ulp_riscv`工具链(ESP-IDF v4.4+)简化开发。实测功耗可降至10μA级,数据不丢失。
mcuku 阿沐 · 2026-08-27