6.3. 启动配置

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

  • 默认顺序规则

  • eFuse 选定

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

../../_images/default_try_order.png

另外一种方式是通过 eFuse 的 BROM 配置区域,显式的选择启动介质。启动过程中,BROM 会读取对应的配置, 尝试从选择的启动介质进行启动。如果从指定的 primary boot device & secondary boot device 启动失败,则按默认顺序规则,轮询一遍所有的启动介质。如果前面的尝试都失败,则进入 USB 升级模式。

6.3.1. eFuse 配置表

eFuse 中有一个 64 位的 BROM 配置区域,其功能配置如下:

位域

字段

默认值

功能描述

63:16

-

-

-

15

SPI Boot interface

0

0: SPI 启动接口为 SPI0
1: SPI 启动接口为 SPI1

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

SD/eMMC 4-line disable

0

0: SD/eMMC 读取数据时,使用 4 线模式
1: SD/eMMC 读取数据时,使用 1 线模式

9

SD/eMMC DMA disable

0

0: SD/eMMC 读取数据时,使用 DMA
1: SD/eMMC 读取数据时,不使用 DMA

8

Skip SD Phase

0

0: 启动时,总是先尝试从 SD card 启动。用于量产或开发调试
1: 启动时,直接按照选定的启动介质进行启动

7:4

Secondary boot device

0

次选启动介质,具体值参考 表 6.1

3:0

Primary boot device

0

首选启动介质,具体值参考 表 6.1

6.3.2. eFuse 值配置

eFuse 中与启动介质相关的配置有三个,分别对应 BROM 尝试启动介质的三个阶段:

  • 前置的 SD 卡启动阶段

    该阶段是启动流程中的 ”Do SD Phase” 部分。启动过程中首先执行 SD 卡检查, 目的是检查是否有可启动的 SD 量产卡或者 SD 启动卡,如果有插入,则优先运行 SD 卡中的固件。

    该阶段可以通过设置 eFuse 中的 “Skip SD Phase” 跳过。跳过该阶段的好处是可以加快启动速度, 坏处是如果 eFuse 设置的启动介质中没有 SD 卡,则该芯片再也不能从 SD 卡启动。

  • 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

0x2

SPI NOR

0x3

SDMC0 eMMC

0x4

SDMC1 SD Card

其他

无效值,等同 0x0

备注

注意,BROM 在执行的时候,相同的启动介质只会尝试一次。比如:Primary 和 Secondary 都设置为 SD 卡启动, 并且前置的 SD 卡启动阶段也没有被设置跳过,按流程应该会尝试从 SD 卡启动3次。 但是 BROM 会记录该介质是否已经尝试过,如果尝试过则不再尝试。因此实际上 BROM 只会尝试一次,后续两次直接被跳过。