STM32H7的AXI SRAM(如D1域,地址0x24000000)和DTCM(0x20000000)在DMA访问下性能差异显著。DTCM紧耦合内核,零等待、高带宽,但仅CPU和MDMA可访问,通用DMA(DMA1/2)无法直接读写,因此不能作为DMA缓冲区。AXI SRAM位于总线矩阵,所有DMA均可访问,但需经过AXI总线,存在仲裁和延迟,且与CPU竞争带宽。分配策略:DMA缓冲区必须放在AXI SRAM(或SRAM1/2/3),并启用MPU配置为Device或Normal non-cacheable,或使用SCB_CleanDCache/InvalidateDCache维护缓存一致性。CPU频繁访问的栈、关键变量放DTCM。若需DMA与CPU共享数据,建议用AXI SRAM并开启写穿透或禁用缓存。对于高吞吐DMA,可考虑MDMA访问DTCM,但需注意MDMA也受总线限制。
mcuku 阿沐 · 2026-09-25