引导(Boot)
1. 介绍¶
本章介绍系统引导顺序并提供有关引导选项的详细信息。
当硬件复位序列完成时,唯一可用的处理器内核是 HSE_H 子系统中的 Cortex-M7 内核,称为 HSE_H 内核。 HSE_H 内核开始执行来自包含 BootROM 固件的 HSE_H ROM 模块的固件。 BootROM 固件管理启动顺序,直到它根据启动类型将控制权交给其他代码:
- 在非安全启动中,固件将控制权传递给在 HSE_H 子系统外部的处理器内核上运行的客户软件。
- 在安全启动中,固件将控制权传递给在 HSE_H 内核上运行的 HSE_H 固件。
2. 特性¶
BootROM 引导客户应用程序和 HSE_H 固件。为了安全启动,它创建了信任链根。
BootROM 支持以下功能:
- 从外部闪存启动
- 安全和非安全启动模式
- 为客户应用选择启动内核
- 串口下载
- 设备配置数据(DCD)的执行
- 客户提供自测数据的配置和启动
- 芯片生命周期状态的推进
- 调试质询/响应认证
- 从待机/低功耗模式启动
- 从备份程序映像启动
3. 引导模式¶
该芯片支持两种启动模式:
- 串行启动模式(来自 UART、CAN)通常用于开发和工厂线编程。可以通过熔断 DIS_SER_BOOT 保险丝来禁用串行启动模式。
- 从外部闪存(从 QuadSPI 闪存、SD 或 MMC)启动通常用于生产设备。
复位时,HSE_H 内核的 BootROM 代码配置引导模式,包括内存类型、速度等。 它根据 FUSE_SEL 熔丝状态从 RCON 引脚或熔丝执行此操作。
以下输入的组合控制引导模式:
- 启动模式引脚(BOOTMOD1 和 BOOTMOD2)
- FUSE_SEL 保险丝(禁止使用 RCON 并强制基于保险丝的引导)
- 生命周期状态(屏蔽一些仅对特定生命周期状态有效的启动模式)
启动模式引脚值在 RESET_B 信号无效之前被锁存,从而能够从芯片外部选择所需的启动模式。
3.1. 串行启动模式¶
串行引导模式允许将应用程序代码下载到 SRAM。 串行启动有许多可能的用途,但两个主要用例是:
- End-of-line 闪存和熔丝编程
- 恢复无法正确启动的芯片(无响应模块)
3.1.1. End-of-line编程¶
在生产线上的一个新芯片中,闪存没有被编程,所有的保险丝都没有烧断。为了使设备可用,必须对闪存进行编程,并以所需的配置熔断保险丝。串行引导模式支持将初始客户应用程序和数据下载到未编程的设备。
3.1.2. 无响应模块¶
无法启动的模块(例如:由于软件编程错误、闪存故障或生产过程中的 PCB 故障)表明芯片没有响应。串行引导模式提供了一种将可执行恢复软件下载到 SRAM 的机制。 例如:下载的可执行文件可以重新编程闪存或者可以执行诊断代码以确定故障原因。
从保险丝和 RCON 启动¶
BootROM 支持从多个接口启动。为了配置接口以满足应用程序要求,BootROM 需要一种机制,通过该机制可以将信息传递到 BootROM。BootROM 支持两种这样的机制:
- 保险丝
- RCON
以下部分提供了这些机制的详细信息。
从保险丝引导¶
从保险丝(Fuse)启动是做为最终产品设备配置启动过程的主要方法。在这种方法中,引导代码从三个熔丝字,BOOT_CFG1,BOOT_CFG2 和 BOOT_CFG3 中获取引导配置数据。
有关保险丝的详细信息,请参阅随附的保险丝图电子表格。电子表格中的引导 ROM 熔丝说明选项卡提供了 BOOT_CFGn 熔丝的详细视图。引导熔丝字在 BOOT_CFG_LOCK 下进行了描述,并且必须由应用程序编程。通过熔断 FUSE_SEL 保险丝并在复位期间将 BOOTMOD1 和 BOOTMOD2 引脚拉至所需状态,选择从熔丝启动机制。
从 RCON 引导¶
在应用程序开发过程中,您可能会多次更改引导配置才能达到最终版本。烧断引导配置保险丝后,您将无法更改配置。如果配置有误,设备可能无法启动。 BootROM 支持传递配置参数的机制。该机制称为从 RCON 引导。
从 RCON 引导使您能够在开发期间更改引导配置而无需熔断保险丝,因为 RCON 引导配置数据位于芯片外部。这种启动机制主要在开发过程中很有用,可以在熔断保险丝之前测试各种启动配置,从而最终确定配置。
BootROM 支持从并行 RCON 和串行 RCON 引导,如以下部分所述。
从并行 RCON 引导¶
RCON 使用多达 32 个通用 I/O 引脚(RCON[0] 至 RCON[31]),这些引脚在功能复位无效时被锁存。
RCON[31:0] 逐位对应熔丝字 BOOT_CFG1[31:0] 中的值。每次复位时,芯片都会读取 32 个 I/O 焊盘并将它们的值加载到 SRC 模块的 BOTT_GPR_BMR1 寄存器中,供 BootROM 稍后使用。
RCON[31:0] 包含在开发过程中可能会多次更改的配置参数。 BOOT_CFG2 和 BOOT_CFG3 熔断字包含不需要测试多个配置的配置参数。
在开发板上,32 个 I/O 中的每一个都需要拨码开关和模拟隔离门才能在复位后正常工作。
从串行 RCON 启动¶
一种基于串行 EEPROM 的 RCON 方案(称为串行 RCON)可用。 与并行 RCON 不同,串行 RCON 不需要用于 32 个 I/O PAD 和模拟门的 DIP 开关,从而节省了大量的电路板面积。
串行 RCON 需要一个通过 I2C 与芯片通信的外部串行 EEPROM。 作为引导过程的一部分,从外部 EEPROM(前 4 个字节,从偏移量 0h 开始)获取 32 个复位配置位。 I2C 每次读取传输一个字节的数据,BootROM 读取前 4 个字节。 BootROM 在第一次读取时期望 RCON[7:0],在第二次读取时期望 RCON[15:8],在第三次读取时期望 RCON[23:16],在第四次读取时期望 RCON[31:24]。 因为 I2C 首先传输最高有效位,所以保持小端格式的值。
芯片工作在主机模式,外部串行 EEPROM 必须处于从机模式。 SCL 和 SDA 线配置为开漏模式。
在主机模式下,I2C 从 XBAR_DIV3_CLK 驱动 SCL 时钟。 I2C 在系统时钟切换到 PLL 之前被初始化。内部总线时钟速率 (IBFD[IBC]) 编程为 0Fh,有效 SCL 频率为 8 MHz/68 = 117.67 kHz。 有关相应的 I2C 时序定义,请参阅内部集成电路 (I2C) 章节中的 I2C 分频器和保持表。
设备地址应设置为 0xA0。
RCON 模式选择¶
RCON[8] 值决定启用哪种 RCON 模式:
- RCON[8] = 1 表示 I2C EEPROM 连接到 RCON[7:8],并且必须从 EEPROM 读取 32 位配置数据(请参阅从串行 RCON 启动)。
- RCON[8] = 0 表示所有 32 个并行 RCON 引脚都用于启动配置(请参阅从并行 RCON 启动)。 串行 RCON 使用两个引脚进行配置:
- RCON[7] 是 I2C SDA 信号。
- RCON[8] 是 I2C SCL 信号。 它还向 BootROM 指示 RCON 是要使用 32 个并行 I/O 还是串行 I2C 设备。
选择从保险丝启动或从 RCON 启动¶
从 RCON 引导是一项在未编程设备上启用的开发功能,因此您无需执行任何操作即可选择它。当您决定在应用程序开发期间使用从 RCON 引导时,您只需在并行 RCON 和串行 RCON 之间进行选择。有关详细信息,请参见 RCON 模式选择。
开发完成后,建议通过执行以下步骤强制芯片始终从熔丝启动:
- 用适当的值烧断 BOOT_CFGn 保险丝。
- 烧断 FUSE_SEL 保险丝以永久禁用从 RCON 启动。在生产线的下线编程期间,您可以通过串行引导执行此步骤。
- 在复位期间将 BOOTMOD 引脚拉至所需状态。有关 BOOTMOD 引脚状态,请参见表 132。
程序映像¶
本部分描述了您必须包含在芯片程序映像中的一组映像。 程序映像包括:
- 映像向量表(IVT)
- 设备配置数据 (DCD)
- 自测 DCD
- 应用启动镜像
- 串行引导映像
图像向量表 (IVT)¶
IVT 是 BootROM 从引导设备读取的第一个映像。IVT 包含所需的数据组件:映像入口点、指向设备配置数据 (DCD) 的指针以及引导过程中 BootROM 使用的其他指针。 IVT 的位置是 BootROM 唯一固定的要求。图像内存映射的其余部分是灵活的,并且可以通过 IVT 的内容进行追踪。下表定义了每个引导设备的设备基地址和初始加载区域大小的 IVT 偏移量。
BootROM 期望指向 DCD、自测试 DCD、应用程序映像和 HSE_H 固件映像的指针对于 QuadSPI 引导是 8 字节对齐的,对于 μSDHC 引导是 512 字节块对齐的。
设备配置数据 (DCD)¶
复位时,所有模块寄存器都具有默认值。这些设置通常不是实现最佳系统性能的理想选择。此外,一些外围设备必须先配置才能使用。DCD 是 BootROM 用来配置设备外设的 DCD 映像中包含的配置信息。BootROM 根据 IVT 中的指针确定 DCD 表的位置(参见表 134)。表 140 显示了 DCD 图像结构——允许的 DCD 命令的大端字节数组。 DCD 图像的最大大小为 8192 字节。
DCD命令¶
DCD 数据由三个命令组成:
- 写数据
- 检查数据
- NOP
Write Data command¶
Use the Write Data command to write a list of 1-byte, 2-byte, or 4-byte values (or bit masks) to a corresponding list of target addresses. The Write Data command structure is a big-endian byte array as shown in the table below.