EFUSE

[English]

概述

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(3) - boot mode 用于设置启动模式。0 表示传统下载模式,此时可通过 UART 下载版本;1 表示安全启动模式, 设置成安全启动模式之后还需要将 BIT(3) 置 1 才能使能安全启动。

  • BIT(0) - 使能安全启动。仅在 BIT(3) 设置成 1(安全启动模式)时有效,表示是否使能安全启动。

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 定义了两级调试信息来供用户定位问题:

  • BIT(1) - 控制普通调试信息。

  • BIT(7) - 控制严重错误。

普通调试信息除了错误之外,还包括一些流程性的日志打印。严重错误通常是指会导致 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 调试。