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.

[参考译文] TMS320F28388D:通过 SCI 安全启动更新

Guru**** 2807975 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1605098/tms320f28388d-secure-boot-update-via-sci

器件型号: TMS320F28388D
主题: C2000WARE 中讨论的其他器件

使用 C2000ware 05.05.01

F28388D 的 controlCARD

我可以使用安全启动仿真和默认密钥 0xfff 成功运行示例 boot_ex_1_cpu1_cpu2_cm_secure_flash_cpu1/cpu2/cm。

我可以成功运行示例 flash_kernel_c28x_dual_ex1_c28x1 并与 serial_flash_programmer.exe 连接。 我可以成功刷写示例 led_ex1_c28x_dual_blinky_cpu1。

现在、我要 将示例闪存内核与 serial_flash_programr.exe 一起使用并编写安全启动示例。 但是、在启动中的选项 1-DFU CPU1 后 、我会收到错误消息:

... 
传输的比特率/秒为:7055.239746
应用程序加载成功!
已完成等待应用程序下载和引导...
命令成功
错误状态:program_error
错误地址:0x80002
闪存 API 错误:数据缓冲区长度不正确
有关错误的进一步说明、请参阅闪存 API 文档。
FMSTAT 寄存器内容:00

在刷写安全启动示例之前、我向 C2000 十六进制实用程序添加了以下选项:

已启用“选择引导模式 (--boot)

启用表源作为 SCI-A 端口、8 位模式 (-sci8)

将输出格式设置为 ASCII 十六进制 (--ascii)

我曾使用过其中的一些选项、但无法刷写安全启动示例。 上面的错误消息是我能得到的最远的。  什么是我的缺失?

 

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

    拼写错误:使用 C2000ware v5.05.00.00  

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

    您好:

    由于 黄金 CMAC 标签是为大小为 8 个字的 0x80002 分配的、这 可能会导致编程期间出现闪存对齐问题。  您必须使用后处理脚本合并未对齐的段、我将在 E2E DM 中与您分享此内容。

    此致、

    马特  

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

    感谢 Matt 帮助解决此问题。

    为了清晰起见、重申此问题;由于 CMAC 标签从非 128 位对齐的地址开始、然后作为 UART.hex 文件中的唯一部分传递;闪存 API 会拒绝此作为无效地址。  

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

    这是一个很好的听到。 我已经想到了调试以及更改内核或十六进制。 但是、我确定有人可能已经遇到了这个问题、必须有一个解决方案。 我真的很期待您的后处理脚本。

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

    尊敬的 Simeon:

    请在 E2E 上接受我的友谊申请、只有这样我才能告诉您。

    此致、

    马特

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

    谢谢、但我不确定是否正确使用、或者用例可能有所不同。

    1. C2000ware 示例工程 boot_ex_1_cpu1_cpu2_cm_secure_flash_cpu1

    2.它预配置了 hex2000 配置,运行:

    ^:/ti/ccs1281/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS/bin/hex2000 
    -- cmac=“C:/.../boot_ex1_user_cmac_key.txt ^
    -image --memwidth=16 --romwidth=16 “C:/...\boot_ex1_flash_hex_lnk_cpu1.cmd“^
    -- diag_swrap=off ^
    -o “boot_ex1_cpu1_cpu2_cm_secure_flash_cpu1.hex" ^“^
    “boot_ex1_cpu1_cpu2_cm_secure_flash_cpu1.out"</s>“  

    3.要创建用于刷写参数的十六进制文件、需要--ascii -sci8 -boot、例如:

    ^:/ti/ccs1281/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS/bin/hex2000 
    -- cmac=“C:/.../boot_ex1_user_cmac_key.txt ^
    -image --memwidth=16 --romwidth=16 “C:/...\boot_ex1_flash_hex_lnk_cpu1.cmd“^
    -- diag_swrap=off ^
    -ascii --boot -sci8 ^
    -o “boot_ex1_cpu1_cpu2_cm_secure_flash_cpu1.hex" ^“^
    “boot_ex1_cpu1_cpu2_cm_secure_flash_cpu1.out"</s>“  

    4.这不起作用,因为从 汇编语言工具 :“要从 SPI-A 端口引导,请在调用实用程序时指定--spi8。 请勿指定--memwidth 或--romwidth。“

    合并未对齐的块 (merge_misaligned_blocks.py) 失败:

    ValueError:int() 的字面值无效、其基数为 16:'%4E6F38000801A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF%4E6F2800080190FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 

    正如自述文件所述:旨在对齐 OTP 寄存器的配置。 但是、我不会写入任何 OTP 寄存器;我尝试通过 SCI 刷写安全启动签名的映像。

    我的目标可能对我来说太明显了、但我可能会被宠坏:

    *将 SBL +引导加载程序放入区域 1

    * SBL 验证区域 2

    *按需(例如 SCI/CAN 命令)SBL 将闪存内核复制到 RAM、运行它

    *闪存内核解锁第 2 区,写入更新

    当然、区域 1 和区域 2 是使用 CMACKEY 签名和验证的。 此外、JTAG 也被锁定。

    安全引导实际上是否支持此 (DFU/OTA)? 我读 spract3、 sprabv4i 、sprujh3 、spracp8a、spruii0f 等 所有位都已存在、但不会合并在一起。

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

    我刚刚发现  

    C:\ti\C2000Ware_5_05_00_00\utilities\flash_programmers\cmac_preparation

    它有助于将使用冲突参数-romwidth 16 -ramwidth 16 ...-boot -sci8 生成的 ASCII 十六进制输出对齐

    merge_cmac.py 成功合并地址 08 00 02 处的黄金 CMAC。 但是、它缺少对   08 70 02 位置处的 cmac_all 的定制范围支持。

    我修改了 merge_cmac.py、以便在找不到专用块时注入自定义 codestate_addr:


    DEF move_CMAC (blocks、cmac_addr、codestate_addr):
      如果 cmac_addr 不在块中:
        print(“CMAC 地址“、cmac_addr、“不是有效块“)
        退出 (2)
      如果 codestart_addr 不在块中:
        print(“Codestart address“、codestate_addr、“不是有效块、将以长度 2 (4 字节 FF) 相加“)
        blocks[codestate_addr]['length']= 2
        blocks[codestart_addr][“data"]=“=[“FF",“,"FF"、"FF",“,"FF"“"FF",、,"FF"]“"FF"]</s>“ 、““

    除了正常合并之外、还会在提供额外的 cmac_addr 和 codest_addr 时执行此操作。

    没有错误检查、什么也没有、但我最终可以通过 SCI 刷写安全启动映像并使用安全 ROM API 验证自定义范围。

    感谢您的支持!