内存保护单元
本章介绍内存保护单元(MPU)。
1. 关于 MPU¶
MPU 是用于内存保护的可选组件。处理器支持标准的 ARMv7 受保护内存系统架构(Protected Memory System Architecture)模型。MPU 完全支持:
- 八个或十六个保护区域。
-
具有递增区域优先级的重叠保护区域:
-
15 为最高优先级(实现 16 个区域时)。
- 7 为最高优先级(实现 8 个区域时)。
-
0 为最低优先级。
-
访问权限。
- 向系统输出内存属性。
MPU 失配和权限违规会调用可编程优先级的 MemManage 故障处理程序。更多信息请参见 Arm®v7-M 架构参考手册。
可以使用 MPU 实现:
- 强制特权规则。
- 隔离进程。
- 强制访问规则。
2. MPU 功能描述¶
区域属性与大小寄存器 MPU_RASR 的访问权限位 TEX、C、B、AP 和 XN 控制对相应内存区域的访问。如果对没有所需权限的内存区域进行访问,则会引发 MemManage 故障。更多信息请参见 Arm®v7-M 架构参考手册。
3. MPU 编程模型¶
下表给出了 MPU 寄存器。这些寄存器在 Arm®v7-M 架构参考手册中描述。
注意: MPU 寄存器仅支持对齐的字访问。字节访问和半字访问为 UNPREDICTABLE。
| 地址 | 名称 | 类型 | 复位值 | 描述 |
|---|---|---|---|---|
| 0xE000ED90 | MPU_TYPE | RO | 0x00000800ᵃ | MPU 类型寄存器 |
| 0xE000ED94 | MPU_CTRL | RW | 0x00000000 | MPU 控制寄存器 |
| 0xE000ED98 | MPU_RNR | RW | 未知 | MPU 区域编号寄存器 |
| 0xE000ED9C | MPU_RBAR | RW | 未知 | MPU 区域基址寄存器 |
| 0xE000EDA0 | MPU_RASR | RW | 未知 | MPU 区域属性与大小寄存器 |
| 0xE000EDA4 | MPU_RBAR_A1 | RW | 未知 | MPU 别名寄存器 |
| 0xE000EDA8 | MPU_RASR_A1 | RW | 未知 | MPU 别名寄存器 |
| 0xE000EDAC | MPU_RBAR_A2 | RW | 未知 | MPU 别名寄存器 |
| 0xE000EDB0 | MPU_RASR_A2 | RW | 未知 | MPU 别名寄存器 |
| 0xE000EDB4 | MPU_RBAR_A3 | RW | 未知 | MPU 别名寄存器 |
| 0xE000EDB8 | MPU_RASR_A3 | RW | 未知 | MPU 别名寄存器 |
a. 复位值取决于实现的区域数量:0x00000000 表示 0 个区域;0x00000800 表示 8 个区域;0x00001000 表示 16 个区域。