6.3. 启动配置

BROM 支持多种启动介质。在上电复位之后,BROM 需要确定从哪种启动介质开始启动,确定的规则有两种:

  • 默认顺序规则

  • eFuse 选定

默认的情况下,平台按照下面的顺序逐个尝试启动介质,如果都不成功,则进入升级模式:

../../_images/default_try_order.png

另外一种方式是通过 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 的有效值如下表所示:

表 6.1 启动介质索引值

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 只会尝试一次,后续两次直接被跳过。