《S32G3系列芯片——Boot详解》系列——S32G3系列芯片Serial Boot功能详解!★★★
- 一、Serial Boot模式概述
- 二、串行下载协议
- 2.1 基于UART和CAN的下载协议概述
- 2.2 基于FlexCAN的Serial Boot
- 2.2.1 IO配置
- 2.2.2 时钟配置
- 2.2.3 通信波特率
- 2.2.4 基于FlexCAN的Serial Boot通信流程
- 2.3 基于UART的Serial Boot
- 2.3.1 UART IO配置
- 2.3.2 时钟配置
- 2.3.3 通信波特率
学习更多Boot相关内容,获取HSE基于IVT安全启动方案?
>>>>>>>>> 返回专栏总目录 《S32G3系列芯片——Boot详解》<<<<<<<<<
Tip📌:
鼠标悬停双虚线关键词/句,可获得更详细的描述;
建议按照专栏文章目录顺序依次阅读以便了解相关背景知识。
一、Serial Boot模式概述
所谓"串行启动"模式是指允许系统通过串行接口如CAN或UART从外部源加载启动代码。这种模式可以通过BOOTMOD输入引脚的配置进入;此外,当功能复位计数器的值达到或超过8时也会自动启动这种模式。推荐先阅读《S32G3系列芯片Boot流程详解!》。
在"串行启动"模式下,BootROM会配置HSE_H软件看门狗(SWT)以60秒超时,然后持续轮询所有可用的接口以检测活动。如果在60秒内没有检测到任何活动,系统将重置。BootROM会依次检查所有可用接口,一旦检测到活动,即选择该接口作为下载接口。
Tip📌:如果LC状态是CUST_DEL,BootROM会禁用HSE_H SWT。在串行启动期间,BootROM使用外部振荡器(XOSC)作为串行接口的时钟源。LIN_CLK和CAN_CLK的时钟源是通过XOSC连接的外部时钟。
BootROM串行启动时序流程如下图所示:
——关于其中的XOSC配置
在嵌入式系统中,外部振荡器(XOSC)是一个关键组件,用于提供系统时钟。在串行启动过程中,BootROM 会使用 XOSC 作为串行接口(如 LIN 和 CAN)的时钟源。XOSC 可以工作在多种模式下,并且每种模式都需要特定的配置来保证时钟稳定性。
Tip📌:LIN(Local Interconnect Network)和 CAN(Controller Area Network)是常见的车辆网络通信协议,它们通常用来在车辆的不同电子控制单元(ECU)之间进行通信。在串行启动模式下,这些接口的时钟(LIN_CLK 和 CAN_CLK)是从连接到 XOSC 的外部时钟源派生的。
为了确保 XOSC 正确配置并能够为 LIN 和 CAN 接口提供稳定的时钟,BootROM 必须提供有关连接在 ECU 上的时钟源的配置细节。
在系统上电或复位之后,BootROM 将执行初始的系统配置,包括时钟配置。BootROM 会根据提供的配置信息正确地设置 XOSC,并确保从 XOSC 派生的 LIN_CLK 和 CAN_CLK 时钟稳定可靠。这一过程对于保证系统在动过程中能够正确地执行其余的初始化和配置任务是至关重要的。如果时钟源配置错误,可能会导致串行接口法正常工作,进而影响整个系统的启动过程。
BootROM通过FlexCAN、UART进行serial download的时序流程协议如下图所示:
二、串行下载协议
2.1 基于UART和CAN的下载协议概述
该串行下载协议包括几个阶段,如果是非安全启动,会跳过条件标记为"安全启动"的阶段。各阶段简要描述如下表所示:
序号 | 阶段 | 描述 | 大小(字节/十六进制) | 条件 |
---|---|---|---|---|
1 | Initialization | BootROM配置时钟、模块,并设置60秒的软件看门狗SWT。 如果LC状态是CUST_DEL,则禁用SWT。 | - | - |
2 | Association | BootROM轮询检测传输通道的活动,直到接收到标记FEED_FACE_CAFE_BEEFh。 任何不正确的数据将被丢弃。 | 8h | 总是 |
3 | Non-secure header | BootROM从选中的传输通道读取前40h字节镜像,并从中提取RAM起始指针、 入口指针和代码大小。BootROM还从代码长度字的最高位提取NO_ECHO字段 (镜像的下载地址必须是64bit对齐的,此外这个下载数据只能下载到系统内部RAM里,因此数据大小不能超过RAM大小) | 40h | 总是 |
4 | Secure header | BootROM读取镜像的接下来1200h字节,其中包含NSK公钥、CSK公钥和CSK签名。 | 1200h | 安全启动 |
5 | Code download | BootROM下载指定长度的串行代码,并将其存储在指定位置。 | 代码长度 | 总是 |
6 | Public signature | BootROM读取图像的公钥签名,用于认证镜像。 | 100h | 安全启动 |
7 | Execution | 成功下载整个镜像后,Cortex-M7_0核将被启用,并将复位矢量指向入口指针。 在启用该核之前,将启用默认配置的看门狗SWT_0。由应用程序负责看门狗的处理。 | - | - |
在执行安全启动时,镜像下载后,BootROM首先根据选择的认证模式对镜像进行认证。接收到的数据包可以选择是否回显。这取决于Non-secure header阶段读取的代码长度字中的NO_ECHO字段。默认情况下,所有数据包都会回显。如果NO_ECHO字段设置为1,则:
- 对于安全启动,从"Secure header"阶段开始,CAN数据包不会回显。
- 对于非安全启动,从"Code download"阶段开始,CAN数据包不会回显。
通过这个过程,BootROM能够安全地加载和验证启动代码,确保系统在启动过程中的完整性和安全性。这对于需要高度安全性的系统,如汽车或其他关键基础设施的嵌入式设备,尤为重要。
2.2 基于FlexCAN的Serial Boot
BootROM支持通过FlexCAN_0模块完成串行下载功能,此时芯片和镜像传输者之间通过CAN报文传递数据,BootROM只支持标准CAN,不能用FD CAN报文。
2.2.1 IO配置
在S32G3系列的芯片上,FlexCAN_0模块对应的IO如下所示,需要对其做相应配置:
2.2.2 时钟配置
FlexCAN 模块的时钟来源于一个名为 MC_CGM_0 clock Mux 7 selector 的时钟选择器。如下图所示:
Tip📌:在引导过程中,BootROM使用一个外部振荡器(XOSC)作为 CAN_PE_CLK(CAN 物理层时钟)的源。如果 XOSC 初始化失败,系统会自动选择 FIRC(快速内部参考时钟)作为替代的时钟源。
2.2.3 通信波特率
波特率由两个因素决定:模块编程的时序参数,以及波特率时钟本身。FlexCAN 的波特率时钟是来自于 XOSC,正如上文所述。时序参数被编程以实现 XOSC 和 FIRC 两种时钟源下的共同比特率。对于 XOSC,不同频率的晶体会直接影响到比特率,比特率与波特时钟成正比关系。如下图所示:
2.2.4 基于FlexCAN的Serial Boot通信流程
主机根据串行下载协议,传输应用程序镜像(即程序代码和数据)。芯片(MCU)在 FlexCAN 接口上传输帧时所用的消息标识符(IDs)在下表中给出,并根据通信的阶段进行了分类。
综上描述的是在串行启动过程中,FlexCAN 模块如何通过特定的时钟源(首选 XOSC,备选 FIRC)来获取波特时钟,并根据这个时钟和预设的时序参数来确定通信的波特率,以确保数据传输的稳定性。此外,还提到了在程序通过串行下载协议传输期间,系统如何使用不同的消息标识符来区分通信阶段。
2.3 基于UART的Serial Boot
BootROM支持通过LINFlexD_0模块配置为UART模式完成串行下载功能,此时芯片和镜像传输者之间通过UART包传递数据。
2.3.1 UART IO配置
在S32G3系列的芯片上,UART对应的IO如下所示,需要对其做相应配置:
2.3.2 时钟配置
LINFlexD 模块的时钟来源于一个名为 MC_CGM_0 clock Mux 8 selector 的时钟选择器。如下图所示:
Tip📌:在引导过程中,BootROM使用一个外部振荡器(XOSC)作为 LIN_BAUD_CLK 的源。如果 XOSC 初始化失败,系统会自动选择 FIRC(快速内部参考时钟)作为替代的时钟源。
2.3.3 通信波特率
波特率由两个因素决定:模块编程的时序参数,以及波特率时钟本身。LINFlexD 的波特率时钟是来自于 XOSC,正如上文所述。时序参数被编程以实现 XOSC 和 FIRC 两种时钟源下的共同比特率。对于 XOSC,不同频率的晶体会直接影响到比特率,比特率与波特时钟成正比关系。如下图所示:
通信过程与上一节一致,都是基于通用的串行下载协议实现的通信流程,这里不再赘述。
>>>>>>>>> 返回专栏总目录 《S32G3系列芯片——Boot详解》<<<<<<<<<