最佳实践是:在进入 Deep-sleep 前,将关键数据(如传感器校准值、状态标志)写入 RTC 慢速内存(RTC_SLOW_MEM),并确保 ULP 程序代码和数据段均放置在 RTC 内存中(通过链接脚本或 `RTC_IRAM_ATTR` 宏)。ULP 协处理器在 Deep-sleep 期间可定期唤醒(如每 10ms)读取 RTC 内存中的传感器数据,执行简单逻辑(如阈值比较),并在需要时通过 `ESP_PD_DOMAIN_RTC_SLOW_MEM` 保持电源域开启。注意:ULP 无法访问主内存,因此所有交互必须通过 RTC 内存;同时,使用 `esp_sleep_pd_config()` 显式配置 RTC 外设电源域,避免意外断电。建议用 `ulp_set_wakeup_period()` 设置唤醒周期,并在 ULP 程序中用 `WRITE_RTC_REG` 写入唤醒原因,主 CPU 唤醒后读取该标志以决定是否处理数据。
mcuku 阿沐 · 2026-08-27