BootROM
本章详细介绍了BootROM 相关的特性及应用。
1 概述
BootROM 为该芯片上电后执行的第一段程序, 它支持如下功能:
- 从Serial NOR FLASH 启动
支持代码在FLASH 上原地执行代码
- 从SD卡/eMMC 启动
从SD卡/eMMC设备启动,加载程序到内部RAM 执行
- 设备固件更新(DFU)
支持UART0自动波特率检测
支持对连接在SPI0和SPI2上的Serial NOR FLASH 编程
支持对连接在SDIO0/HS_SDIO 上的SD卡/eMMC编程
支持对片上eFuse编程
支持加载程序到内部RAM执行
- 安全启动
支持ED25519+SHA256的算法组合模式
支持ED25519+AES-CBC+SHA256的算法组合模式
支持SM3+SM2的算法组合模式
支持SM3+SM4-CBC+SM2的算法组合模式
支持RSA2048+SHA256的算法组合模式
支持RSA2048+AES-CBC+SHA384的算法组合模式
支持RSA4096+SHA384的算法组合模式
支持RSA4096+AES-CBC+SHA384的算法组合模式
支持ED25519+SHA256+FRTDEC的算法组合模式
支持RSA2048+SHA256+FRTDEC的算法组合模式
支持RSA4096+SHA384+FRTDEC的算法组合模式
支持SM2+SM3+FRTDEC的算法组合模式
2 启动流程
本章介绍BootROM 启动相关的流程。 BootROM 支持如下启动模式:
SPI NOR FLASH启动模式
eMMC/SD卡 启动模式
设备固件更新(DFU)
启动流程图
2.1 启动模式配置表
下表详细说明了T0芯片的不同启动模式配置及其对应的启动行为:
- Boot PIN可以让系统从不同的区域启动,T0 有四个Boot PIN,分别是
PAD_IOMUX_156
PAD_IOMUX_157
PAD_IOMUX_158
PAD_IOMUX_159
四个Boot PIN各种配置,启动区域如下表所示。
PAD_IOMUX_156 |
PAD_IOMUX_157 |
PAD_IOMUX_158 |
PAD_IOMUX_159 |
启动模式 |
BOOT PIN |
|---|---|---|---|---|---|
0 |
0 |
0 |
0 |
DFU |
0 |
0 |
0 |
0 |
1 |
ILM |
1 |
0 |
0 |
1 |
0 |
FLASH0 |
2 |
0 |
0 |
1 |
1 |
FLASH2 |
3 |
0 |
1 |
0 |
0 |
SDIO-SD |
4 |
0 |
1 |
0 |
1 |
SDIO-eMMC |
5 |
0 |
1 |
1 |
0 |
HS SDIO-SD |
6 |
0 |
1 |
1 |
1 |
HS SDIO-eMMC |
7 |
1 |
x |
x |
x |
RESERVED |
RESERVED |
系统上电后,会根据默认引脚的电平来选择从不同的介质来启动,用户可以根据自己的需求对不同的存储器进行重新编程, 系统复位或者掉电复位后导致 BOOT 引脚被重新锁存。
启动选择不同,程序就有不同的访问地址:
从 dfu 启动时,则会选择从串口烧写 BootLoader或者应用程序
从 ILM 启动时,则会选择从 CORE0 的 ILM 地址 0x8800000 访问
从 FLASH0 启动时,系统通过 QSPI_XIP0 访问外部 FLASH0 ,从地址 0xfa0000000 访问
从 FLASH2 启动时,系统通过 QSPI_XIP2 访问外部 FLASH2 ,从地址 0xfb8000000 访问
从 SDIO-SD 启动时,系统通过 sdio0 访问外部 sd卡 ,将SD卡中的固件搬运到指定sram运行
从 SDIO-eMMC 启动时,系统通过 sdio0 访问外部 eMMC ,将eMMC中的固件搬运到指定sram运行
从 HS SDIO-SD 启动时,系统通过 hs_sdio0 访问外部 sd卡 ,将sd卡中的固件搬运到指定sram运行
从 HS SDIO-eMMC 启动时,系统通过 hs_sdio0 访问外部 eMMC ,将eMMC中的固件搬运到指定sram运行
2.2 QSPI XIP Nor FLASH 启动模式
BootROM 支持从主流的Serial NOR FLASH XIP启动,包括但不限于:华邦、兆易创新等。
Flash2关键引脚分配表 Flash2引脚名称
芯片引脚编号
功能
CLK
PAD_IOMUX_150
O
NCS
PAD_IOMUX_137
O
DI/IO0
PAD_IOMUX_148
I/O
DO/IO1
PAD_IOMUX_136
I/O
WP/IO2
PAD_IOMUX_135
I/O
HOLD/IO3
PAD_IOMUX_149
I/O
Flash0关键引脚分配表 Flash0引脚名称
芯片引脚编号
功能
CLK
PAD_IOMUX_4
O
NCS
PAD_IOMUX_0
O
DI/IO0
PAD_IOMUX_5
I/O
DO/IO1
PAD_IOMUX_1
I/O
WP/IO2
PAD_IOMUX_2
I/O
HOLD/IO3
PAD_IOMUX_3
I/O
2.3 SD/eMMC 启动模式
BootROM支持从SD/eMMC 设备加载启动镜像到片内SRAM中。BootROM默认只使用单线模式.使用下面的引脚配置:
Note
BootROM支持启动两个版本的 FSBL(第一级引导加载程序) 。BootROM会尝试加载并启动第一个启动镜像,如果失败,再尝试加载第二个启动镜像。 BootROM首先查找 GPT(全局定位表) :
如果找到 GPT : 通过查找名称为 fsbl1 和 fsbl2 的两个GPT条目来定位两个FSBL ,首选检测 fsbl1 ,检测到并且校验成功会执行 fsbl1 ,否则继续检测 fsbl2 。
如果找不到 GPT : 首先在偏移 LBA128 处检测 fsbl1 的启动头,检测到并且校验成功会执行 fsbl1 ,否则就会在偏移 LBA640 处检测 fsbl2。
如果全部失败,ROM会进入死循环,等待调试连接或者系统复位。
2.4 SD/eMMC启动镜像
SD/eMMC启动模式下,需要给程序增加一个启动头,并且打包成一个启动镜像,才能被BootROM正常识别并启动,SD/eMMC镜像头部结构布局:
偏移(字) |
偏移(字节) |
字段 |
描述/值 |
|---|---|---|---|
0 |
0x00-0x3C |
RESERVED |
0x00 |
1 |
0x40 |
固定魔数 |
0x4A4B4C58 |
2 |
0x44 |
固件大小 |
固件大小(byte) |
3 |
0x48 |
入口地址低32位 |
enter_point |
4 |
0x4C |
入口地址高32位 |
enter_point_h |
5 |
0x70 |
镜像CRC |
根据固件文件生成 |
6 |
0x74-0x1F8 |
RESERVED |
0x00 |
7 |
0x1FC |
镜像CRC |
计算镜像0到0x1F8偏移的CRC值 |
3 设备固件更新(DFU)
BootROM 在DFU模式下,支持如下功能:
支持写存储设备,flash0和flash2
支持读存储设备,flash0和flash2
支持擦除存储设备(erase),flash0和flash2
支持读写eFuse
支持读写寄存器
支持加载程序到内部RAM执行
在DFU模式下,支持如下通信接口:
USART0
3.1 USART0 DFU
BootROM默认配置USART0为自动检测波特率,其它配置为8-N-1。需要使用Nuclei提供芯片配套的上位机,可以直接连上芯片。BootROM中USART0使用下面的引脚配置:
USART0引脚分配 UART引脚名称
芯片引脚编号
功能
TX
PAD_IOMUX_20
O
RX
PAD_IOMUX_19
I