Tricore TC1.6.2内核关于MPU(内存保护单元)的原理及应用实践

目录

一、版本控制

二、功能概述

三、主要模块

(一)Protection Ranges

(二)Access Permission

(三)Protection Sets

(四)PSW.PRS

(五)SYSCON.PROTEN

(六)DMI

四、功能实践示例

五、参考文档

一、版本控制

版本

撰写日期

撰写记录

字体颜色

V1.0

2023.12.09

以当前时间点对英飞凌TC1.6.2内核MPU模块的认识及实践,撰写了此文档,旨在阐述TC1.6.2内核关于MPU模块的实现原理及应用实践过程。

黑色(有部分红色字体仅为辨识突出)

二、功能概述

        MPU模块采用了硬件机制,可实现用户指定的内存范围免受未经授权地数据读取、数据写入和指令访问;在配置MPU的过程,就是赋予一些对象对一些内存区域一定的数据和代码访问权限,当一些对象访问了一些未经授权的代码和数据时,就会产生MPU Trap。   

三、主要模块

        按照TC1.6.2内核关于MPU的实现原理,可分为以下几个主要模块来分开阐述,以便更好地理解TC1.6.2内核如何有效、高效地实现内存保护。

(一)Protection Ranges

  • MPU保护的内存范围有两种,一个是数据,一个是指令,每个内存范围有低地址和高地址,从而实现特定范围。

  • 每个CPU内核可设置的数据和代码的保护范围有多个,数量从4到32个不等,不同的系列芯片有所不同;
  • 数据内存保护范围的起始地址和结束地址是8字节对齐的,所以可以看到相应寄存器的低3位是Reserve的。
  • 指令内存保护范围的起始地址和结束地址是32字节对齐的,所以可以看到相应寄存器的低五位是Reserve的。

(二)Access Permission

  • MPU针对每个设定的内存范围,数据有读和写的权限设置,指令有执行的权限设置。

  • DPRE和DPWE的各位控制了对应的数据内存范围的读和写的权限,CPXE的各位控制了对应的指令内存范围的执行权限。

(三)Protection Sets

  • 每个CPU内核有保护集的概念,保护集的数量从1-8个不等,不同系列的芯片有所不同;
  • 每个保护集都有DPRE/DPWE/CPXE这三个寄存器,可以实现特定的内存保护策略;
  • 保护集允许了不同保护策略的快速切换,当更换权限模式和用户任务时。

(四)PSW.PRS

  • 程序运行状态字寄存器PSW的位域PRS控制了此时有效的保护集;

(五)SYSCON.PROTEN

系统配置寄存器SYSCON的PROTEN位用来使能当前核的内存保护功能。

(六)DMI

  • 数据存储器接口(DMI)向CPU提供数据值并存储CPU提供的数据值;
  • 每当发生数据存储器保护陷阱时,DSTR(数据同步陷阱寄存器)和DEADD(数据错误地址寄存器)都会更新;
  • 发生了数据访问错误时,会在DMI寄存器DSTR的位域MPE置位,DEADD寄存器会显示错误发生的地址。

四、功能实践示例

        理解以上所述的主要模块后,编辑代码做一个简单的功能实践,总体的步骤有:

1.  根据需求设置Protection Ranges,包括代码和数据;

2.  在特定的保护集设置各个内存保护区间的访问权限,即设置Access Permission,包括代码的执行权限,数据的读、写权限。

3. 设置PSW的PRS位域,选择特定的保护集;

4. 设置系统配置寄存器SYSCON.PROTEN == 1,使能内存保护。

需要注意的是,这些内核特殊功能寄存器(CSFR)的读写应使用MFCR指令读取,使用MTCR指令写入。

设置CPU0对数据MPU_Test_Data[0]~MPU_Test_Data[5]的内存空间没有写权限,但有程序给MPU_Test_Data元素赋值时,发生MPE故障,如下图所示:

MPE表示DMI发生了内存保护故障,故障的地点在0x70000450,正合适是MPU_Test_Data[0]~MPU_Test_Data[5]所在的内存空间:

五、参考文档

1.《TC3xx User Manual part1.pdf》

2.《TC3xx Architecture vol1.pdf》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值