4. OTP与eFuse基础

在硬件信任根的体系中,密钥、设备身份、安全配置等“根秘密”必须在芯片出厂后以不可逆的方式固化。OTP(One-Time Programmable,一次性可编程)存储器正是承担这一职责的物理载体,而 eFuse(电子熔丝)是当前 SoC 中最主流的 OTP 实现形式。理解 OTP 与 eFuse,核心要回答四个问题:数据为什么只能写一次、物理上靠什么改变状态、熔丝与反熔丝有何区别、以及芯片如何把“烧断/击穿”这种物理变化读成 0 和 1。

一、核心原理:一次性可编程的本质

OTP 的“一次性”并非软件限制,而是物理不可逆。普通 SRAM、Flash 可以反复擦写,是因为其存储单元存在可逆的电荷注入/移出机制;而 OTP 单元在编程时发生的是永久性物理结构改变——导体被熔断,或绝缘体被击穿形成导电通路。这种改变无法通过电压、温度或命令恢复,因此写入即定局。

从信息编码角度看,OTP 单元通常以“原始态”和“编程态”两个稳定物理状态表示 1 bit。原始态是出厂默认状态(例如熔丝完好导通,或反熔丝未击穿呈高阻),编程态是施加编程脉冲后的状态。读出电路通过检测单元电阻、电流或电压差异,将其判决为逻辑 0 或 1。由于物理状态只有两种且不可逆,OTP 天然具备防篡改、防回滚的特性,非常适合存放根密钥、安全启动使能位、芯片唯一 ID、生命周期状态等。

关键结论:OTP 的安全性来自“不可逆”而非“不可读”。多数 OTP 内容可被读出,因此敏感密钥必须配合读出保护、加密存储或仅限内部安全引擎访问。

二、eFuse 物理结构与熔丝/反熔丝技术

eFuse 的“e”指电子式,即用电流而非激光来熔断。典型 eFuse 单元由一条细金属或多晶硅熔丝、两端电极、以及编程驱动管和读出放大电路组成。编程时,驱动管在熔丝上施加较大电流密度,使局部金属电迁移或熔断,电阻从几十欧姆跃升到数千欧姆以上;未编程单元保持低阻。读出时用微小恒流源加在熔丝上,比较其端电压即可区分状态。

与熔丝相对的是反熔丝(anti-fuse)。反熔丝默认是高阻的“断开”状态,编程时在薄栅氧或特殊介质上施加较高电压,将其击穿形成永久导电细丝,电阻由兆欧级降到千欧级。二者逻辑极性相反,但都实现“一次写入、永久保持”。反熔丝单元面积更小、编程电流更低,常用于高密度 OTP;熔丝结构简单、工艺成熟,常用于配置位和冗余修复。

eFuse 存储单元结构与读出机制 熔丝型 eFuse 单元 编程驱动管 NMOS Iprog 熔丝 VDD 原始态 低阻 ~50Ω 逻辑 0 编程态 高阻 >5kΩ 逻辑 1 读出:恒流源 + 比较器 Iref DOUT 反熔丝型 OTP 单元 编程高压 Vprog 薄介质 GND 原始态 高阻 ~1MΩ 逻辑 0 击穿态 低阻 ~2kΩ 逻辑 1 读出:预充电 + 灵敏放大 Sense Amp DOUT 熔丝:默认导通,编程熔断;反熔丝:默认断开,编程击穿——两者均不可逆

三、存储单元与读出机制

单个 eFuse 位只是 1 bit,实际 OTP 宏(macro)由存储阵列、行/列译码器、编程驱动器、读出放大器、电荷泵和控制器组成。编程需要高于核心电压的 Vprog,通常由片上电荷泵产生;读出则在低压下进行,避免误编程。读出机制的关键是参考单元:用一组已知状态的参考位提供比较基准,抵消工艺、温度和电压漂移,确保在熔丝电阻逐渐退化时仍能正确判决。

读出流程一般分为三步:先对位线预充电,再让单元电流对位线放电,最后由灵敏放大器在固定时刻采样位线电压并与参考比较。由于编程态与原始态电阻差异可达两个数量级,读出窗口较宽,但若编程电流不足导致“弱编程”,电阻差异缩小,就会出现读出错误或后期漂移。因此量产测试中必须做编程验证(program verify)和余量测试(margin read)。

对比项 熔丝 eFuse 反熔丝 OTP
默认状态低阻(导通)高阻(断开)
编程物理变化电迁移/熔断介质击穿
编程后电阻升高至 kΩ 级降低至 kΩ 级
编程电流较大(mA 级)较小
单元面积较大较小,密度高
典型用途配置位、冗余修复高密度密钥存储

四、案例与场景:安全启动中的 OTP 使用

以一颗安全 MCU 为例,出厂时在 OTP 中写入:芯片唯一 ID、根公钥哈希、安全启动使能位、调试口锁定策略。上电后 Boot ROM 首先读取这些 OTP 位,验证固件签名,再决定是否允许调试。由于 OTP 不可回滚,攻击者即使获得物理访问,也无法把“已锁定”改回“未锁定”。

OTP 区域示例(地址为示意)
0x0000  CHIP_ID[127:0]        芯片唯一标识
0x0010  ROOT_PK_HASH[255:0]   根公钥哈希
0x0030  SECURE_BOOT_EN        1 = 强制验签
0x0031  JTAG_LOCK             1 = 永久关闭调试
0x0032  LIFE_CYCLE[1:0]       00 量产 / 01 安全 / 10 RMA
0x0033  KEY_ENC_EN            1 = 密钥加密存储
工程建议:OTP 规划应预留冗余位和纠错位。eFuse 存在个别位编程失败或后期漂移的风险,用 ECC 或多数表决可显著提升根密钥的长期可靠性。

五、常见误区与复盘

  • 误区一:把 OTP 当普通 Flash 用。OTP 不能擦除,任何“先试写再修改”的流程都会造成不可逆损失,量产前必须用仿真或可擦写替代区验证。
  • 误区二:忽视读出保护。OTP 内容默认可读,若密钥明文存储且未锁定读出路径,物理读取即可泄露根秘密。
  • 误区三:编程电流/时间不足。弱编程单元初期可读,但在高温老化后电阻漂移,导致启动失败。必须按数据手册留足编程余量并做老化验证。
  • 误区四:忽略电荷泵负载。批量编程时电荷泵带载能力不足会造成 Vprog 跌落,出现随机编程失败,需评估并发编程位数。

复盘来看,OTP 与 eFuse 的工程核心不在“能不能写”,而在“写得可靠、读得稳定、护得住”。理解熔丝与反熔丝的物理差异、读出放大与参考机制、以及编程余量与 ECC 策略,才能把一次性可编程存储器真正用成硬件信任根的坚实底座。