原文始发于爱思考的发菜_汽车网络信息安全:瑞萨RH850/U2A系列架构讲解
1. 概述
RH850/U2A MCU是瑞萨电子跨域MCU的第一个成员,这是新一代汽车控制设备。基于28纳米(nm)制程技术,32位RH850/U2A汽车MCU建立在瑞萨电子RH850/Px系列(底盘控制)和RH850/Fx系列(车身控制)的关键功能基础上,以提供更高的性能。
MCU包括满足EVITA Full的安全功能,以增强对网络攻击的保护,使设备能够随着安全需求的发展而支持安全快速的全无等待无线(OTA)软件更新。
RH850/U2A MCU还配备了广泛的网络接口,使MCU能够处理ADAS和自动驾驶功能中多种类型传感器产生的大量传感器数据。这使客户能够支持未来的高速网络功能和先进的通信吞吐量要求。
RH850/U2A系列Flash Memory
Code Flash
— 容量:用户区(User Area)最大16 Mbytes,用户引导区(User Boot Area)最大 2x 64 Kbytes。
—多bank配置。
—程序单位:512字节
—Erase单位:每个User Area中8块为16Kbytes,剩余块为64Kbytes
—每个模块支持OTP (One Time Programmable)。
—支持bank间地址映射交换。
Data Flash
●数据区:
-容量:高达512千字节(两个数据区:256千字节+ 256千字节)和ICUMHA专用64K字节
-程序单元:4,8,16,32,64,128字节DMA可以多次启动4字节程序,无需软件开销。(在一个数据区域内)
-擦除单元:Nx 4kbytes (N = 1,2,3…)(在一个数据区域内)
DMA可以在没有软件开销的情况下多次初始化4字节程序。
(在一个数据区内)
-擦除单元:Nx 4kbytes (N = 1,2,3…)(在一个数据区域内)
●硬件属性区域:
本产品的设置可在“数据闪存”的“硬件属性区域”中进行配置。
硬件属性区包括配置设置区、扩展数据区、安全设置区、块保护区、开关区、TAG区和擦除计数器区。
-配置设置区:存放系统配置参数。(Flash选项字节,重置矢量,软件配置选项字节等)
-安全设置区域:用于存储安全参数。(ID代码,安全设置标志等)
-块保护区域:用于存储代码Flash保护设置。(OTP标志等)
-开关区域和TAG区域:以原子和健壮的方式更新配置设置区域,安全设置区域和块保护区域。
-擦除计数器区:用于存储擦除计数器。
-扩展数据区用于存储供用户软件使用的任何数据。
容量:2kb
程序单位:4、8、16、32、64、128字节
擦除单位:2kbytes
Switch区域的有效区域由:TAG区域中的VAF选择。
“配置设置区域”、“安全设置区域”和“块保护区域”的有效区域由:“交换区域”的有效区域中的CVA、SVA和BVA选择
刷写流程
启动过程
Overall Flow
启动进程的详细信息
1. Power-On上电(复位中断) : 上电时,程序计数器变成复位向量地址(复位段)。它从RESET Vector跳转到__start例程。
设备上电后,PE0启动。在PE0的处理中,如果ENABLE_PE1_BY_PE0为1, PE1被激活,ENABLE_PE2_BY_PE0为1, PE2被激活,ENABLE_PE3_BY_PE0为1, PE3被激活。
2. Initializing Registers 初始化寄存器
3. Clock Gearup Settings时钟Gearup设置: 启动PE0后,将系统时钟改为PLL,并执行时钟Gearup。
当满足以下所有条件时,该流程才会执行。
·ENABLE_CLOCK_GEARUP为1。
·正在运行的PE为PE0(PEID bit0:2(PEID)=0)
·主OSC和PLL启用(PLLS=0x00000003)
4. Module Standby Settings模块备用设置:设置要使用的功能的模块备用寄存器。
当满足以下所有条件时,该流程才会执行。
·ENABLE_MODULE_STANDBY_SET为1
·正在运行的PE为PE0(PEID bit0:2(PEID)=0)
5. Enabling PE1~3 使能PE1~3:使能PE1、PE2或PE3,将BOOTCTRL (PE1 bit1(BC1)、PE2 bit2(BC2)、PE3 bit3(BC3))对应的PEx位设置为1。
·启用PE1,设置1为ENABLE_PE1_BY_PE0。
·启用PE2,设置1为ENABLE_PE2_BY_PE0。
·启用PE3,设置1为ENABLE_PE3_BY_PE0。
·进程PE为PE0(PEID bit0:2(PEID)=0)
6. Initializing RAM Areas 初始化RAM区域:初始化本地RAM和集群RAM。
在本项目中,为了缩短启动时间,每个PE在指定的RAM地址区域内执行初始化。
7. Initializing RAM Areas 定时同步(PE0~PE3):正在进行的PE等待,以便其他PE可以同时进一步处理。
当满足以下所有条件时,该流程才会执行
·ENABLE_PE1_BY_PE0为1
·ENABLE_PE2_BY_PE0为1
·ENABLE_PE3_BY_PE0为1
8. Setting Interrupt Handler Address 设置中断处理程序地址:在表引用方法中设置一个基指针地址为INTBP。
要设置的基指针地址是EIINTTBL节的起始地址。
设置RBASE的初始值:(PE0,PE1: 0x00000000, PE2,PE3: 0x00800000)作为直接向量法的基址,因为通过寄存器初始化将“0”设置为PSW: bit15 (EBV)。
如果“1”设置为PSW: bit15 (EBV),则使用寄存器初始化时设置为EBASE的“0”。
当满足以下所有条件时,该流程才会执行。
•USE_TABLE_REFERENCE_METHOD为1。
9. Setting Each Pointer 设置每个指针: 设置堆栈指针、全局指针和元素指针。
每个指针需要设置的值如下:
·堆栈指针
如果正在运行的PE为PE0,则为_stacktop_pm0的地址(PEID bit0:2(PEID)=0)。
如果正在运行的PE为PE1,则为_stacktop_pm1的地址(PEID bit0:2(PEID)=1)。
如果正在运行的PE为PE2,则为_stacktop_pm2的地址(PEID bit0:2(PEID)=2)。
如果正在运行的PE为PE3,则为_stacktop_pm3的地址(PEID bit0:2(PEID)=3)。
·全局指针。
__gp_data的起始地址
·元素指针
__ep_data的起始地址
10. Setting RAM Areas 设置RAM区域
__INITSCT_RH例程初始化。data节(带有初始值的RAM节)和。bss节(没有初始值的RAM节)。
通过调用__INITSCT_RH例程,将初始值为参数寄存器的RAM节的初始化表的起始地址和结束地址设置为参数寄存器(r6和r7),以及将初始值为参数寄存器的RAM节的初始化表的起始地址和结束地址设置为参数寄存器(r8和r9),可以将数据从ROM复制到。data节并将。bss节清除为零。
具有初始值的RAM节的初始化表需要位于. init_dsec中。const部分。
以及拷贝源ROM段的起始和结束地址
并且需要将复制目的RAM段的起始地址设置到表中。
没有初始值的RAM段的初始化表需要位于. init_bsec中。const部分。
并且需要将清除的RAM段的起始地址和结束地址设置到表中。
11. Setting Coprocessor 设置Coprocessor:设置“1”为“FEPSW bit16 (CU0)”,使能FPU。
如果不需要配置FPU板,请将“0”设置为“PSW bit16 (CU0)”。
12. Calling a Main Function of User Application 调用用户应用程序的主函数:程序计数器转换到用户应用程序的主函数:
如果运行的PE为PE0(PEID bit0:2(PEID)=0),则为_main_pm0。
如果正在运行的PE为PE1(PEID bit0:2(PEID)=1),则为_main_pm1。
如果正在运行的PE是PE2(PEID bit0:2(PEID)=2),则为_main_pm2。
如果正在运行的PE为PE3(PEID bit0:2(PEID)=3),则为_main_pm3。