EFUSE
概述
EFUSE (Electrically Programming Efuse) 用于配置 BK7236 中与安全相关的特性,只能由 0 配置成 1,无法由 1 配置成 0。
BK7236 EFUSE 共有 4x8 共 32 Bits, 在安全启动使能前,可以通过 BKFIL 配置,详情请参考 EFUSE 配置。
位 |
名字 |
描述 |
---|---|---|
0 |
security boot enable |
0: 不使能安全启动。1: 使能安全启动。 |
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 |
direct jump enable |
0: 关闭安全启动直接跳转;1: 使能安全启动直接跳转。 |
7 |
security boot critical error |
0: 使能安全启动中严重错误打印;1: 关闭安全启动中严重错误打印。 |
8~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~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(0) - security boot enable
EFUSE 中有两位与安全启动使能相关:
当 BIT(0) 置 0 时,表示安全启动未使能,此时 BL1 认为 IMAGE 中的公钥合法,即不会使用 IMAGE 中的公钥与 OTP 中的 BL1 ROTPK HASH 做比对,仅做 IMAGE 完整性验证。这时 OTP 中即使不配置公钥 HASH 系统依然能启动。
当 BIT(0) 置 1 时,表示安全启动使能,要求 OTP 中必须配置 BL1 ROTPK HASH,否则启动失败。
重要
在安全启动使能前,BKFIL 是通过与 BootROM 通信进行烧录的,此时可以烧录 BL2(bootloader)。 安全启动一经使能,BKFIL 就无法利用 BootROM 进行烧录,此时必须依赖 BL2 中的安全下载,安全下载 支持除 BL2 之外的其他 IMAGE 及 OTP/EFUSE 的下载,但无法再烧录 BL2! 但在 SPI to AHB,EFUSE BIT21 未禁用前可通过 SPI 接口重新烧录 BL2。因此,在使能 安全启动前,务必确保烧录了稳定可靠的 BL2。
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(0)。
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) - Direct Jump
BIT(6) 用于配置 BL1 验签完成之后的跳转到 Bootloader 的方式:
0 表示间接跳转。使用间接跳转时,BL1 在验签完之后不是直接跳转到 BL2,而是先跳转到一个中间 BIN,然后由中间 BIN 再跳转到 BL2。
1 表示直接跳转。使用直接跳转时,BL1 在验签完成之后直接跳转到 BL2。
备注
当使用间接跳转时,中间 BIN 也会包含在 BL2 中一起验签,因此是安全的。
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 接口可直接操作 BK7236 寄存器。
1 - SPI 到 AHB 通道关闭。此时,无法通过 SPI 接口操作 BK7236 寄存器。
需要注意,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 调试开启,BK7236 支持 SWD 调试。
1 - CPU 调试关闭。此时,必须通过 安全调试 才能使能 CPU 调试功能。
重要
安全启动使能时,需要关闭 SWD 调试。