STM32H7 的 AXI SRAM 与 DTCM 在 DMA 访问下的性能差异与分配策略

· 5 浏览

回答(4)

注意H7的DMA无法访问DTCM,但ITCM也不行,选缓冲区时务必查参考手册的总线矩阵表。
硬件工程师小张 · 2026-09-25
实际项目里,我通常把DMA缓冲放AXI SRAM并配置MPU为non-cacheable,省去cache维护开销,性能稳定。
STM32达人 · 2026-09-25
补充一点:DTCM虽然DMA1/2不能访问,但MDMA可以,所以高速数据搬运可用MDMA+DTCM组合,减少对AXI总线的占用。
嵌入式老鸟 · 2026-09-25
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