This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280039:客户引导加载程序中的 CMAC 检查

Guru**** 1839620 points
Other Parts Discussed in Thread: C2000WARE, UNIFLASH, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1422202/tms320f280039-cmac-check-in-customer-bootloader

器件型号:TMS320F280039
主题中讨论的其他器件:C2000WAREUNIFLASHSysConfig

工具与软件:

在我们的工程中、我们有客户引导加载程序和应用程序、现在我们要使用 客户引导加载程序中的 API:CPU1BROM_calculateCMAC ()来验证应用程序的有效性。

我已经阅读了文档<Application Report  Secure Boot on C2000 Device.pdf >。

1、的 第一步 是 身份验证标签的生成。

在我的理解, CMACKEY 由"boot_ex1_user_cmac_key.txt"输入、  

应用的长度  (例如:FLASH_BANK0_2:O=0x00084000 l=0x000B0000、Fill = 0xFFFF)由"boot_ex1_flash_hex_lnk_cpu1.cmd"输入。

定义的 Application" 时、C2000 hex 实用程序将运行 CMAC 算法并使用输入消息 生成 Golden CMAC 标签。

The  黄金 CMAC 标签将放置在 "cmac_all"区域? "cmac_all"区域在 客户引导加载程序或应用程序中定义?

2、此 第二步 是 对闪存中的应用程序引导代码进行身份验证。

运行客户  引导加载程序时、调用  API 函数:CPU1BROM_calculateCMAC ()以比较 CMAC 算法生成的标签和黄金 CMAC 标签。

但是参考密钥定义在哪里?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1.参阅 c2000ware/driverlib/f28p65x/examples/boot 中的安全启动示例、以查看 cmac_all 的正确语法。 下面是一个示例:

    结构 CMAC_TAG
      char tag[8]
      uint32_t start;
      uint32_t end;
    };
    #pragma RETAIN (cmac_all)
    #pragma 位置(cmac_all0x082002)
    const 结构 CMAC_TAG CMAC_ALL ={{0}、0x0、0x0};
    编译器/hex 实用程序识别"cmac_all"关键字并在其中放置 Generate 标签。
    2.参考密钥在用户 OTP 中定义,具体在 CMACKEY 字段中定义。 这应该与项目中包含的.txt 文件中的密钥相匹配。 如果密钥匹配、则在十六进制实用程序生成它并将其放入应用程序代码的时间与 bootrom 调用该函数并使用应用程序代码和 CMACKEY 的组合生成标签时、生成的标签将是相同的。
     
    如果您有其他问题、请告诉我。
    谢谢!
    Luke
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的答复。

    [报价 userid="529193" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1422202/tms320f280039-cmac-check-in-customer-bootloader/5450807 #5450807"]

    1.参阅 c2000ware/driverlib/f28p65x/examples/boot 中的安全启动示例、以查看 cmac_all 的正确语法。 下面是一个示例:

    结构 CMAC_TAG
      char tag[8]
      uint32_t start;
      uint32_t end;
    };
    #pragma RETAIN (cmac_all)
    #pragma 位置(cmac_all0x082002)
    const 结构 CMAC_TAG CMAC_ALL ={{0}、0x0、0x0};
    编译器/hex 实用程序识别"cmac_all"关键字并在其中放置 Generate 标签。
    [报价]

    1 μ s、、 十六进制实用程序 使用应用程序代码来生成黄金  CMAC 标签、 我是否需要在应用程序中定义变量"cmac_all"

       此外、编译除引导加载程序之外的应用程序时、是否需要按如下方式设置配置?

    2 μ、A CMACKEY 字段是否参考这些寄存器(Z1OTP_CMACKEY0|1|2|3)

       如果是、如何更改这些寄存器的值以与.txt 文件中的 KEY 匹配?
       因为这些寄存器的访问类型是相同的 R (读取) .
      
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.是的,您需要按照我在前一篇文章中所演示的方式在 main.c 文件中定义 cmac_all。 您需要将 memwidth 和 romwidth 设置为16才能使用十六进制文件对 OTP 进行编程、看起来已经完成了此操作。

    2.可以、可以使用 CCS 片上闪存工具或 Uniflash 通过 GUI 对 CMACKEY 进行编程、或者您可以在编程时使用 SysConfig DCSM 工具将 CMACKEY 嵌入到.out 文件中。

    如果您还有其他问题、请告诉我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luke

    1、这些 寄存器(Z1OTP_CMACKEY0|1|2|3) 在用户 OTP 中定义、  这些寄存器是否可以写入多次

    或者、如果一个位更改为0、则无法再更改它

    此外、这些寄存器是否可以由 CAN 更改

    2、我尝试 在我们的**.c 文件中按照您在上一篇文章中演示的方式定义 cmac_all。

    然后按照下面的方法更改输出格式、以避免出现这种情况 华林 "#1513-D LOCATION pragma 需要 EABI"

    但我有一个 致命错误#10099-D  程序将无法放入可用的存储器中、或者该段包含的调用站点需要无法为此段生成 trampoline。 针对段".text"大小0x211a 第0页的对齐/分块放置失败。  可用存储器范围:  

    FLASH_BANK0_uBoot  大小:0x3f40    未使用:0x3f34    最大空洞:0x1ff2  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    不可以、CMACKEY 只能写入一次。 如果任何位被修改、整个 CMACKEY 将被冻结。

    您可能有一些安全代码用来接收 CAN 消息并将该值写入 CMACKEY。

    您是否使用了安全启动示例作为起点? 您的项目中应该有一个用于定义.hex 文件存储器范围的文本文件。

    谢谢!

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能有一些安全代码可接收 CAN 消息并将该值写入 CMACKEY

    1、这是否意味着我们可以接收 CAN 消息,例如2E 请求(2e + DID + keyvalue ),然后将 keyvalue 写入 someway 中的 CMACKEY 寄存器?

    2 μ s 在、 C:\ti\c2000\C2000Ware_5_03_00_00\driverlib\f28p65x\examples\c28x\boot 中、cmac_all 的位置为0x082002。

    这是否意味着 Golden CMAC 标签在我构建该工程后位于0x082002中?  

    但当我更改 txt 文件中的 CMACkey 值时、我会重新编译工程、与原始 hex 文件相比、Hex 文件没有更改。

    我认为在我更改 CMACkey 后、黄金 CMAC 标签区域将会改变。

    3 μ s、通过  SysConfig DCSM 工具更改 CMACKEY 值时、 应该如何更改红色框中的配置?

    此外、如果 ZONE1 Header 中的任何值发生更改、则 ZONE1 Header 区域中的另一个值无法再更改?  

    当我在、中定义"cmac_all"变量、但在构建工程后添加两条警告时为4 μ s。

    是否 需要添加变量 cmac_sb_1/2/3/4?   

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.是的

    2.是的、应该这样。 该示例中应该有另一个.txt 文件、该文件定义了.hex 文件将占用的闪存范围。 此范围是否包括地址0x82002?

    3.这取决于您想要的引导设置。 是否要使用安全启动? 您是否希望能够通过修改引导模式选择引脚切换为等待引导?

    4.不需要添加其他 cmac_sb_x 对象。

    谢谢!

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Luke、您好!

    1、能否请我提供一些有关在从 UD 服务接收值时如何向 CMACKEY 寄存器写入值的参考?

    2、抱歉、我再次构建项目、还有另一个问题。

    示例包括 一条名为" boot_ex1_flash_hex_lnk_cpu1.cmd"的十六进制指令、其中包括地址0x82002。

    但当我更改 txt 文件中的 CMACkey 时、   生成文件有两个不同之处、如下所示:

    为什么0x82002中未显示差异?

    3、如果我不想使用安全引导、而又不想切换到等待引导、应如何 在红色框中设置配置?

    如果您需要其他信息、请告诉我。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这位专家目前在10月21日之前不在办公室、因此请预计在此之前会有延误。 感谢您的耐心。

    此致、

    Allison

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    安全启动专家是否已返回办公室?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1.您可能需要 CAN ISR 来读取这些值并使用闪存 API 写入 CMACKEY 寄存器。 我建议启动一个单独的线程、以获得有关使用闪存 API 写入 CMACKEY 字段的帮助。

    地址0x82004有区别、0x82002的值不会改变

    3.是否要使用正常的闪存启动? 如果是、您应该选择闪存引导选项、其中入口地址为0x82000。 注意、引导模式寄存器只能编程一次、因为它们是 OTP 的一部分、因此我建议使用仿真引导进行测试。 安全启动应用手册概述了如何使用仿真启动。  

    谢谢!

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luke

    我创建了一个新线程、用于通过闪存 API 将 DCSM 配置(包括 CMAC 密钥、JTAGPSWD 密钥、CSM 密钥等)写入 OTP 区域。   TMS320F280039C:SysConfig

    [报价 userid="529193" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1422202/tms320f280039-cmac-check-in-customer-bootloader/5475872 #5475872"]我建议启动单独的线程以获取有关使用闪存 API 写入 CMACKEY 字段的帮助。[/QUOT]

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我要关闭这个线程。

    ——路加