01 前言
本文引用地址:本文是接着之前文档《 DA 之初体验(带 )》的后续之作。
由于新的 product state 和 DA 的引入, 所有 开发者都必须掌握DA 的用法。63 在 打开和不打开两种情况下, DA 所采用的策略是不相同的。当 TZ 打开时, 使用证书进行 DA, 而当 TZ 不打开时, 则使用密码来 DA。
因此, 本文档针对 STM32H5 初学者, 演示当 TZEN=0xC3( 不打开)时, 使用密码来完成 DA 回退。当 TrustZone 未激活时, 不支持 DA 调试,只支持 DA 回退。
此外, 由于 STM32H503 不带 TrustZone, 它的 DA 过程与 H563 不开启 TZ 的情况下类似。除此之外, 与 H563 不同的是, H503 内部没有 OBK 区域, 因此, 预配置过程会将密码对应的 obk 文件写入芯片内部的 OTP 中。
02 准备工作
开发板: NUCLEO-H563ZI
软件包: STM32Cube_FW_H5_V1.1.0
工具:
• STM32CubeProgrammer v2.14.0
• Tera Term 串口终端显示
• Trust Package Creator (安装 STM32CubeProgrammer 时一并安装, 注意勾选)
IDE: STM32CubeIDE v1.13.0
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下, 在本动手实验中, 我们默认将其放在路径 C:workspace目录下。
03 生成OBK并测试
在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIROT_ProvisioningDA, 在此目录下, 已经包含了默认自带的 obk密钥。其实我们可以直接使用这些 obk 以及对应的密钥, 但在这个文档我们将重新生成一套,并测试它是否 OK。
3.1. 生成 DA OBK 文件和密码文件
打开 TPC 工具。
左边选择 H5, 上方选项卡选择 OBKey, 然后在 xml file 处选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Config/DA_ConfigWithPassword.xml, 然后在 Password 处输入你想要设置的密码, 这里我们直接使用默认密码即可。然后在 output file 处设置输出文件, 我们也使用默认即可。最后点击 Generate OBkey 按键, 在 Binary 目录下生成对应的 obk 文件和bin 文件 :
如上图所示, DA_ConfigWithPassword.obk 是用来做预配置(provisioning)用的, 而password.bin 则是在 DA 过程中需要的密码文件了。
3.2. 预配置 DA(provisioning)
接下来我们将做预配置 DA, 在此之前我们确保 TZEN=0xC3。
然后将 product state 配置为 provisioning 状态 :
然后使用 STM32CubeProgrammer 进行预配置 :
如上图所示, 在 OBKey file path 处输入C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEOH563ZIROT_ProvisioningDABinaryDA_ConfigWithPassword.obk 文件, 再点击 Start Provisioning 按键…
结果将弹出对话框提示预配置成功。
3.3. DA 回退
接下来我们直接使用密码进行 DA 回退…
如上图, 在 STM32CubeProgrammer 断开的情况下, 点击 Discover…
如上图所示, 在 Password File Path 处输入密码文件 :C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEOH563ZIROT_ProvisioningDABinarypassword.bin
然后点击 Full Regression 按键…
如上图所示, 成功时会弹出提示对话框。
这表示, 之前 DA 预配置的 obk 文件与当前输入的密码文件是匹配的。
04 烧录程序再次测试
接下来, 我们正式烧录一个程序并测试。在 product state=open 状态下, 且 TZEN=0xC3 时, 此时烧录任何一个不带 TrustZone 的程序,并确保其在 OPEN 状态下能正常运行,然后将 product state 切换到 provisioning 状态进行 DA 预配置, 重复 3.2 节步骤。
在预配置成功之后, 然后将 product state 切换到 CLOSED(0x72)状态. 此时 STLink 是无法再连接的, 然后检查程序是能依然正常运行。这就是最终想要达到的效果。在此状态下, 可以通过 DA 进行回退。
05 还原
还原的过程参考 3.3 节, 步骤完全一致。最终还原成功后, 全片 Flash 内容已经擦除。
至此, 芯片完全恢复成原始状态。