计算机系统常见启动方式
参考:
Flash 启动、RAM 启动、OTP 启动的本质差异——别再只说”存储介质不同”了,这才是它们真正的核心区别
CPU 工作原理
计算机本质架构:冯·诺依曼架构
冯·诺依曼结构是计算机的“逻辑模型”和软件基础,而哈佛结构是用于提升性能的关键“硬件实现思想”。现代计算机本质上是“在冯·诺依曼的框架下,大量采用哈佛结构的思想来突破瓶颈”的混合体
CPU 的工作原理可以简化为无限循环:
- step1:从程序计数器(PC)指向的地址中读取一条指令
- step2:对指令进行解码
- step3:执行解码后的执行
- step4:PC 自增,指向下一条命令
- 回到 step1 继续循环
对于 step1,PC 指向的地址可以是任何存储介质,例如 Flash、RAM 或 OPT 等;因此所有启动方式差异本质上不是”从哪里启动”的差异,而是”PC 指针最初指向哪里”以及”这个地址背后的存储器有什么特性”的差异
Flash 启动(最常见的启动方式)
Flash 启动的本质是:系统复位后,PC 指针直接指向 Flash 存储器的地址空间,CPU 从 Flash 中取指执行代码
Flash 启动的核心特性
- 非易失性:掉电后代码不会丢失
- 可重复擦写:可以多次更新固件
- 容量大:从几 MB 到几 GB 不等
- 成本低:是目前性价比最高的非易失性存储
Flash 启动模式分类
XIP 模式(就地执行)
真正意义上的”Flash 启动”(无需将代码从 Flash 复制到 RAM 再执行),只有 NOR Flash 和部分高速 SPI Flash 支持
工作原理
- Flash 存储器被直接映射到 CPU 的地址空间
- CPU 可以像访问 RAM 一样直接从 Flash 中读取指令
- 代码不需要复制到 RAM 中,直接在 Flash 中运行
关键限制
- 只能读取,不能写入(Flash 的写入需要特殊的擦写操作)
- 执行速度远低于 RAM(NOR Flash 的读取速度通常是几十 MB/s,而 RAM 是几 GB/s)
- 代码中的全局变量和栈必须放在 RAM 中
加载执行模式
这是 NAND Flash、eMMC、SD 卡等存储设备的唯一启动方式,并没有直接从 Flash 地址中取指令解码执行
工作原理
- 系统复位后,PC 首先指向 BootROM(片内 ROM)
- BootROM 将 Flash 中的前几 KB 代码(FSBL)复制到片内 SRAM 中
- PC 跳转到 SRAM 中执行 FSBL
- FSBL 初始化 DDR,然后将完整的固件从 Flash 复制到 DDR 中
- PC 跳转到 DDR 中执行主固件
RAM 启动
RAM 启动的本质是:系统复位后,PC 指针直接指向 RAM 存储器的地址空间,CPU 从 RAM 中取指执行代码
世界上没有任何一个嵌入式系统是完全不使用 RAM 启动的,即使是纯 XIP NOR Flash 启动的系统,它的栈、全局变量、堆也必须放在 RAM 中。而对于加载执行模式的系统,最终所有的代码都是在 RAM 中运行的
两种 RAM 启动场景
正常启动场景
- BootROM → 加载 FSBL 到 SRAM → 执行 FSBL
- FSBL → 加载 SSBL 到 DDR → 执行 SSBL
- SSBL → 加载内核/固件到 DDR → 执行内核/固件
整个启动过程就是一个不断把代码从低速存储加载到高速 RAM 中执行的过程(注:有点像手动挡汽车起步,最开始都是从一档起步,然后逐渐加速换到二挡、三挡)
独立 RAM 启动场景
很多芯片提供的一种特殊启动模式,通常用于调试和工厂烧录
工作原理
- 通过设置启动引脚或 eFuse,强制芯片进入 RAM 启动模式
- 系统复位后,PC 指向片内 SRAM 的地址
- BootROM 通过 UART/USB 等接口等待外部主机下载代码
- 代码下载完成后,PC 跳转到 SRAM 中执行
关键特性
- 易失性:掉电后代码立即丢失
- 最高执行速度:CPU 可以以最高速度从 RAM 中取指
- 无持久化:不会对芯片的任何非易失性存储造成修改
- 完全可控:外部主机可以完全控制芯片的执行流程
OTP 启动
OTP(One-Time Programmable,一次性可编程)启动的本质是:系统复位后,PC 指针直接指向 OTP 存储器的地址空间,CPU 从 OTP 中取指执行代码
OTP 与 Flash 的本质区别:
| 特性 | Flash | OTP(熔丝型) |
|---|---|---|
| 存储原理 | 浮栅晶体管存储电荷 | 金属熔丝熔断/连接 |
| 可修改性 | 可以多次擦写(通常 10 万次以上) | 只能编程一次,不可擦除 |
| 物理篡改 | 可以通过物理手段读取和修改 | 熔丝状态是物理不可逆的,无法篡改 |
| 数据保留 | 通常 10-20 年 | 理论上永久保留 |
| 读取速度 | 较快(几十 MB/s) | 较慢(几 MB/s) |
| 容量 | 大(几 MB 到几 GB) | 小(几 KB 到几十 KB) |
核心差异: Flash 的存储状态是电荷,可以通过物理手段改变;而 OTP 的存储状态是物理结构的变化,一旦烧写完成,就永远无法改变
OTP 启动的唯一核心价值就是绝对的安全性:因为 OTP 中的代码是物理不可篡改的,所以它是整个系统中最可靠的信任根。如果把 BootROM 放在 OTP 中,那么整个系统的安全启动链就有了最坚实的基础
OTP 启动的致命缺点
- 容量极小:通常只有几 KB 到几十 KB,只能存放非常简单的代码
- 只能写一次:一旦烧写错误,整个芯片就彻底报废
- 读取速度慢:执行速度远低于 Flash 和 RAM
- 成本高:OTP 的单位容量成本远高于 Flash
适用场景
- 存储 BootROM 和安全启动公钥
- 存储芯片唯一标识(UID)和加密密钥
- 安全等级要求极高的设备(如金融 IC 卡、身份证)
- 防止固件被逆向工程和篡改




