上一篇 | 返回主目录 | 下一篇
内存保护_1:Tricore芯片MPU模块介绍
- 1 何为MPU
- 2 MPU相关的硬件子系统
- 2.1 基于地址范围保护逻辑说明
- 2.1.1 地址范围寄存器
- 2.1.2 读、写、执行权限寄存器
- 2.1.3 保护集设置位
- 2.1.4 内存保护功能使能位
- 2.1.5 核的内存保护范围获取说明
- 2.1.6 保护使能基本机理
- 2.2 外设寄存器操作及指令执行保护
- 2.2.1 用户模式设置状态位(PSW程序状态寄存器)
- 2.1.2 用户模式下指令及寄存器访问权限设置(SYSCON系统控制寄存器)
- 2.3 错误处理机制
- 2.4 寄存器操作指令说明
- 2.4.1 相关寄存器操作指令
- 2.4.2 写入指令(MTCR)
- 2.4.3 读出指令(MFCR)
1 何为MPU
-
MPU(Memory Protection Unit),即存储保护单元,它是位于存储器内部的一个可编程的区域,定义了存储器的属性和存储器的访问权限。用于检测系统访问非法地址或者访问无许可的地址,在触发错误后,会进入硬件错误异常(通过Trap可对错误进行识别,并进行相应的处理)。
-
在如下的情况中使得系统更加安全:
1)、避免应用任务破坏其他任务或者OS内核使用的栈或数据存储器。
2)、避免非特权任务访问对系统可靠性和安全性很重要的外设。
3)、将SRAM或RAM定义为不可执行的(永不执行,XN),可以防止代码注入攻击。
2 MPU相关的硬件子系统
2.1 基于地址范围保护逻辑说明
注意: 每个核存在各自独立的寄存器,不可认为共用相关寄存器
2.1.1 地址范围寄存器
数据地址范围寄存器:用于限制数据的读取、写入地址范围
DPRx_L:定义数据范围对x的下地址边界
DPRx_U:定义数据范围对x的上地址边界
备注:
a)、D: Data,P: Protection, R: Range, L: Lower
b)、范围存在一个最小粒度,即最小的保护范围(如下图寄存器说明,最低3位为不可写入,所以粒度为8)

代码地址范围寄存器:用于限制代码执行地址范围
CPRx_L:定义代码范围对x的下地址边界
CPRx_U:定义代码范围对x的上地址边界
备注:
a)、C: Code,P: Protection, R: Range, L: Lower
b)、范围存在一个粒度,即最小的保护范围(如下图寄存器说明,最低5位为不可写入,所以粒度为32)

2.1.2 读、写、执行权限寄存器
DPWE_x(数据保护写使能寄存器,x为保护集编号):定义保护集对各个数据范围寄存器的写入权限是否使能
备注:
a)、D: Data,P: Protection, W: Write, E: Enable,x:保护集编号

DPRE_x(数据保护读使能寄存器,x为保护集编号):定义保护集对各个数据范围寄存器的读出权限是否使能
备注:
a)、D: Data,P: Protection, R: Read, E: Enable,x:保护集编号

CPXE_x(代码保护执行使能寄存器,x为保护集编号):定义保护集对各个代码范围寄存器的执行权限是否使能
备注:
a)、C: Code,P: Protection, X: Execute, E: Enable,x:保护集编号

2.1.3 保护集设置位
PRS(保护寄存器集位):用于设置当前核的使能的保护集编号
备注:
a)、P: Protection,P: Register, S:Set

2.1.4 内存保护功能使能位
PROTEN(内存保护使能位):用于使能内存保护功能
备注:
a)、PROT: Protection,E: Enable

2.1.5 核的内存保护范围获取说明
- 根据核使能的保护集编号,可以知道相应的读、写及执行权限相关寄存器
- 根据读、写及执行相关寄存器中,关于范围寄存器的范围是否使能,得到单个范围
- 将所有是能的范围取并集,即可得到当前核的保护范围

2.1.6 保护使能基本机理
- SYSCON寄存器中的保护启用位(SYSCON. PROTEN)
- 设置保护寄存器地址范围设置(DPRx_L、DPRx_U,CPRx_L、CPRx_U)
- 设置访问权限寄存器(DPWE_x、DPRE_x、CPXE_x)
- 选择保护集(PSW.PRS)
2.2 外设寄存器操作及指令执行保护
2.2.1 用户模式设置状态位(PSW程序状态寄存器)
IO:用于设置当前的用户模式(仅在非可信应用集中会设置为User,与SYSCON的U1_IED、U1_IOS配合使用)
- 00B : User-0 Mode :禁止访问具有外设空间属性的内存区域,并导致PSE或MPP陷阱
- 01B : User-1 Mode :定期访问外围。允许访问没有特殊保护的常见外围设备,包括对串行I/O端口的读/写访问,对计时器的读访问,以及对大多数I/O状态寄存器的访问。这个级别的任务可以禁用中断。(该模式的默认行为可能会被系统控制寄存器覆盖,即可设置)
- 10B : Supervisor Mode :允许访问所有外围设备。它允许对核心寄存器和受保护的外围设备进行读写访问。这个级别的任务可以禁用中断

2.1.2 用户模式下指令及寄存器访问权限设置(SYSCON系统控制寄存器)
- U1_IOS:控制外设寄存器访问权限(User_1 Mode)
- U1_IED:指令访问/执行权限使能(User_1 Mode)

2.3 错误处理机制
在违背内存保护范围进行访问相应地址时(或者其他行为),会触发相应的Trap(内存保护属于其中的class 1)。在此基础上存在TIN(Trap Identification Number),用于定位更具体的错误原因,如图所示

注意:
基于范围的存储保护系统(MPU)产生三个陷阱,每个陷阱对应三个保护模式寄存器位:
- MPW trap = WE bit (MPW = memory protection write)
- MPR trap = RE bit (MPR = memory protection read)
- MPX trap = XE bit (MPX = memory protection execute)
2.4 寄存器操作指令说明
2.4.1 相关寄存器操作指令
如图所示 ,内存保护寄存器、PSW以及SYSCON这些与内存保护相关寄存器属于特殊功能寄存器(CSFRs),并且此类寄存器操作需要特殊指令(MTCR:写入指令、MFCR:读出指令)


2.4.2 写入指令(MTCR)
MTCR(Move To Core register): 数据写入寄存器
该指令包含两个参数:
- 寄存器地址(从芯片手册获取)
- 写入的值
例:MTCR(RegAddr, RegVaule);
2.4.3 读出指令(MFCR)
MFCR(Move From Core register) 从寄存器读出数据
该指令包含一个参数:
- 寄存器地址(从芯片手册获取)
例:RegVaule = MTCR(RegAddr );
上一篇 | 返回主目录 | 下一篇