【电路笔记 STM32】Cortex-M7 内核上的数据缓存结构图 + MPU内存保护单元 + Cache基本操作 + CacheDMA 时序图

【电路笔记 STM32】Cortex-M7 内核上的数据缓存结构图 + MPU内存保护单元 + Cache基本操作 + CacheDMA 时序图 MPU简介MPU是Memory Protection Unit内存保护单元是现代微控制器如 STM32H7 的 Cortex-M7 内核中内置的一个硬件模块主要作用是监控和管理 CPU 对内存的访问行为:防止程序“越界” (Access Violation):CPU 尝试写入的瞬间MPU 发现地址越界立即阻断操作并触发MemManage Fault。程序立刻停在出错的那一行开发者可以马上知道哪里错了。隔离用户模式与特权模式 (Privilege Levels):操作系统内核特权模式和应用程序任务用户模式。MPU 可以配置某些关键区域如内核堆栈、外设寄存器只允许特权模式访问。如果用户模式的代码试图修改这些区域MPU 会直接报错。这防止了劣质应用搞崩整个系统。控制缓存策略 (Cache Control) DMA 控制器直接向内存写数据如 ADC 采样值而 CPU 开启了 Cache。CPU 可能从 Cache 里读到旧数据因为 DMA 绕过了 Cache 直接改了内存。通过配置 MPU可以将 DMA 使用的缓冲区标记为“不可缓存 (Non-Cachable)”。这样 CPU 访问该区域时会强制绕过 Cache直接读物理内存保证数据一致性无需软件手动刷新 Cache。定义内存属性 (Memory Attributes):MPU 可以告诉 CPU 某块内存是什么类型的Normal Memory、Device Memory、Strongly Ordered。注MPU和Cache都位于CPU内核中下图左上角的Cpu Cortex-M7部分M7内核上的数据缓存结构DMA与DTCM总线拓扑隔离物理上不链接哈佛架构的极致化Cortex-M7 采用改进的哈佛架构。ITCM 和 DTCM 是通过 CPU 内部的专用端口Private Ports直接连接的不经过片上总线矩阵Bus Matrix。是直接挂在CPU上的高速内存不经过 Cache访问速度接近单周期访问时间固定。零等待周期0 Wait State为了让 CPU 在每个时钟周期都能确定性地读写数据TCM 必须避开总线仲裁、冲突和延迟。如果允许 DMA 访问就需要引入复杂的仲裁机制这会破坏 TCM 的“确定性”和“高速”特性。DMA 的路径DMA 控制器是挂在AXI或AHB总线上的主设备Master。它只能看到挂载在这些总线上的从设备Slave比如 SRAM1/2/3、AXI SRAM、Flash 等。TCM 不在这些总线的地址映射范围内。D-Cache 需要重点管理涉及数据一致性,I-Cache 多用于加速一般较少手动干预。DMA 写不了 DTCM 是因为路不通硬件架构限制需要维护 Cache 是因为信息不同步DMA 直接改内存得通知 CPU 刷新。简化结构CPUCacheSRAMDMA结构 操作融合EnableDisableClean 写回Invalidate 失效CPUCacheSRAMDMACache 四种基本操作操作作用影响对象是否影响内存典型使用场景关键特点使能Enable打开 Cache 功能I-Cache / D-Cache否系统初始化时开启提升访问速度禁止Disable关闭 Cache 功能I-Cache / D-Cache否调试 / 特殊一致性需求简单但性能下降清空Clean将缓存中的脏数据写回内存仅 D-Cache是写回CPU写数据 → DMA读取前保证内存数据最新无效化Invalidate丢弃缓存中的数据I-Cache / D-Cache否DMA写数据 → CPU读取前强制重新从内存读取Clean ≈ 同步数据到内存写回Invalidate ≈ 丢掉缓存重新读取CacheDMA 时序图DMASRAMCacheCPUDMASRAMCacheCPU可能读到旧数据需要 Clean----------------------------Cache未更新需要 Invalidate写数据未及时写回读取数据写数据读取数据返回旧数据