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参考资料

内核命令

表 4-4 中提供了命令及相关内核行为的简要说明。

表 4-4 CPU1 内核命令流
内核命令命令代码说明
DFU CPU10x011.接收没有任何数据的命令数据包
2.逐字节接收闪存应用程序
3.编程并验证应用程序
4.发送闪存状态数据包
5.发送关于最终状态的消息
加载 HSMRt 映像0x0B1.接收没有任何数据的命令数据包
2.逐字节接收 HSMRt
3.将 HSMRt 放置在共享 LDAx RAM 中
4.发送闪存状态数据包
5.等待接收 HSM 客户端的状态
6.发送关于最终状态的消息
加载 HSM 密钥

0x0E

1.接收没有任何数据的命令数据包
2.逐字节接收 HSMRt
3.将密钥证书放置在共享 LDAx RAM 中,以便 HSM 可以对其进行编程
4.等待 IPC 消息形式的 HSM 身份验证状态
5.发送状态数据包
6.转发来自 HSM 的状态日志消息
负载

HSM 代码预置映像(适用于 HSM 的固件升级)

0x0D

1.接收没有任何数据的命令数据包
2.逐字节接收 HSM 固件,将包括的密钥证书发送给 HSM 进行验证
3.继续将固件存储在共享 LDAx RAM 中,以便 HSM 按块进行验证(如果固件超过 RAM 的大小)
4.等待 HSM 对编程的固件执行完整性检查
5.发送闪存状态数据包
6.发送状态日志消息
加载 C29 代码预置映像(适用于 HS-SE C29 的固件升级)

0x10

与 HSM 代码预置映像相同

对 SECCFG 区段进行编程 (HS-SE)

0x0C

1.接收没有任何数据的命令数据包
2.逐字节接收 SECCFG 映像并存储在共享 RAM 中,以便 HSM 进行验证
3.发送状态数据包
4.发送状态日志消息

Run CPU1

0x09

1.接收没有任何数据的数据包
2.分支到应用程序入口点

Reset CPU1

0x0A

1.接收没有任何数据的数据包
2.启用看门狗并允许其引发复位