先确认现象:DMA 写入的缓冲区被 CPU 读到旧数据,或 CPU 写的数据 DMA 发出时丢失,且只在开启 D-Cache 后出现,基本可判定为缓存一致性冲突。排查顺序:1) 用 SCB_InvalidateDCache_by_Addr 在 DMA 接收完成后、CPU 读取前失效对应区间;发送前用 SCB_CleanDCache_by_Addr 回写。2) 检查地址与长度是否按 32 字节 cache line 对齐,未对齐的失效会误伤相邻数据。3) 双缓冲场景下,两块缓冲区应各自独立对齐到 cache line 边界,避免伪共享。4) 若用 MPU 配置回写策略,可将 DMA 缓冲区所在区域设为 Non-cacheable(TEX=1,C=0,B=0)或 Write-through,并确保 MPU 区域不与默认内存属性重叠、优先级正确。5) 最后用调试器观察 DMA 完成后内存实际内容与 CPU 读值差异来验证。