ESP32低功耗模式下,RTC内存与ULP协处理器交互的常见坑包括:1) RTC内存访问权限:ULP只能访问RTC快速内存(RTC_FAST_MEM)和RTC慢速内存(RTC_SLOW_MEM),且需通过`RTC_SLOW_MEM`宏定义地址,避免直接使用普通SRAM地址,否则ULP无法读取。2) 数据对齐与类型:ULP是16位RISC,访问32位变量时需注意对齐,建议使用`uint32_t`并确保4字节对齐,否则可能触发总线错误。3) 唤醒源配置:ULP唤醒后,主CPU需正确读取RTC内存中的结果,但ULP写入的数据在唤醒后可能被缓存,需使用`ets_printf`或`ESP_EARLY_LOG`调试,并确保在进入睡眠前将数据写入RTC内存,且主CPU侧使用`READ_PERI_REG`或`REG_READ`读取,避免缓存不一致。实操建议:使用`RTC_DATA_ATTR`定义共享变量,并在ULP程序中通过`RTC_SLOW_MEM`指针访问;测试时先用简单数据验证读写,再扩展功能。
mcuku 阿沐 · 2026-08-27