《S32系列芯片——Boot详解》系列——带有HSE组件的S32系列芯片中各子系统如何依次启动?
- 一、各子系统的重置释放顺序
- 二、启动流程
- 2.1 安装启动过程
- 2.2 正常启动流程
博主已开通同名公众号,通过文末或主页二维码关注博主,将为你推送最新、最细、最硬核的车载系统知识和嵌入式开发知识!
学习更多Boot相关内容,获取HSE基于IVT安全启动方案?
>>>>>>>>> 返回专栏总目录 《S32系列芯片——Boot详解》<<<<<<<<<
Tip📌:
鼠标悬停双虚线关键词/句,可获得更详细的描述;
建议按照专栏文章目录顺序依次阅读以便了解相关背景知识。尤其建议先通读下:
《Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?》和 《S32系列芯片Boot流程详解!》
本文中的很多细节其实没必要做深入了解,毕竟我们只是使用HSE固件提供的各种服务,而不是深究这项服务到底是如何实现的。
一、各子系统的重置释放顺序
在设备启动时,不同的CPU子系统会按照特定的顺序和条件从重置状态中释放(运行起来)。各个子系统的释放顺序描述如下:
- HSE子系统:HSE是唯一在上电后无条件运行的CPU子系统。
- 其他子系统的释放:其他CPU子系统的运行依赖于HSE的配置,这是在启动之前定义的,具体情况会根据BOOT_SEQ的值而变化。运行条件如下所示:
BOOT_SEQ | CPU子系统释放条件 | 释放条件说明 |
---|---|---|
BOOT_SEQ == 0 | BOOT_TARGET (在IVT中指定) | 无条件释放 |
BOOT_SEQ == 1 | core reset table (在SYS-IMG中定义) | 根据安全内存区域(SMR)的表的定义释放 |
- 当
BOOT_SEQ
为0时,HSE会根据IVT中的BOOT_TARGET无条件释放特定CPU子系统使其运行。 - 当
BOOT_SEQ
为1时,释放各个子系统的条件由core reset table定义,core reset table存储在安全内存区域中。
关于上面BOOT_TARGET的概念详见:《Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?》一文中的 “BCW和LCW的结构” 小节。
二、启动流程
在启动时,HSE可以执行正常启动或安装启动,取决于以下几个因素:
- IVT的存在:检查IVT是否存在。
- FW-IMG的存在:HSE固件映像是否存在。
- 是否需要安装FW-IMG:是否需要更新HSE固件。
如果IVT_AUTH设置为1,那么在使用IVT之前,必须先通过HSE的特定的服务进行身份验证。启动流程如下所示:
2.1 安装启动过程
在安装启动过程中,HSE执行以下步骤:
- 从应用的非易失性存储器中读取加密且经过身份验证的FW-IMG。
- 解密FW-IMG,并将解密后的图像存储在受保护的系统RAM中。
- 确认解密后的镜像的真实性(完成校验认证)。
- 将经过验证的固件程序写入HSE的代码闪存区域。
- 删除存储在受保护的系统RAM中的明文图像,以保护系统安全。
FW-IMG的源地址可以由IVT提供,或者通过将FW-IMG放置在IVT的第一个位置IVT_START来指定。点击查看IVT的结构:《Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?》。
2.2 正常启动流程
在正常启动流程中,HSE执行以下操作:
- 加载并解析IVT。
- HSE不会启用XRDC(扩展区域保护控制器),而是配置一些MRGD(内存资源组定义)以获得对其安全区域的访问。
- 如果安全NVM中存在HSE固件,HSE将运行该固件;如果没有,将进入等待中断模式(WFI)。
BOOT_SEQ和BOOT_TARGET参数控制CPU子系统的释放,从而使应用程序能够执行。在释放主机之前,如果SWT(看门狗定时器)设置为1,应用程序看门狗也会被启用。
>>>>>>>>> 返回专栏总目录 《S32系列芯片——Boot详解》<<<<<<<<<