6.3. 启动配置
BROM 支持多种启动介质。在上电复位之后,BROM 需要确定从哪种启动介质开始启动,确定的规则有两种:
默认顺序规则
eFuse 选定
默认的情况下,平台按照下面的顺序逐个尝试启动介质,如果都不成功,则进入升级模式:
另外一种方式是通过 eFuse 的 BROM 配置区域,显式的选择启动介质。启动过程中,BROM 会读取对应的配置, 尝试从选择的启动介质进行启动。如果从指定的 primary boot device & secondary boot device 启动失败,则按默认顺序规则,轮询一遍所有的启动介质。如果前面的尝试都失败,则进入升级模式。
6.3.1. eFuse 配置表
eFuse 中有一个 64 位的 BROM 配置区域,其功能配置如下:
位域 |
字段 |
默认值 |
功能描述 |
---|---|---|---|
63:20 |
- |
- |
- |
19:18 |
SDMC sample phase |
0 |
0: 0 度
1:90 度
2:180 度
3:270 度
|
17:16 |
SDMC drive phase |
0 |
0: 180 度
1:270 度
2:0 度
3:90 度
|
15 |
CPU High speed enable |
0 |
0: BROM CPU 24MHz,AXI/AHB 60MHz
1: BROM 设置 CPU 216MHz,AXI/AHB 200MHz
|
14 |
Checksum disable |
0 |
0: BROM 校验所读取镜像的32位累加校验和
1: BROM 不校验所读取镜像的32位累加校验和
|
13 |
PLL_FRA0 disable |
0 |
0: PLL_FRA0 使能,默认输出频率 1008MHz
1: PLL_FRA0 关闭
|
12 |
PLL_INT1 disable |
0 |
0: PLL_INT1 使能,默认输出频率 1.2GHz
1: PLL_INT1 关闭
|
11 |
SPI DMA disable |
0 |
0: SPI NOR/SPI NAND 读取数据时,使用 DMA
1: SPI NOR/SPI NAND 读取数据时,不使用 DMA
|
10 |
md5_veri_dis |
0 |
0: BROM 启动时,使用 MD5 来校验启动镜像,CE 计算
1: BROM 启动时,不使用 MD5 来校验启动镜像
|
9 |
SD/eMMC DMA disable |
0 |
0: SD/eMMC 读取数据时,使用 DMA
1: SD/eMMC 读取数据时,不使用 DMA
|
8 |
Skip SD/UDISK Phase |
0 |
0: 启动时,总是先尝试从 SD card/U盘 启动。用于量产或开发调试
1: 启动时,直接按照选定的启动介质进行启动
|
7:4 |
Secondary boot device |
0 |
次选启动介质,具体值参考 表 6.1 |
3:0 |
Primary boot device |
0 |
首选启动介质,具体值参考 表 6.1 |
6.3.2. eFuse 值配置
eFuse 中与启动介质相关的配置有四个,分别对应 BROM 尝试启动介质的三个阶段:
可插拔介质优先检查阶段
启动过程中首先执行 SD 卡/ UDISK 检查, 目的是检查是否有可启动的 SD 量产卡/ 量产U盘,如果有插入,则优先运行 SD 卡/U盘中的固件。
该阶段可以通过设置 eFuse 中的 “Skip SD/UDISK Phase” 跳过。跳过该阶段的好处是可以加快启动速度。
Primary boot device 尝试阶段
如果用户烧录了 “Primary boot device”,并且值有效,则直接尝试从指定的介质读取固件。
Secondary boot device 尝试阶段
如果用户没有烧录有效的 “Primary boot device” 值,或者从 “Primary boot device” 读取固件失败, 且 “Secondary boot device” 值有效,则尝试从 “Secondary boot device” 指定的介质读取固件。
Boot device 的有效值如下表所示:
eFuse 启动介质索引值 |
描述 |
---|---|
0x0 |
默认值,没有配置启动介质,按照固定顺序尝试 |
0x1 |
SPI NAND(仅支持 SPI0 启动) |
0x2 |
SPI NOR(仅支持 SPI0 启动) |
0x3 |
SDMC0 eMMC |
0x4 |
SDMC1 SD Card |
0x5 |
UDISK |
其他 |
无效值,等同 0x0 |
BROM 在执行的时候,相同的启动介质只会尝试一次。比如:Primary 和 Secondary 都设置为 SD 卡启动, 并且前置的 SD 卡启动阶段也没有被设置跳过,按流程应该会尝试从 SD 卡启动3次。 但是 BROM 会记录该介质是否已经尝试过,如果尝试过则不再尝试。因此实际上 BROM 只会尝试一次,后续两次直接被跳过。