详细介绍RH850U2A芯片相关的功能

前言
rh850u2a芯片是瑞萨公司针对电控类域控制器而发布的一块最新mcu芯片,功能及其强大。本系列文章讲详细介绍rh850u2a相关的功能,本文为rh850u2a-mpu功能详解。
正文
1.mpu功能简述
mpu保护与当前执行的代码“不相关“的所有数据。“不相关”是相关内存地址的权限受限制,或者是程序访问内存地址的范围于其无关,阻止关键数据被破坏,使嵌入式系统更加健壮与安全。
mpu作用主要有两个方面:为两个保护,一个检测。
1)mpu的保护作用
指访问区域的保护和读写区域的保护。
① 访问区域的保护。
可以将内存区域划为特权区域和普通区域,特权区域只有特权用户才能访问,普通用户被禁止访问,以此来保护特定的数据。
常见的应用场景:
1> 对带系统的来说,可以设置数据,以防止用户应用程序破坏操作系统使用过程中的数据。
2> 隔离任务,以防止一个任务访问其他任务的数据。
3> 将sram或者ram空间定义为不可执行,防止代码注入。
② 读写区域的保护。
设置指定的区域为只读,可以有效的防止比较关键的数据被错误修改。
2)mpu的检测功能
指可以检测堆和栈的溢出情况及数组有没有越界。
功能安全中对内存分区mpu的相关描述:汽车ecu软件是高度模块化的嵌入式软件,其功能实现是可以为非功能安全,和功能安全的swc组合,它们分别拥有不同的asil安全等级。
根据iso26262,如果嵌入式软件包含不同asil等级的swc,要么整个软件工程都需要基于最高安全等级的要求进行开发,需要保证拥有更高安全等级的swc的操作不会受到其他swc的干扰,也即需要做到ffi(freedom from interference)的设计。
基于更低安全等级要求开发的swc,可能会出现错误地访问到更高安全等级swc的内存区域,产生干扰。
为此,swc需要运行在不同的内存区域,或者不同的内存分区,来防止类似的内存访问违例。
iso26262中,以下内存相关的故障影响被视为swc之间产生干扰的原因:
-内容损坏
-读写区域属于另一个swc
-数据不一致
-栈溢出或栈下溢
要满足上述定义,是mpu内存保护的目标, 也可以通过限制对于内存以及内存对应的硬件的访问。
这里的内存分区意味着:
各os application运行在相互保护(不干涉)的内存区域 ,在某一个分区上运行的代码,无法修改另一个分区的内存。
内存分区也可以保护只读内存段(例如代码执行)以及内存对应的硬件。
内存分区和用户/特权模式可以保证swc之前互不干扰——即使某一个swc出现了内存相关的故障,也不会对其他软件模块有影响。
如果一个swc运行在用户模式,那么它对cpu资源/指令的访问也是受限制的。
mpu的微控制器有专用的硬件:即内存保护单元(mpu),来支持内存分区。
2.rh850内存保护单元架构
rh850u2a芯片具有内存保护/保护功能,防止对内存数据的错误访问,并控制外围模块的寄存器。下图1显示了内存保护的整体架构。每个可编程核心(总线主机)都有一个内存保护单元(mpu),它定义了软件访问保护。此外,每个资源(总线从设备)都有一个守卫来控制任何总线主设备的访问,包括那些没有mpu的,比如dma。
3.使用rh850u2a的mpu
3.1 rh850u2a的mpu配置过程
1)第一步,配置mpidn寄存器。在使能了mpu功能后,哪些硬件模块还可以访问所有的内存保护区域。
2)第二步,配置mpidx寄存器。配置每一个内存保护块的时候,需要先配置mpidx寄存器直没entry id。
3)第三步,配置mpla寄存器。配置每一个内存保护块的minimum地址。
4)第四步,配置mpua寄存器。配置每一个内存保护块的maximum地址。
5)第五步,配置mpat寄存器。配置每一个内存保护块的user/svp模式下的可读、可写、可执行的属性。
6)第6步,配置mpm寄存器。使能mpu功能。
3.2 rh850u2a-mpu相关寄存器配置使用的指令
使用 void __ldsr(int regid, int selid, unsigned int val);
note: 什么是寄存器的regid和selld? -- __ldsr()函数接受一个32位整数参数(作为它的最后一个参数),并将其存储到系统寄存器中,与它的第一个参数指定的数字相对应,该参数必须立即是一个常量。在rh850和以后的处理器上,它还需要另一个参数,该参数指定寄存器组号,它必须立即是一个常量。简单来讲regid就是寄存器id,selld就是寄存器所在的组id。
3.3 配置mpid寄存器
mpid寄存器配置哪一些模块可以直接访问内存保护区域。
下表记录了有哪些spid可以配置为直接访问内存保护区域。
示例:__ldrs(24, 5, 0)//cpu0可以访问保护区域
3.4配置mpidx寄存器
每一个内存保护块都有一个idx(最多32个,0-31),在配置每一个内存保护块的访问属性的时候,首先要配置mpidx寄存器。
示例:__ldrs(16,5,0);//通过mpidx寄存器配置第一个entry的idx。
3.5配置mpla寄存器
mpla配置当前内存保护块(mpidx == 0-31)的起始地址(minimum address)。
示例:__ldrx(20,5, 0x00007f00);
3.6配置mpua寄存器
mpla配置当前内存保护块(mpidx == 0-31)结束地址(maximum address)。
示例:__ldrs(20,5,0x00017ffc);
3.7 配置mpat寄存器
mpat寄存器配置每一个内存保护块的访问属性(user模式下的可读ur、可写uw、可执行ux; supervisor模式下的可读sr、可写sw、可执行sx)。
3.8 配置mpm寄存器
使能(enable)mpu功能。
4.内存保护单元mpu异常提示信息
4.1 mdp/mip exception
产生内存保护后会产生mip/mdp exception(异常中断地址偏移,0x90,如果我们设置ebase为0x00080000,那么异常中断的绝对地址就是0x00080090)。
在mip/mdp exception的异常中断处理函数汇总一般会条用_os_abort触发os调用shutdownhook函数,在这个函数里面我们可以做一些故障信息保存动作。
4.2 mea和mei寄存器
产生了mip/mdp异常之后,mea寄存器会存储异常地址,mei寄存器会存储异常指令。
5.总结
本文介绍了mpu的基本原理,以及结合rh850u2a芯片详细介绍了mpu的配置使用过程,同时介绍了mpu保护功能产生后如何去识别异常信息。mpu在实际项目功能中非常的有用,如果使能了mpu,同时能通过有效的方法记录mpu异常中断时的mei/mea寄存器的信息,那么在发生了异常复位后就能通过历史信息来定位复位的swc(实际项目中不可能一直都有仿真的机会,所以这个功能非常的重要)。
note: mpu的配置及使能一般都是在ecum_init之前完成。


谁会是未来区块链智慧城市的典型代表
intouch如何快速建标记名_intouch如何建立SuperTag标记名
如何才能从人工智能项目中挖掘商业价值
两脚晶振和三脚晶振的区别
食品检测设备的具体使用方法是怎样的
详细介绍RH850U2A芯片相关的功能
常用的几种液位传感器的应用及原理
如何选择适合我们自己应用的压电纳米定位台
绝缘油耐压测试仪的使用要注意什么
新能源汽车销售火热的背后,成本还可以降低多少?
研华科技针对嵌入式主板推出全新MI/O Extension解决方案
安科瑞ABAT100蓄电池在线监测系统的功能介绍
蔚来汽车加速换电站布局,累计建设2300座
采用嵌入式技术的智能锁会不会取代传统智能锁
物联网技术如何融合到智慧城市当中去
基于ANSYS Workbench平台的变压器噪声仿真及解决方案研究
怎么分清冰箱不同能效概念
打气泵方案主控芯片CMS8H1213
全球最大LED屏幕4K+5G直播圆满成功 促进5G与LED显示屏不断融合发展
iPhone8什么时候上市?iPhone8最新消息:iPhone8真机长这样,网友表示不要再爱!