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、生命周期状态等。
二、eFuse 物理结构与熔丝/反熔丝技术
eFuse 的“e”指电子式,即用电流而非激光来熔断。典型 eFuse 单元由一条细金属或多晶硅熔丝、两端电极、以及编程驱动管和读出放大电路组成。编程时,驱动管在熔丝上施加较大电流密度,使局部金属电迁移或熔断,电阻从几十欧姆跃升到数千欧姆以上;未编程单元保持低阻。读出时用微小恒流源加在熔丝上,比较其端电压即可区分状态。
与熔丝相对的是反熔丝(anti-fuse)。反熔丝默认是高阻的“断开”状态,编程时在薄栅氧或特殊介质上施加较高电压,将其击穿形成永久导电细丝,电阻由兆欧级降到千欧级。二者逻辑极性相反,但都实现“一次写入、永久保持”。反熔丝单元面积更小、编程电流更低,常用于高密度 OTP;熔丝结构简单、工艺成熟,常用于配置位和冗余修复。
三、存储单元与读出机制
单个 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 当普通 Flash 用。OTP 不能擦除,任何“先试写再修改”的流程都会造成不可逆损失,量产前必须用仿真或可擦写替代区验证。
- 误区二:忽视读出保护。OTP 内容默认可读,若密钥明文存储且未锁定读出路径,物理读取即可泄露根秘密。
- 误区三:编程电流/时间不足。弱编程单元初期可读,但在高温老化后电阻漂移,导致启动失败。必须按数据手册留足编程余量并做老化验证。
- 误区四:忽略电荷泵负载。批量编程时电荷泵带载能力不足会造成 Vprog 跌落,出现随机编程失败,需评估并发编程位数。
复盘来看,OTP 与 eFuse 的工程核心不在“能不能写”,而在“写得可靠、读得稳定、护得住”。理解熔丝与反熔丝的物理差异、读出放大与参考机制、以及编程余量与 ECC 策略,才能把一次性可编程存储器真正用成硬件信任根的坚实底座。