大多数Rockchip 芯片(包括 RK、RV 系列)的 BootROM 启动逻辑基本遵循这个模式
Rockchip(RK/RV 系列)的启动介质选择机制与 i.MX 完全不同:RK 芯片一般不通过引脚直接选择启动介质,而是依靠 BootROM 内置的固定优先级顺序 或 OTP/eFuse 配置的启动顺序。
SPI NAND
-
特性:NAND 介质出厂可能包含坏块,且擦写次数多后坏块会增多。
-
策略:用 "逐块扫描 + 签名匹配" 的方式。
BootROM 初始化 SPI NAND 控制器
↓
读取 Block 0 (0x000000 - 0x01FFFF) → 检查是否有 BOOT 签名?
↓ (没有)
读取 Block 1 (0x020000 - 0x03FFFF) → 检查是否有 BOOT 签名?
↓ (没有)
读取 Block 2 (0x040000 - 0x05FFFF) → 检查是否有 BOOT 签名?
↓ (找到! 签名 "BOOT" = 0x544F4F42)
BootROM 根据 ID Block 的描述,将 **TPL**(FlashData,即 ddr_*.bin)加载到 SRAM(如 0x10000000)
↓
跳转到 TPL 执行 → TPL 初始化 DDR
↓
TPL 从 NAND 的指定位置(由 ID Block 或固定偏移)读取 **SPL**(FlashBoot,即 spl_spi_nand_*.bin)到 DDR 中(如 0x60000000)
↓
跳转到 SPL 执行 → SPL 初始化其他外设、加载 U‑Boot
↓
U‑Boot 启动内核
SPI NOR
- 特性:无坏块问题,支持直接按字节寻址,随机读取性能好。
- 策略:固定偏移扫描(通常从
0x00000000开始)。BootROM 会直接读取 NOR 起始地址处的数据,检查是否有有效签名(如BOOT或 ID Block 标志)。 - 某些 BootROM 也支持“双备份”模式:检查 offset 0 和 offset 某个页大小(如 0x1000)两个位置,但不做全盘逐块扫描。
eMMC / SD 卡
- 特性:基于扇区(512 字节(0x4000))访问,有 MBR/GPT 分区表,不存在物理坏块(由卡内部控制器管理)。
- 策略:
- 优先检查用户分区 LBA 0(第一个扇区),寻找
BOOT签名或 ID Block 结构。 - 如果未找到,部分 BootROM 会尝试检查 eMMC 的 Boot Area Partition 1/2(若支持且配置了)。
- 一般不会扫描多个 LBA,因为 SD/eMMC 的坏块管理由设备自身处理,BootROM 无需跳过坏块。
- 优先检查用户分区 LBA 0(第一个扇区),寻找
- 注意:某些 Rockchip 芯片允许通过 efuse 或 OTP 配置从 eMMC 的特定偏移(如 4KB、8KB)启动,但默认仍是固定扇区 0。
其他介质(如 SDIO、UART 等)
- 同样使用签名匹配,但扫描方式不同。例如 UART 下载模式是等待主机发送包含签名的数据流,而非扫描存储区域。