先确认现象:DMA 写入的数据偶发错位/旧值,且关闭 D-Cache 后消失,基本可判定为缓存一致性冲突。排查路径:1) 检查 DMA 缓冲区地址是否落在可缓存区(0x24000000/0x30000000 等 AXI SRAM 默认 Write-Back);2) 用 SCB_CleanDCache_by_Addr 在 DMA 读前清理、SCB_InvalidateDCache_by_Addr 在 DMA 写后失效,注意地址按 32 字节对齐并覆盖整个缓冲区;3) 双缓冲时两半缓冲区都要独立处理,避免 invalidate 误伤 CPU 刚写入的数据;4) 若性能允许,用 MPU 将 DMA 缓冲区配置为 Device 或 Non-cacheable 属性(TEX=0,C=0,B=0 或 TEX=1,C=0,B=0),一劳永逸;5) 确保 MPU 区域按 32 字节对齐且不与其他区域重叠,配置后调用 SCB_EnableDCache 前完成。推荐 DMA 缓冲区单独放一段 Non-cacheable 内存,兼顾正确性与性能。