eFuse
简介
eFuse(电子熔丝)用于支持芯片的动态实时重编程。它还可作为一次性可编程 ROM,用于存储其他数据,例如 AES 密钥和 SRAM BISR(内置自修复)数据。
主要特性
eFuse 的主要特性如下:
6.5 Kib 用于通用数据。
384 位用于 SRAM BISR 数据。
768 位用于密钥存储。
128 位用于 eFuse 数据块控制标志。
128 位用于修复坏点像素(最多支持 8 个)。
功能描述
功能描述
eFuse 中的参数仅可编程一次,一旦完成编程,再次尝试重新编程将不会成功。
电源域:
1.1 V(常开)
2.5 V(编程模式下激活)
通用数据:Boot ROM、用户数据等。
系统数据:Boot ROM、UUID、Track ID 等。
eFuse 数据映射
大小 |
属性 |
描述 |
地址范围 |
|---|---|---|---|
6.5 kib |
RW/RO |
通用数据 |
0x0 ~ 0x33f |
384 b |
RW/RO |
512 位 SRAM BISR 数据 |
0x340 ~ 0x36f |
128 b |
RW/RO |
128 位硬连线寄存器 |
0x370 ~ 0x37f |
128 b |
RW/X |
128 位密钥 key5 |
0x380 ~ 0x38f |
128 b |
RW/X |
128 位密钥 key4 |
0x390 ~ 0x39f |
128 b |
RW/X |
128 位密钥 key3 |
0x3a0 ~ 0x3af |
128 b |
RW/X |
128 位密钥 key2 |
0x3b0 ~ 0x3bf |
128 b |
RW/X |
128 位密钥 key1 |
0x3c0 ~ 0x3cf |
128 b |
RW/X |
128 位密钥 key0 |
0x3d0 ~ 0x3df |
128 b |
RW/RO |
128 位数据块控制标志 |
0x3e0 ~ 0x3ef |
128 b |
RW/RO |
128 位 BISR 标志 |
0x3f0 ~ 0x3ff |
参数说明
通用数据(6.5 kib)
ROM 代码
当芯片的 Boot ROM 出现问题时,程序可跳转至此处开始执行。
用于特殊启动模式。
存储其他用户自定义信息,例如 Linux 设备树(DTB)描述。
该区域在受保护前可读写,受保护后变为只读。
系统数据
芯片的唯一 ID 用于记录芯片信息,包括芯片的生产时间、版本、在晶圆上的 X 坐标和 Y 坐标,以及封装厂、晶圆代工厂、供应商等信息。芯片的 JEDEC ID 也存储在此处。此外,ROM 的一些配置位也存放于此。
如果该芯片需要支持以太网或 Wi-Fi 功能,则芯片的 MAC 地址也应存储在此区域。此外,还可在此存储更多与系统相关的信息。实际上,该区域与 ROM 代码可以位于同一存储区域。
该区域在受保护前可读写,受保护后变为只读。
SRAM BISR 数据(384位)
SRAM 的 BIST 修复控制器。可通过总线访问,且每条位线均引出至顶层。
该区域在受保护前可读写,受保护后变为只读。
硬连线寄存器(128位)
用于其他模块的参数配置。可通过总线访问,且每位的信号线均引出至顶层。
该区域在受保护前可读写,受保护后变为只读。
密钥(6 × 128 位)
用于安全模块的六组密钥,可用于 AES/SM4 等加密算法。
若需使用 RSA/SM2/ECC 等公钥加密算法,则此密钥不适用,需使用另一个独立的 8 KiB eFuse 块来实现。
该区域在受保护前可读写,受保护后不可读写。
它读取无效数据(全为 1)。在可读写状态下,可通过总线访问,且每位的信号线均引出至顶层。
数据块控制标志(128 位)
在 eFuse 中,参数被划分为 128 个数据块,每个数据块对应数据块控制标志中的 1 位,用于指示该参数是否处于编程保护状态。完成保护位的编程后,需执行一次重载(reload)或复位(reset)操作,保护位才能生效。只要数据块控制标志中的某一位被置为 1,对应的 eFuse 数据块状态即变为只读。该区域主要用于对 eFuse 各个区域的写保护控制,其控制范围的详细说明如下。
大小 |
属性 |
描述 |
|---|---|---|
1 位 × 104 |
RW/RO |
每一位保护 ROM 代码和系统数据中的 64 位数据块。 |
1 位 |
RW/RO |
保护 SRAM BIST 修复数据 |
1 位 |
RW/RO |
保护硬连线寄存器 [7:0] |
1 位 |
RW/RO |
保护硬连线寄存器 [15:8] |
1 位 |
RW/RO |
保护硬连线寄存器 [23:16] |
1 位 |
RW/RO |
保护硬连线寄存器 [31:24] |
1 位 |
RW/RO |
保护硬连线寄存器 [39:32] |
1 位 |
RW/RO |
保护硬连线寄存器 [47:40] |
1 位 |
RW/RO |
保护硬连线寄存器 [55:48] |
1 位 |
RW/RO |
保护硬连线寄存器 [63:56] |
1 位 |
RW/RO |
保护硬连线寄存器块 [79:64] |
1 位 |
RW/RO |
保护硬连线寄存器块 [95:80] |
1 位 |
RW/RO |
保护硬连线寄存器块 [111:96] |
1 位 |
RW/RO |
保护硬连线寄存器块 [127:112] |
1 位 |
RW/RO |
保护 密钥5 |
1 位 |
RW/RO |
保护 密钥4 |
1 位 |
RW/RO |
保护 密钥3 |
1 位 |
RW/RO |
保护 密钥2 |
1 位 |
RW/RO |
保护 密钥1 |
1 位 |
RW/RO |
保护 密钥0 |
1 位 |
RW/RO |
保护数据块控制标志 |
ROM 代码 / 用户数据和系统数据共使用了 104 位。
以下是保护位的映射关系。
偏移量 |
说明 |
|---|---|
1 位 × N |
保护数据[64 - 1 + 16 * N:16 * N], 0 <= N <= 111 |
BISR 标志(128 位)
128 位 LUT 表结构用于校正 eFuse 坏点像素。
BISR LUT 表
大小 |
属性 |
描述 |
|---|---|---|
16 位 |
RW/RO |
BISR LUT 项 |
16 位 |
RW/RO |
BISR LUT 项 |
16 位 |
RW/RO |
BISR LUT 项 |
16 位 |
RW/RO |
BISR LUT 项 |
16 位 |
RW/RO |
BISR LUT 项 |
16 位 |
RW/RO |
BISR LUT 项 |
16 位 |
RW/RO |
BISR LUT 项 |
16 位 |
RW/RO |
BISR LUT 项 |
BISR LUT 项
位数 |
属性 |
描述 |
|---|---|---|
1 位 |
RW/RO |
使用标志 |
1 位 |
RW/X |
替换位 |
14 位 |
RW/X |
用于修复的 LUT 地址 |
Note
ADDR[9:0] 为字节地址,ADDR[12:10] 为位地址,ADDR[13] 未使用。
Note
在使用标志被写入之前,使用标志为可读写,替换位为可读写,LUT 地址也为可读写。在使用标志被写入之后,替换位和 LUT 地址将无法读取,仅能返回使用标志的值。
Note
在使用标志位编程完成后,需执行重载或复位操作,BISR 功能才能生效。
eFuse BISR 修复流程
芯片生产完成后,可能会存在坏点像素,最多可通过 BISR 标志校正 8 个坏点像素。
BISR 标志被划分为 8 个 16 位的修复块。
每个修复块包含一个1位使用标志(用于指示对应位的校正状态),一个1位替换位(对应该位的校正值),和一个14位 LUT 地址(对应该位的访问地址)。
具体的校正流程如下:
首先,将 eFuse 设置为读取模式。软件遍历 eFuse 中的所有位。正常情况下,所有位均为 0。
如果发现某位不为 0,则表示存在错误。此时需要将该错误位的地址记录到 LUT 地址中,并用替换位进行替换。
如果某个 LUT 项本身存在缺陷(例如替换位、地址或使用标志恰好出现坏点),则使用优先级更高的下一个 LUT 项。
校正完成后,需将对应的使用标志置为 1。该设计最多可修复 8 个坏点像素。
Note
高地址的优先级高于低地址。
当这 8 个块的使用标志值全部被置为 1 时,eFuse 参数块的状态将变为可烧写。
在设置使用标志之后,替换位和 LUT 地址将不可读写,使用标志变为只读,其余位则变为无效数据(例如,所有位的值均与使用标志相同)。此时,替换位仅在参数块被读写时才能被读写。
在访问参数块时,首先检查 BISR LUT 表。如果表中存在对应参数块中某一位的访问地址,则该位将被替换为对应的替换位,而参数块中原先对应的位将被丢弃。
如果检查中未发现坏点像素,则必须将所有使用标志置为 1,并替换为默认地址。
如果替换位中存在缺陷像素,则该块被视为无效。
如果参数块中的缺陷点数量大于修复块中有效的替换位数量,则该芯片将被视为报废。
如果优先级最高的 LUT 项的替换位存在缺陷,则该芯片被视为报废。
编程时序
eFuse 的编程时序图如下图所示。
编程模式下的时序要求如下表。
参数 |
符号 |
最小值 |
典型值 |
最大值 |
单位 |
|---|---|---|---|---|---|
编程时间 |
Tpgm |
9000 |
10000 |
11000 |
ns |
地址使能周期时间 |
Taen |
Tpgm + 1900 |
— |
— |
ns |
地址到 AEN 的建立时间 |
Tsp_a |
50 |
— |
— |
ns |
AEN 之后的地址保持时间 |
Thp_a |
50 |
— |
— |
ns |
PGMEN 信号到 AEN 的建立时间 |
Tsp_pgm |
100 |
— |
— |
ns |
AEN 到 PGMEN 信号的保持时间 |
Thp_pgm |
100 |
— |
— |
ns |
RDEN 信号到 AVDD 的建立时间 |
Tsp_rd |
150 |
— |
— |
ns |
AVDD 到 RDEN 信号的保持时间 |
Thp_rd |
150 |
— |
— |
ns |
AVDD 到 PGMEN 的建立时间 |
Tsp_pg_avdd |
1000 |
— |
— |
ns |
PGMEN 到 AVDD 的保持时间 |
Thp_pg_avdd |
1000 |
— |
— |
ns |
Note
DVDD < AVDD ≤ 2.75 V 的持续时间必须小于 1 秒。
AVDD 不得超过 2.75 V,否则将引发可靠性问题。
读取时序
eFuse 的读取时序图如下图所示。
读取模式下的时序要求如下表。
参数 |
符号 |
最小值 |
典型值 |
最大值 |
单位 |
|---|---|---|---|---|---|
读取时间 |
Trd |
40 |
— |
— |
ns |
地址使能周期时间 |
Taen |
Trd + 1900 |
— |
— |
ns |
地址到 AEN 的建立时间 |
Tsr_a |
10 |
— |
— |
ns |
AEN 到地址保持时间 |
Thr_a |
10 |
— |
— |
ns |
DVDD 到 RDEN 的建立时间 |
Tsr_dvdd |
150 |
— |
— |
ns |
RDEN 到 DVDD 的保持时间 |
Thr_dvdd |
150 |
— |
— |
ns |
RDEN 信号到 AEN 的建立时间 |
Tsr_rd |
100 |
— |
— |
ns |
无负载时的输出数据稳定时间 |
Tsq |
— |
— |
45 |
ns |
输出数据保持时间 |
Tsq_h |
0 |
— |
— |
ns |
AEN 到 RDEN 信号的保持时间 |
Thr_rd |
100 |
— |
— |
ns |
Note
Trd 的值必须大于 Tsq。
中断
无中断。
寄存器
eFuse 寄存器
eFuse 中的寄存器及其对应偏移地址如下表所示。
偏移 |
寄存器名称 |
功能描述 |
|---|---|---|
0x0 |
efuse_pg_tim_cfg0 |
— |
0x4 |
efuse_pg_tim_cfg1 |
— |
0x8 |
efuse_pg_tim_cfg2 |
— |
0xC |
efuse_pg_tim_cfg3 |
— |
0x10 |
efuse_rd_tim_cfg0 |
— |
0x14 |
efuse_rd_tim_cfg1 |
— |
0x18 |
efuse_reload_en |
— |
0x1C |
efuse_reload_done |
— |
0x20 |
efuse_status |
— |
0x24 |
efuse_avdd |
— |
0x30 |
efuse_version |
— |
EFUSE_PG_TIM_CFG0
地址偏移:0x0
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
Tpgm |
12:0 |
RW |
0xa0 |
烧写时间 |
Taen |
25:13 |
RW |
0xce |
地址使能周期时间 |
Reserved |
31:26 |
/ |
0x0 |
/ |
EFUSE_PG_TIM_CFG1
地址偏移:0x4
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
Tsp_a |
6:0 |
RW |
0x2 |
地址到 AEN 的建立时间 |
Reserved |
13:7 |
/ |
0x0 |
/ |
Tsp_pgm |
21:14 |
RW |
0x3 |
PGMEN 信号到 AEN 的建立时间 |
Thp_pgm |
29:22 |
RW |
0x3 |
AEN 到 PGMEN 信号的保持时间 |
Reserved |
31:30 |
/ |
0x0 |
/ |
EFUSE_PG_TIM_CFG2
地址偏移:0x8
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
Tsp_rd |
8:0 |
RW |
0x4 |
RDEN 信号到 AVDD 的建立时间 |
Thp_rd |
17:9 |
RW |
0x4 |
AVDD 到 RDEN 信号的保持时间 |
Tsp_pg_avdd |
28:18 |
RW |
0x20 |
AVDD 到 PGMEN 的建立时间 |
Reserved |
31:29 |
/ |
0x0 |
/ |
EFUSE_PG_TIM_CFG3
地址偏移:0xC
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
Thp_pg_avdd |
10:0 |
RW |
0X20 |
PGMEN 到 AVDD 的保持时间 |
Reserved |
31:11 |
/ |
0X0 |
/ |
EFUSE_RD_TIM_CFG0
地址偏移:0x10
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
Trd |
6:0 |
RW |
0X3 |
读取时间 |
Tsr_a |
12:7 |
RW |
0X3 |
地址到 AEN 的建立时间 |
Taen |
17:13 |
RW |
0X5 |
读取地址使能周期时间 |
Reserved |
31:18 |
/ |
0X0 |
/ |
EFUSE_RD_TIM_CFG1
地址偏移:0x14
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
Reserved |
8:0 |
/ |
0x0 |
/ |
Tsr_rd |
16:9 |
RW |
0x3 |
RDEN 信号到 AEN 的建立时间 |
Tsq |
22:17 |
RW |
0x3 |
无负载时的输出数据稳定时间 |
Reserved |
24:23 |
/ |
0x0 |
/ |
Thr_rd |
31:25 |
RW |
0x3 |
AEN 到 RDEN 信号的保持时间 |
EFUSE_RELOAD_EN
地址偏移:0x18
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
rld_en |
0 |
RW |
0x0 |
eFuse 参数重载使能 |
Reserved |
31:1 |
/ |
0x0 |
/ |
EFUSE_RELOAD_DONE
地址偏移:0x1C
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
rld_done |
0 |
RO |
0x1 |
重载完成标志 |
Reserved |
31:1 |
/ |
0x0 |
/ |
EFUSE_STATUS
地址偏移:0x20
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
pg_status |
0 |
RO |
0x0 |
eFuse 编程状态 |
Reserved |
31:1 |
/ |
0x0 |
/ |
EFUSE_AVDD
地址偏移:0x24
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
r_f_cnt |
19:0 |
RW |
0x14 |
AVDD 下降与上升时序 |
Reserved |
31:20 |
/ |
0x0 |
/ |
EFUSE_VERSION
地址偏移:0x30
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
efuse_ver |
23:0 |
RO |
0x20005 |
eFuse 版本 |