EFUSE
概述
EFUSE (Electrically Programming Efuse) 用于配置 BK7239 中与安全相关的特性,只能由 0 配置成 1,无法由 1 配置成 0。
BK7239 EFUSE 共有 4x8 共 32 Bits, 在安全启动使能前,可以通过 BKFIL 配置,详情请参考 EFUSE 配置。
位 |
名字 |
描述 |
|---|---|---|
0 |
Reserved |
保留位 |
1 |
security boot debug mode |
0: 使能安全启动调试信息。1: 关闭安全启动调试信息。 |
2 |
fast boot disable |
0: 使能快速启动;1: 关闭快速启动。 |
3 |
boot mode |
0:传统下载模式;1: 安全启动模式。 |
4 |
security boot clock select |
0: 安全启动使用 XTAL 时钟;1: 安全启动使能 PLL。 |
5 |
random delay enable |
0: 关闭了随机延时;1: 使能随机延迟。 |
6 |
bl1 power on fastboot |
0: power on时跳过验签 ;1: power on 时不跳过验签。 |
7 |
security boot critical error |
0: 使能安全启动中严重错误打印;1: 关闭安全启动中严重错误打印。 |
8 |
bl2 info log disable |
0: BL2 安全启动中普通打印使能;1: BL2 安全启动中普通打印禁用。 |
9 |
bl2 error log disable |
0: BL2 安全启动中错误打印使能;1: BL2 安全启动中错误打印禁用。 |
10 |
bl2 secure download disable |
0: BL2 安全下载使能;1: BL2 安全下载禁用。 |
11 |
Long bl1 security cnt enable |
0: BL1 security counter 占用 4 Bytes;1: BL1 security counter 占用 68 Bytes。 |
12 |
Secure Download |
0: 安全下载关闭;1: 安全下载使能。 |
13 |
Disable BKFIL channel |
bit 13/14/15 组合使用,1/7 - BKFIL 通道关闭,0/2/3/4/5 - BKFIL 通道使能。 |
14 |
Disable BKFIL channel |
bit 13/14/15 组合使用,1/7 - BKFIL 通道关闭,0/2/3/4/5 - BKFIL 通道使能。 |
15 |
Disable BKFIL channel |
bit 13/14/15 组合使用,1/7 - BKFIL 通道关闭,0/2/3/4/5 - BKFIL 通道使能。 |
16 |
Disable download high freq |
0: 不使能下载高频;1: 使能下载高频。 |
17 |
Enable CPU 120M |
0: CPU 80M;1: CPU 120M。 |
18 |
Enable flash 80M |
0: flash XTAL 40M;1: flash 80M。 |
19 |
reserved |
保留位 |
20 |
attack_nmi_enable |
0: 检测到注入攻击时不产生 NMI;1: 检测到注入攻击时产生 NMI。 |
21 |
spi_to_ahb_disable |
0:SPI 到 AHB 通路不关闭;1: SPI 到 AHB 通路关闭。 |
22 |
auto_reset_enable[0] |
温度电压异常复位 |
23 |
auto_reset_enable[1] |
温度电压异常复位 |
24 |
Memchk_bps |
0: 冷启动执行memchk;1: 冷启动不做memchk。 |
25 |
HW JTAG disable |
0: 硬件未关闭JTAG;1: 硬件关闭JTAG。 |
26 |
shanhai_clkgating_en |
0: 硬件未使能clk_gating;1: 硬件使能clk_gating。 |
27 |
flash_crc_mode |
0: crc mode;1: no_crc mode。 |
28 |
reserved |
保留位 |
29 |
flash aes enable |
0: FLASH AES 加密未使能;1: FLASH AES 加密使能。 |
30 |
spi_dld_disable |
0: SPI 下载使能;1: SPI 下载关闭。 |
31 |
swd_disable |
0: 使能 CPU SWD; 1: 关闭 CPU SWD。 |
BIT(1) - security boot debug mode
BL1 定义了两级调试信息来供用户定位问题:
普通调试信息除了错误之外,还包括一些流程性的日志打印。严重错误通常是指会导致 BL1 启动失败的错误,当前 BL1 支持下述严重错误:
错误码 |
含义 |
|---|---|
0x1 |
读 EFUSE 出错 1 |
0x2 |
读 EFUSE 出错 2 |
0x3 |
读 FLASH 出错 1 |
0x11 |
CPU 异常 NMI |
0x12 |
CPU 异常 MemMange |
0x13 |
CPU 异常 HardFault |
0x14 |
CPU 异常 BusFault |
0x15 |
CPU 异常 UserFault |
0x16 |
CPU 异常 SecurityFault |
0x21 |
OTP 为空 |
0x22 |
公钥为空 |
0x23 |
跳转 BIN 校验失败 |
0x1xxx |
OTP 读失败 |
0x8yyyyyyy |
验签失败 |
其中 xxx 指 OTP 的 OFFSET,yyyyyyy 指具体的验签失败点。
严重错误在打印时仅打出错误码,如 “E16” 表示CPU 异常 SecurityFault。
备注
当严重错误使能时,BL1 安全启动时并不会初始化 UART,仅当产生了不可回复的严重错误时才会初始化 UART,进行打印。 因此,严重错误并不会影响正常启动功能,也不会带来安全问题。
重要
一般在开发阶段,尤其是尚未在任何板子上成功配置过安全启动之前,建议开启普通日志,这样,可以看到更多调试信息; 在熟悉了安全启动配置之后,或者在量产阶段,应该关闭普通日志。严重错误则建议在量产版本中也不要关闭。
BIT(2) - fast boot disable
BIT(2) 置 0 时使能 Fast Boot 启动,置 1 时关闭 Fast Boot 启动。
Fast Boot 用于控制系统从 Deep Sleep 醒来的流程,当 Fast Boot 使能时,Deep Sleep 醒来后跳过安全启动,直接跳转到应用程序中; 当 Fast Boot 关闭时,则与上电重启类似,会做完整的安全启动。
重要
Fast Boot 使能时,启动速度更快,但不够安全;Fast Boot 关闭时,启动速度较慢,但安全可靠。 应用应该依据实际需求决定是否开关 Fast Boot。
BIT(3) - boot mode
用于配置启动模式,禁用下载,使能安全启动。
BIT(4) - secure boot clock select
BIT(4) 用于使能/关闭安全启动高频模式。
0 表示 CPU 与 FLASH 使用 XTAL 作为时钟,通常为 26Mhz。
1 表示使能 PLL,CPU 与 FLASH 配置
在高频模式。在高频模式下,安全启动速度更快,对启动性能有要求的应用一般建议使能高频模式。
BIT(5) - random delay enable
BIT(5) 用于控制 BootROM 中关闭判断语句的随机延迟:
0 表示随机延时关闭。
1 表示开启。当随机延时开启时,BL1 在调用关键函数前,都会做一个随机 delay,通过这种机制减缓 故障注入攻击 带来的影响。
备注
随机延时使能会增加安全启动时间,除非对注入攻击防范特别高的应用,通常不建议打开随机延迟功能!
BIT(6) - bl1 power on fastboot
BIT(6) 用于配置 BL1 是否跳过验签流程:
0 表示每次power on启动时,都直接进入到快速验签过程。
1 标志任何安全启动场景下,都需要进行完整的验签过程。
BIT(7) - security boot critical error
请参考 BIT(1)。。
BIT(20) - attack NMI
BIT(20) 用于配置在检测到 故障注入攻击 之后是否产生 NMI 异常:
0 - BL1 不会进行硬件层面的故障注入攻击检测。
1 - BL1 进行硬件层面的故障注入攻击检测,当检测到攻击时产生 NMI 异常。
备注
对故障注入攻击特别关注的应用,建议打开这个开关。
BIT(21) - spi to ahb disable
BIT(21) 用于禁用 SPI 到 AHB 通道:
0 - SPI 到 AHB 通道使能。此时,通过 SPI 接口可直接操作 BK7239 寄存器。
1 - SPI 到 AHB 通道关闭。此时,无法通过 SPI 接口操作 BK7239 寄存器。
需要注意,BIT(21) 与 BIT(30) spi flash download disable 相互独立,需要分别配置。
重要
在安全启动使能时,SPI to AHB 接必须关闭。
BIT(29) - flash aes enable
BIT(29) 用于使能 FLASH AES 加密:
0 - FLASH AES 加密不使能。
1 - FLASH AES 加密使能。此必需要配置 FASH AES KEY。
BIT(30) - spi download disable
关闭 SPI 下载功能:
0 - 内部 SPI FLASH 通道使能,支持 SPI 下载。
1 - 内部 SPI FLASH 通道关闭,不支持 SPI 下载。
需要注意,BIT(30) 与 BIT(21) spi to ahb disable 相互独立,需要分别配置。
重要
为避免带来安全隐患,量产版本中应该禁用 SPI 下载。但在尚未成功部署安全启动之前,可先不要禁用 SPI 下载, 这样,当安全启动部署失败时,依然可通过 SPI 下载将版本下载到 FLASH。否则,一旦安全启动部署失败,就再 也无法下载版本,板子变砖。
BIT(31) - SWD 调试
BIT(31) 用于控制 CPU 调试口的开关:
0 - CPU 调试开启,BK7239 支持 SWD 调试。
1 - CPU 调试关闭。此时,必须通过 安全调试 才能使能 CPU 调试功能。
重要
安全启动使能时,需要关闭 SWD 调试。