ZHCU948B September 2020 – May 2022 BQ76952
BQ76952 器件包含三种安全模式:SEALED、UNSEALED 和 FULLACCESS,它们可用于限制查看或更改设置的功能。
在 SEALED 模式下,可以使用命令和子命令读取大多数数据和状态,但只能更改选定的设置。无法直接读取或更改数据存储器设置。
UNSEALED 模式包含 SEALED 功能,还增加了执行附加子命令和读取数据存储器的功能。
FULLACCESS 模式支持读取和修改所有器件设置(包括写入 OTP 存储器)的功能。
在该器件运行时,可以通过支持的命令和子命令修改该器件中的选定设置,但为了修改所有的设置,该器件必须进入 CONFIG_UPDATE 模式(请参阅Topic Link Label8.6),这样可以在更新设置时停止器件操作。更新完成后,系统会使用新设置重新启动器件操作。CONFIG_UPDATE 模式仅在 FULLACCESS 模式下可用。
BQ76952 器件实现了一种用于在SEALED、UNSEALED 和 FULLACCESS 模式之间切换的密钥访问方案。每次转换都需要通过子命令地址(0x3E 和 0x3F)向器件发送一组唯一的密钥。必须将密钥连续发送到 0x3E 和 0x3F,密钥之间不得写入其他数据。请勿将两个密钥设置为相同的值。当处于在 SEALED 模式时,0x12 Battery Status()[SEC1, SEC0] 位被设置为 [1, 1]。当该器件正确接收到 UNSEAL 密钥时,这些位将被设置为 [1, 0]。当该器件正确接收到 FULLACCESS 密钥时,这些位将更改为 [0, 1]。状态 [0, 0] 无效,仅表示尚未加载状态。该器件必须先从 SEALED 模式切换到 UNSEALED 模式,然后才能切换到FULLACCESS 模式。
解封密钥存储在数据存储器的 Security:Keys:Unseal Key Step 1 和 Security:Keys:Unseal Key Step 2 中。FULLACCESS 密钥存储在 Security:Keys:Full Access Key Step 1 和 Security:Keys:Full Access Key Step 2 中。使用 0x0035 SECURITY_KEYS() 子命令在运行期间更改访问密钥。该子命令支持 4 个关键字(8 个字节)的 R/W。使用该子命令以大端字节序的顺序发送每个字,前两个字是解封代码,其余两个字是完整的访问代码。
将代码写入 0x3E 和 0x3F 来使用代码时,必须以小端字节序的顺序发送这些代码;因此,如果将 0x1234 和 0x5678 作为解封代码写入 0x0035 SECURITY_KEYS(),则解封需要将 0x34 和 0x12 写入 0x3E 和 0x3F,然后将 0x78 和 0x56 写入 0x3E 和 0x3F。必须在 4s 内写入这两个代码才能成功。
要读取密钥,请执行以下操作:
要写入密钥,请执行以下操作:
要在初次上电时将该器件设置为 SEALED 模式,可以设置 Security:Settings:Security Settings[SEAL] 配置位。在运行期间,可以通过发送 0x0030 SEAL() 子命令将该器件置于 SEALED 模式。
BQ76952 器件包含用于限制进一步修改器件设置的附加方法。如果设置了 Security:Settings:Security Settings[LOCK_CFG] 配置位,则在该器件处于 CONFIG_UPDATE 模式时无法再修改数据存储器设置。如果设置了 Security:Settings:Security Settings[PERM_SEAL] 位,则该器件在被密封后无法解封。
该器件提供额外的检查,可用于优化系统稳健性:
0x0004 IROM_SIG() 子命令计算集成指令 ROM 的数字签名,0x0009 DROM_SIG() 子命令计算集成数据 ROM(其中包含该器件的默认值)的类似签名。对于特定的产品,这些签名绝不应更改。如果发生了更改,则会指示错误,要么是 ROM 已损坏,要么是 ROM 的回读或签名计算出现错误。
0x0005 STATIC_CFG_SIG() 子命令计算静态配置数据(不包含校准值)的数字签名并将其与存储的值进行比较。如果结果与存储的签名不匹配,则设置返回的 MSB。