1、BootROM概述:什么是BootROM、BootROM在SoC启动流程中的位置、BootROM与Bootloader的区别

1.1 什么是BootROM?

BootROM,说白了就是芯片内部的一块只读存储器。它出厂时就被固化好了一段代码。这段代码是芯片上电后,CPU执行的第一段程序。

我个人习惯把BootROM叫做「芯片的原始本能」。你想想看,芯片刚上电时,DDR还没初始化,Flash还没准备好,甚至连时钟都还没稳定。这时候CPU能跑什么?只能跑BootROM里的代码。

BootROM有几个关键特征:

  • 只读性——出厂后不可更改。这是硬伤,也是优势。坏处是发现bug没法修,好处是绝对安全,不会被篡改。
  • 芯片厂商提供——你拿到的每一颗SoC,里面都已经烧好了BootROM。这不是你写的,是芯片原厂写的。
  • 极小且高效——通常只有几KB到几十KB。我见过最小的BootROM只有4KB,跑完基本初始化就跳走了。

核心理解:BootROM是芯片的「第一口气」。没有它,整个系统连呼吸都做不到。

我在项目中遇到过一件事:某次调试一块新板子,死活起不来。查了三天,最后发现是BootROM里的一段时序配置跟外部晶振不匹配。嗯,BootROM改不了,只能换晶振。从那以后,我选型时一定会先看BootROM的参考时钟要求。

1.2 BootROM在SoC启动流程中的位置

SoC的启动流程,其实是一条清晰的链条。BootROM就在这条链条的最前端。

典型的启动流程是这样的:

  1. 上电复位——电源稳定后,复位信号释放。
  2. CPU从复位向量取指——复位向量通常指向BootROM的起始地址。
  3. BootROM执行——做最基本的硬件初始化。
  4. 读取启动设备——从SPI Flash、NAND、SD卡等介质中加载下一级程序。
  5. 跳转到Bootloader——比如U-Boot、ATF等。
  6. Bootloader加载OS——最终启动Linux或RTOS。

为了让你更直观地理解,我画了一张流程图:

SoC 启动流程 —— BootROM 的位置 上电复位 BootROM 执行 读取启动设备 Bootloader 操作系统 BootROM 阶段 时钟、PLL、基础外设 启动介质检测与加载 安全校验(可选)

看到没?BootROM处在整个流程的「咽喉」位置。它后面的一切,都依赖于它正确执行。

我的经验:调试启动问题时,第一步永远是确认BootROM有没有跑完。怎么确认?看芯片的某个GPIO是否被拉高,或者串口有没有输出BootROM的打印信息。如果BootROM没跑完,后面全是白费功夫。

1.3 BootROM与Bootloader的区别

这个问题我经常被问到。很多人觉得BootROM和Bootloader差不多,都是做初始化的嘛。其实差别大了去了。

我整理了一张对比表,你看完就明白了:

对比维度 BootROM Bootloader
存储位置 芯片内部ROM 外部Flash(SPI、NAND、eMMC等)
可修改性 不可修改(只读) 可更新(OTA升级)
大小 几KB ~ 几十KB 几百KB ~ 几MB
功能范围 最小硬件初始化 + 加载Bootloader 完整硬件初始化 + 加载OS + 升级功能
开发者 芯片原厂 板级开发者 / 系统集成商
调试难度 极高(无法修改,只能换芯片) 中等(可重刷、可加打印)

说白了,BootROM是芯片出厂自带的「最小启动套件」。它只做一件事:把系统带到能运行Bootloader的程度。而Bootloader是你可以自由发挥的「启动管家」。

我曾经踩过一个坑:某款芯片的BootROM只支持从SPI Flash加载,不支持NAND。项目中期想换NAND,结果发现BootROM不支持,改不了。最后只能加一颗SPI Flash做中转。嗯,选型时一定要看清楚BootROM支持的启动介质列表。

1.4 为什么BootROM对OTA兼容性至关重要?

你可能会问:BootROM不是只读的吗?跟OTA有什么关系?

关系大了。BootROM决定了你的OTA方案能做多「激进」。举个例子:

  • 如果BootROM支持从多个启动分区加载,你就可以做A/B分区OTA。
  • 如果BootROM支持安全启动,你的OTA固件就必须签名。
  • 如果BootROM不支持从某个介质启动,你的OTA就只能往它支持的介质里写。

注意:BootROM的启动介质优先级是写死的。比如它先看SPI Flash,再看SD卡。如果你OTA升级时把SPI Flash刷坏了,BootROM会尝试从SD卡启动——前提是BootROM支持这个fallback逻辑。不支持的话,板子就变砖了。

我在做一款IoT设备时,OTA升级过程中断电了。BootROM检测到主分区校验失败,自动回退到备份分区。这就是BootROM支持多分区启动的好处。如果BootROM没有这个能力,那块板子就得返厂了。

1.5 小结

这一章我们聊了BootROM是什么、它在启动流程中的位置、以及它跟Bootloader的区别。核心就三点:

  • BootROM是芯片的「第一段代码」,只读、极小、由原厂提供。
  • 它处在启动流程的最前端,负责把Bootloader加载起来。
  • BootROM的能力边界,直接决定了你的OTA方案能做多大。