ZHCAEV6 December   2024 F29H850TU , F29H859TU-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1编程基础知识
  5. 2引言
    1. 2.1 硬件安全模块
    2. 2.2 ROM 引导加载程序
    3. 2.3 带有 X.509 证书的合并映像
  6. 3闪存内核实现
    1. 3.1 CPU1 固件升级 (HS-FS)
    2. 3.2 密钥预置(HS-FS 至 HS-KP)
    3. 3.3 CPU1 安全固件升级(HS-KP/SE 至 HS-SE)
    4. 3.4 HSM 固件升级(HS-KP/SE 至 HS-SE)
    5. 3.5 SECCFG 代码预置(HS-KP/SE 至 HS-SE)
  7. 4主机应用程序:UART 闪存编程器
    1. 4.1 概述
    2. 4.2 使用 Visual Studio 构建 UART 闪存编程器
    3. 4.3 使用 CMake 构建 UART 闪存编程器
    4. 4.4 数据包格式
    5. 4.5 内核命令
  8. 5示例用法
    1. 5.1 将闪存内核加载到器件中
      1. 5.1.1 硬件设置
      2. 5.1.2 运行 UART 闪存编程器
    2. 5.2 CPU1 器件固件升级(仅限 HS-FS)
    3. 5.3 将 HS-FS 转换为 HS-SE
    4. 5.4 加载基于 RAM 的 HSMRt 映像
    5. 5.5 密钥预置(HS-FS 至 HS-KP)
    6. 5.6 代码预置(HS-KP/SE 至 HS-SE)
  9. 6故障排除
    1. 6.1 一般信息
    2. 6.2 UART 引导
    3. 6.3 应用程序加载
  10. 7总结
  11. 8参考资料

带有 X.509 证书的合并映像

随着 HSM 的加入,BootROM 要求所有传入的映像采用二进制格式,并且附带 X.509 证书。二进制文件的前 0x1000 个字节必须包含密钥证书。

下面列出了由 UART 闪存内核和其他 SDK 示例提供的默认编译后步骤,用于生成带有 X.509 证书的合并二进制映像。

对于新的 Code Composer Studio 工程,将以下脚本粘贴到工程属性的“编译”类别下的编译后步骤 部分。要独立运行脚本,请在器件 SDK 的根目录中找到 import.mak 文件,以获取该变量的默认别名。

RAM 编译后步骤(对于闪存内核):

${CG_TOOL_OBJCOPY} --strip-all -O binary ${ProjName}.out ${ProjName}.bin
$(PYTHON)  ${COM_TI_MCU_SDK_INSTALL_DIR}/tools/boot/signing/mcu_rom_image_gen.py --image-bin ${ProjName}.bin --core C29 --swrv 1 --loadaddr 0x200E1000 --sign-key ${COM_TI_MCU_SDK_INSTALL_DIR}/tools/boot/signing/mcu_custMpk.pem --out-image ${ProjName}.cert.bin --boot RAM --device f29h85x --debug DBG_SOC_DEFAULT
  • 生成基于 RAM 的二进制映像: ${ProjName}.cert.bin
  • mcu_rom_image_gen.py ram 参数:--loadaddr 0x200E100 (LDAx RAM),--boot RAM

闪存编译后步骤(对于闪存应用程序映像):

${CG_TOOL_OBJCOPY} --remove-section=cert -O binary ${ProjName}.out ${ProjName}.bin
$(PYTHON) ${COM_TI_MCU_SDK_INSTALL_DIR}/tools/boot/signing/mcu_rom_image_gen.py --image-bin ${ProjName}.bin --core C29 --swrv 1 --loadaddr 0x10001000 --sign-key ${COM_TI_MCU_SDK_INSTALL_DIR}/tools/boot/signing/mcu_gpkey.pem --out-image ${ProjName}_cert.bin --device f29h85x --boot FLASH --img_integ no
${CG_TOOL_OBJCOPY} --update-section cert=C29-cert-pad.bin ${ProjName}.out ${ProjName}_cert.out
$(DELETE) ${ProjName}.out C29-cert-pad.bin;
$(RENAME) ${ProjName}_cert.out ${ProjName}.out
  • 生成基于闪存的二进制映像: ${ProjName}_cert.bin
  • mcu_rom_image_gen.py 闪存参数:--loadaddr 0x10001000(闪存入口地址),--boot FLASH

上面显示的两个编译后步骤都会为应用程序生成证书,将应用程序 .out 文件转换为二进制文件,并创建带有 X.509 证书的合并二进制映像。

此外,编译后步骤利用 SDK 中提供的两个不同密钥:

  • mcu_gpkey.pem:TI 提供的通用密钥,用于生成 TI 密钥证书。
  • mcu_custMpk.pem:一个虚拟密钥,这个虚拟密钥模拟了一个自定义密钥,可用作示例自定义密钥,用于测试密钥预置和代码预置。
注:

要使用自定义密钥证书更改生成的密钥证书,请提供备用密钥并通过参数 --sign-key 传递到 python 脚本中。对于所有涉及 HS-KP 和 HS-SE 以及 HS-SE 的 HSMRt 的闪存映像,这都是必需的。