参考:
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 卡、身份证)
  • 防止固件被逆向工程和篡改