STM32H7-MPU的理解和配置

news/2024/11/16 10:27:23/

STM32H7-MPU

一、MPU的作用

  • 防止不受信用的应用程序访问受保护的内存区域
  • 防止用户应用程序破坏操作系统使用的数据
  • 通过阻止任务访问其他任务的数据区
  • 允许将内存区域定义为只读,以便保护重要数据。
  • 检测意外的内存访问

简单来说,就是内存保护外设保护代码访问保护

二、MPU的功能实现

​ MPU可以配置保护16个内存区域,每个区域都是独立配置的。每个区域的最小要求是32字节,同时每个区域还可以配置为8个子区域,通过寄存器对应的bit来使能。

​ MPU可配置的16个内存区的序号范围是0-15,还有一个默认区(背景区)序号为-1,这些内存区可以重叠以及嵌套——序号为15的优先级最高、背景区的优先级最低。例如下图,共有七个内存区:一个背景区+序号为0-5的内存区。内存区4和内存区0、1有重叠部分,则重叠部分按照内存区4的配置规则执行;内存区5被完全包含在内存区3里面,则这部分内存区的配置按照内存区5的配置规则进行。

在这里插入图片描述

三、MPU常用的寄存器(RASR寄存器和控制寄存器)

在这里插入图片描述

  • XN位:表示是否使能指令的提取
    • XN=0:使能指令提取,即这块内存可以执行程序代码
    • XN=1:禁止指令提取,机这块内存禁止执行程序代码
  • AP位:设置指定区域的访问权限类型

在这里插入图片描述

  • TEX、C、B、S位:用于配置Cache的策略

    • C位:用于使能或者禁止Cache
    • B位:用于配合C位实现Cache下是否使用缓冲
    • S位:用于解决多总线或者多核访问的共享问题

在这里插入图片描述
在这里插入图片描述

read/write-through/back/allocate的区别:

一、CPU读Cache

  1. Read through:直接从内存区读取数据
  2. Read allocate:先把数据读取到Cache中,再从Cache中读取数据

二、CPU写Cache

若hit命中,有两种处理方式:

  1. Write-through:在数据更新时,把数据同时写入Cache和存储区
    1. 操作简单,但是写入速度慢
  2. Write-back:只有在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。
    1. 写入速度快,但是一旦更新后的数据未被写入时出现断电,则数据无法找回

若miss,有两种处理方式:

  1. Write allocate:先把要写的数据载入到Cache中,写Cache,然后再通过flush的方式写入到内存中。
  2. No-write allocate:并不将写入位置读入缓存,直接把要写的数据写入到内存中。

什么叫hit/miss

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

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

  • SRD位:用于控制内存区的子区域,一共有8bit,一个bit控制一个子区域,一般都开启
  • SIZE位:配置保护的内存的大小

四、MPU的HAL库配置函数

  • HAL_MPU_Disable:配置前要禁止MPU
  • HAL_MPU_Enable:使能
    • 一般使用参数MPU_PRIVILEGED_DEFAULT
  • HAL_MPU_ConfigRegion:配置MPU
static void MPU_Config( void )
{MPU_Region_InitTypeDef MPU_InitStruct;/* 禁止 MPU */HAL_MPU_Disable();/* 配置 AXI SRAM 的 MPU 属性为 Write back, Read allocate Write allocate *///使能MPUMPU_InitStruct.Enable = MPU_REGION_ENABLE;   //指定MPU保护的内存起始地址,注意要和下面的大小进行对齐MPU_InitStruct.BaseAddress = 0x24000000;//配置保护的内存大小MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;//配置区域访问权限类型MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;//在开启Cache下是否使用缓冲MPU_InitSt ruct.IsBufferable = MPU_ACCESS_BUFFERABLE;//是否开启CacheMPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;//是否开启共享MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;MPU_InitStruct.Number = MPU_REGION_NUMBER0;//配置缓存的策略MPU_InitStruct.TypeExtField = M PU_TEX_LEVEL1;//是否开启子区域MPU_InitStruct.SubRegionDisable = 0x00;//指定指令访问状态MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;HAL_MPU_ConfigRegion(&MPU_InitStruct);HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}

http://www.ppmy.cn/news/146801.html

相关文章

CPU_SOC_MPU和MCU

CPU_SOC_MPU和MCU 一、CPU(Central Processing Unit)二、MPU (Micro Processor Unit)三、MCU(Micro Control Unit)四、SOC(System on Chip)五、SOPC(System On a Programmable Chip)六、区别6.1、MCU和MPU的区别6.2、CPU与SoC的区别6.3、SoPC与MCU、MPU、SoC的区别 一、CPU(Cen…

CPU、 MCU、 MPU、 DSP的区别

CPU、 MCU、 MPU、 DSP的区别 CPU、 MCU、 MPU、 DSP的区别 CPU( CentralProcessing Unit, 中央处理器) 发展出来三个分枝, 一个是DSP( Digital Signal Processing/Processor, 数字信号处 理) &…

CPU、MCU、MPU及DSP的区别和介绍

CPU、MCU、MPU及DSP的区别 CPU(Central Processing Unit,中央处理器)发展出来三个分枝,一个是DSP(Digital Signal Processing/Processor,数字信号处理),另外两个是MCU(M…

GPU CPU SOC DSP FPGA ASIC MCU MPU GPP ECU

FPGA、ASIC、DSP全面大比拼_pilifeng1的博客-CSDN博客_asic dsp DSP首先是Digital Signal Processing(数字信号处理),然后才是Digital Singnal Processor(数字信号处理器) FPGA( Field Programmable Gate Array)即现场可编程门阵列,它是在PAL、GAL、PL…

CPU、MPU、MCU、SOC的概念与区别

参考资料: SoC和MCU的区别 CPU、MCU和SOC的区别以及外设的概念理解 CPU、MPU、MCU和SOC还傻傻分不清楚 看这篇文章就够了 1. 概念 1.1 CPU(Central Processing Unit) CPU(Central Processing Unit),是一台计算机的运算核心和控制核心。CPU由运算器、控…

ARM Cortex-M7 中 MPU 与 Cache

项目中采用了ARM cortex-M7的架构进行芯片设计,在随后的开发中遇到了关于Cache配置等问题,花费了一段时间查阅资料与参考STM32H743开发板代码,现在记录总结一下。 1、关于Cache 1.1 Cache是什么 Cache是位于core与内存之间的一个高速缓存区…

Cortex‐M3-总线接口

总线框图 Cortex‐M3 内部有若干个总线接口,以使 CM3 能同时取址和访内(访问内存),它们是: 指令存储区总线(两条): 负责对代码存储区的访问,分别是 I‐Code 总线和 D‐Code 总线。前者用 于取指&#xff0…

MPU MCU CPU GPU之间的关系

CPU(Central Processing Unit,中央处理器)是计算机系统的主要处理器,它负责执行指令、处理数据和控制计算机系统的操作。CPU通常被用于通用计算和控制任务,如桌面电脑、服务器和智能手机等。 MPU(Microprocessor Unit…