cisen / blog

Time waits for no one.
133 stars 20 forks source link

arm mpu相关 #978

Open cisen opened 3 years ago

cisen commented 3 years ago

在Cortex‐M3处理器中可以选配一个存储器保护单元(MPU),它可以实施对存储器(主 要是内存和外设寄存器)的保护,以使软件更加健壮和可靠。在使用前,必须根据需要对其 编程。如果没有启用MPU,则等同于系统中没有配MPU。MPU有如下的能力可以提高系统的 可靠性:

MPU在执行其功能时,是以所谓的“region”为单位的。一个region其实就是一段连续 的地址,只是它们的位置和范围都要满足一些限制(对齐方式,最小容量等)。CM3的MPU 共支持8个regions。怎么,嫌少?是少了点,不过,还允许把每个region进一步划分成更小 的“子region”。此外,还允许启用一个“背景region”(即没有MPU时的全部地址空间), 不过它是只能由特权级享用。在启用MPU后,就不得再访问定义之外的地址区间,也不得访 问未经授权的region。否则,将以“访问违例”处理,触发MemManage fault。 MPU定义的regions可以相互交迭。如果某块内存落在多个region中,则访问属性和权限 将由编号最大的region来决定。比如,若1号region与4号region交迭,则交迭的部分受4号region 控制。

内存访问顺序

当ARM处理器产生一个内存访问信号时,内存保护单位MPU将负责检查要访问的地址是否在被定义的域中。

① 如果地址不在任何域中,存储器产生异常。如果内核预取指令则MPU产生预取中止异常;如果是存储器数据请求,则产生数据中止异常。

② 如果地址在多个域内,由MPU判断域的有效级来决定存储区域的访问属性。访问属性可以在CP15的寄存器中设定,可设定的位为C(Cache)、B(Buffer)、AP(Access Permission)。这些属性的具体定义为:

· C和B可以控制Cache和写缓存属性的Cache策略。例如,可以设置一个域使用回写(write-back)策略访问存储器,而另一个域则以无Cache和无写缓存方式访问;

· AP(access permission)决定域是否可以被访问。如果在当前处理器模式下,该域不能被访问,MPU将产生一个存储器访问异常。

图1 显示了一个存储器访问过程

52347130b710c