cache stm32h7_STM32H7的Cache和MPU

本文详细介绍了STM32H7的Cache机制,包括D-Cache和I-Cache的工作原理,读写操作,以及四种Cache策略。同时阐述了使用Cache可能带来的风险,如DMA与Cache的冲突,并提供了相关的Cache管理函数。此外,文章还讲解了MPU的作用,如内存保护和代码访问保护,并介绍了MPU的内存类型和配置,以及如何使用HAL库设置MPU保护区域。
摘要由CSDN通过智能技术生成

一、Cache

1、介绍

Cache又分数据缓存D-Cache和指令缓冲I-Cache,STM32H7的数据缓存和指令缓存大小都是16KB。STM32H7主频是400MHz,除了TCM和Cache以400MHz工作,其它AXI SRAM,SRAM1,SRAM2等都是以200MHz工作。数据缓存D-Cache就是解决CPU加速访问SRAM。

如果每次CPU要读写SRAM区的数据,都能够在Cache里面进行,自然是最好的,实现了200MHz到400MHz的飞跃,实际是做不到的,因为数据Cache只有16KB大小,总有用完的时候。

2、操作,分为读操作和写操作

读操作: 如果CPU要读取的SRAM区数据在Cache中已经加载好,这就叫读命中(Cache hit),如果Cache里面没有怎么办,这就是所谓的读Cache Miss。

写操作: 如果CPU要写的SRAM区数据在Cache中已经开辟了对应的区域(专业词汇叫Cache Line,以32字节为单位),这就叫写命中(Cache hit),如果Cache里面没有开辟对应的区域怎么办,这就是所谓的写Cache Miss。

3、H7支持的Cache策略,共4种

4、风险

从上面的图就看出来使用Cache的风险,因为DMA是直接与SRAM交换数据的,而CPU与SRAM之间隔了一个Cache,如果DMA更新了某个数据到SRAM,CPU要去访问,而恰好Cache中有,那么CPU就不会去SRAM中拿,就会拿到Cache中已经过时的数据。因此使用了DMA的内存区要配置为无Cache或者拿数据前清一次Cache。

5、相关函数

SCB_EnableICache(void) :用于使能指令Cache,系统上电后优先初始化即可。

SCB_DisableICache(void) :用于禁止指令Cache。

SCB_InvalidateICache(void) :用于将指令Cache无效化,无效化的意思是将Cache Line标记

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值