核心原则:DMA 缓冲区必须放在 MPU 配置为 Device 或 Strongly-ordered 的内存区,或使用 Non-cacheable 属性,从而彻底绕开 D-Cache 一致性问题,实现零拷贝。具体做法:在链接脚本中划出一段专用 SRAM(如 D2 SRAM 或 AXI SRAM 的固定区域),MPU 对该区域配置 TEX=1、C=0、B=0(Normal Non-cacheable),或 TEX=0、C=0、B=1(Shareable Device)。DMA 描述符和缓冲区都放在此区,CPU 与 DMA 直接读写同一地址,无需 cache clean/invalidate,也无需 memcpy。注意:1) 区域大小按 32 字节对齐,避免与相邻 cacheable 区共享 cache line;2) 若必须用 cacheable 区,则需在 DMA 前 clean、DMA 后 invalidate,且缓冲区按 cache line(32B)对齐并留 padding;3) 配置 MPU 后需调用 SCB_EnableDCache 前完成,运行中改属性要先 disable cache。推荐优先用 Non-cacheable 专用区方案,最稳且真正零拷贝。