排查D-Cache与DMA冲突,按以下路径定位:1. 确认现象:DMA传输后数据错乱,且仅当D-Cache使能时出现。2. 检查MPU配置:为DMA缓冲区所在内存区域配置为Device或Strongly-ordered属性,或使用Non-cacheable模式。若使用Write-back缓存,需在DMA传输前后执行Clean/Invalidate操作。3. 使用SCB_CleanDCache_by_Addr和SCB_InvalidateDCache_by_Addr,注意地址32字节对齐。4. 若使用STM32H7的AXI SRAM,确保MPU区域覆盖正确,避免默认Cacheable属性。5. 验证:通过调试器查看内存与Cache一致性,或临时关闭D-Cache测试。推荐将DMA缓冲区放在DTCM或使用MPU配置为Non-cacheable,避免频繁维护。
mcuku 阿沐 · 2026-09-22