大多数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 无需跳过坏块。
  • 注意:某些 Rockchip 芯片允许通过 efuse 或 OTP 配置从 eMMC 的特定偏移(如 4KB、8KB)启动,但默认仍是固定扇区 0。

其他介质(如 SDIO、UART 等)

  • 同样使用签名匹配,但扫描方式不同。例如 UART 下载模式是等待主机发送包含签名的数据流,而非扫描存储区域。