ZHCAAD3A September   2020  – June 2026 F29H850DM , F29H850TU , F29H859TU-Q1 , F29P329SM-Q1 , F29P589DM-Q1 , F29P589DU-Q1 , TMS320F2800132 , TMS320F2800133 , TMS320F2800135 , TMS320F2800137 , TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1 , TMS320F28384D , TMS320F28384D-Q1 , TMS320F28384S , TMS320F28384S-Q1 , TMS320F28386D , TMS320F28386D-Q1 , TMS320F28386S , TMS320F28386S-Q1 , TMS320F28388D , TMS320F28388S , TMS320F28P550SG , TMS320F28P550SJ , TMS320F28P559SG-Q1 , TMS320F28P559SJ-Q1 , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1 简介
  5. 2 安全闪存启动概述
  6. 3 CMAC 身份验证
  7. 4 安全闪存启动选项
  8. 5 安全闪存启动流程
  9. 6 C2000Ware 示例详细信息
  10. 7 对超过 16KB 的闪存代码进行身份验证
  11. 8 调试资源
  12. 9 其他信息和注意事项
  13. 10C2000 CMAC 算法与 OpenSSL 的对齐
    1. 10.1 C28x 存储器和二进制文件字节顺序
    2. 10.2 闪存二进制字节顺序
    3. 10.3 CMAC 密钥字节顺序
    4. 10.4 CMAC 输出对齐流程
    5. 10.5 工作示例
    6. 10.6 差异总结
  14. 11参考文献
  15. 12修订历史记录

C2000Ware 示例详细信息

C2000Ware [2] 通过一个示例来说明应用程序的安全闪存启动设置。该示例包括针对每个内核的安全闪存启动应用程序工程。该示例还详细说明了如何对安全闪存启动入口地址 + 16KB 之外的闪存代码进行身份验证。节 7中提供了关于此定制闪存范围身份验证功能的更多详细信息。该示例假设要进行身份验证的闪存扇区已预先配置为 Zone 1 EXEONLY 并使用默认 CMACKEY 进行身份验证。有关在 CPU1 USER OTP 中对定制 CMACKEY 和其他 DCSM 设置进行编程的详细信息,请参阅 [1] 和 [2]。

C2000Ware 位置:<C2000Ware_安装目录>/driverlib/f2838x/examples/c28x/boot

工程名称:

  • boot_ex1_cpu1_cpu2_cm_secure_flash_cpu1
  • boot_ex1_cpu1_cpu2_cm_secure_flash_cpu2
  • boot_ex1_cpu1_cpu2_cm_secure_flash_cm

包含的文件:

  • 源文件 – 包含主应用程序代码
    • 示例:boot_ex1_cpu1_cpu2_cm_secure_flash_cpu1.c
  • 十六进制链接器命令文件 – 向 c2000 或 arm hex 实用程序提供整个闪存长度的详细信息
    • 示例:boot_ex1_flash_hex_lnk_cpu1.cmd
  • CMAC 密钥文本文件 – 为 c2000 或 arm hex 实用程序提供用户 CMAC 密钥
    • 示例:boot_ex1_user_cmac_key.txt
    • 更多有关 cmac_key 格式的详细信息,请参阅 [3] 和 [4]。

如何运行该示例:

  1. 将应用程序加载到 CPU1 闪存中(以及 CPU2 和 CM 应用程序)。
    1. 加载 *.hex 文件,而不是 *.out 文件
  2. 断开连接并仅重新连接到 CPU1。
  3. 要将器件配置为在启动时执行安全闪存启动:
    1. 仿真启动(建议用于示例/开发)
      1. 在 CCS 存储器窗口中,将 BOOTPINCONFIG 位置 (0x0D00) 设置为 0x5AFFFFFF,并将 BOOTDEF 位置 (0x0D04) 设置为 0x0000000A
    2. 独立启动(建议用于部署)
      1. 对与 BOOTPINCONFIG 和 BOOTDEF 相对应的 CPU1 USER OTP 位置进行编程。若要了解更多信息,请参阅 [1]。
  4. 通过 CCS 重置 CPU1,然后点击“Resume”。
  5. 观察 controlCARD 上的 LED 指示灯是否指示已成功。
    1. 当所有三个内核都成功地安全启动并对它们的完整闪存内容进行身份验证时,三个 LED 指示灯(每个内核一个)将闪烁。
  6. 对于不使用 controlCARD 的情况,请注意以下基于 CPU 子系统的 GPIO 切换开关:
    1. CPU1 – GPIO31
    2. CPU2 – GPIO34
    3. CM – GPIO145

生成黄金 CMAC 标签的应用程序代码要求:

用于安全闪存启动选项 0 的 CPU1/CPU2 黄金 CMAC 标签存储器分配

// CPU1/CPU2 的实现情况
#pragma RETAIN(cmac_sb_1)
#pragma LOCATION (cmac_sb_1, 0x080002)
const char cmac_sb_1[8] = {0};

用于安全闪存启动选项 0 的 CM 黄金 CMAC 标签存储器分配

#pragma RETAIN(cmac_sb_1)
#pragma LOCATION (cmac_sb_1, 0x00200004)
const uint8_t cmac_sb_1[16] = {0};

常量字符/无符号整数定义会为黄金 CMAC 标签分配存储器。如需更多信息,请参阅节 6中的示例:

  • 变量命名必须为以下之一:cmac_sb_1、cmac_sb_2、cmac_sb_3、cmac_sb_4
    • 在《TMS320C28x 汇编语言工具用户指南》 [3] 中可找到更多有关 C28x 的详细信息
    • 在《ARM 汇编语言工具用户指南》 [4] 中可找到更多有关 CM 的详细信息
  • 使用 LOCATION pragma 为 CMAC 黄金标签指定预期身份验证范围内的地址。对于 CPU1/CPU2,此地址必须为入口地址 + 2,对于 CM,此地址必须为入口地址 + 4。
  • 保持变量初始化为零。

使用十六进制实用程序时的应用程序设置:

 为 CMAC 启用十六进制实用程序后的 CPU1 示例属性图 6-1 为 CMAC 启用十六进制实用程序后的 CPU1 示例属性

每个内核工程都使十六进制实用程序能够生成黄金 CMAC 标签(请参阅图 6-1)。标签包括:

  • “--cmac”,提供用户 CMAC 密钥文本文件的路径
  • “--image”、“--memwidth”和“--romwidth”,其中设置了 mem/rom。CPU1/CPU2 的此设置应为 16,CM 的此设置应为 8
  • 对应内核的闪存十六进制链接器命令文件的路径。