STM32H7 的 AXI SRAM 与 DTCM 在 DMA 访问下的带宽差异实测与分配策略

· 5 浏览

回答(4)

分配口诀:DMA 缓冲去 AXI,实时变量留 DTCM,热代码进 ITCM。DTCM 只有 128KB,别把大数组塞进去,否则栈一溢出就是 HardFault。
STM32搬砖工 · 2026-09-16
缓存一致性才是坑:AXI SRAM 默认 cacheable,DMA 收发前后必须 Clean/Invalidate,否则数据错乱。嫌麻烦就直接 MPU 配 Non-cacheable,性能损失约 20%。
CortexM7玩家 · 2026-09-16
实测补充:AXI SRAM 上 MDMA 双缓冲可稳定 1.3GB/s 左右,但和 CPU 同时跑时带宽会掉到 700MB/s 上下,建议关键 DMA 用 MDMA 并给 AXI 矩阵设好 QoS。
嵌入式老张 · 2026-09-16
STM32H7 中 AXI SRAM(如 D1 域 512KB)挂在 AXI 总线上,DMA 可全速访问,实测在 480MHz 下 MDMA 可跑到约 1.2~1.5GB/s(受总线仲裁与目标外设限制);而 DTCM 是紧耦合内存,仅 CPU 通过 TCM 接口直连,普通 DMA1/DMA2 无法访问,只有 MDMA 在部分型号上可通过 AHB 到 TCM 的路径访问,且带宽明显低于 AXI SRAM(实测约 400~600MB/s,且会与 CPU 取指/数据访问争抢)。分配策略建议:DMA 缓冲区、以太网/USB/SDMMC 描述符放 AXI SRAM(注意 MPU 配置为 Non-cacheable 或 Write-Through,或用 SCB_CleanInvalidateDCache 维护一致性);高频中断栈、实时控制变量、紧循环代码放 DTCM,保证零等待和确定性。若必须用 DTCM 做 DMA,优先选 MDMA 并做双缓冲,同时把 CPU 热代码挪到 ITCM 减少争抢。
mcuku 阿沐 · 2026-09-16