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:使用 C2000十六进制实用程序生成十六进制文件时出现问题

Guru**** 2482105 points
Other Parts Discussed in Thread: UNIFLASH, TMS320F28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1451934/tms320f28388d-issue-with-hex-file-generation-using-c2000-hex-utility

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

工具与软件:

尊敬的团队
我们将使用 C2000十六进制实用程序来生成十六进制文件。 但是、 我们已经观察到在使用不同的命令生成十六进制文件时输出存在差异、这会导致第三方工具和闪存软件的兼容性问题。
两个命令选项是:
  1. 十六进制生成命令选项1 :-order MS -romwidth 16 -q  --memwidth=16  ->选项适用于 uniflash 但不适用于 VcdmStudio
  2. 十六进制生成命令选项 2: -order MS -romwidth 16 -q  --memwidth=8  ->选项、适用于 vcdmstudio 但不适用于 uniflash
当我们使用第一个命令时、会成功生成十六进制文件、但校准所需的参数在 INCA 和 VCDM Studio 等第三方工具中不可见。 因此、我们无法更新 hex 文件(离线校准)中的参数值。
另一方面、当我们使用命令2时、会成功生成十六进制文件、并在第三方工具中正确显示用于校准的参数。 我们能够更新 hex 文件中的参数值、而不会出现任何问题。 但是、我们无法使用 Uniflash 工具在微控制器中刷写文件、这会引发错误。  
您能否帮助我们了解这两条命令之间的区别、以及为什么命令1无法生成与离线校准兼容的十六进制文件? 此外、为什么命令2不能生成与 Uniflash 闪存软件兼容的 hex 文件?
附加的是命令1和命令2工件: 十六进制文件、映射文件、out 文件、连接器文件、A2L 文件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这里有两行 Command1.hex ...

    :20004000FE0296412B4276083B3092BE761F05B1BE00960A761F058106006002BE0192A600
    :200050007E42600E761F05B1920A90015201600576083B3092BE6F047608293092BE92428B

    这里有两行 COMMAND2.HEX ...

    :2000100022761F76E017241A0100201A03001F76E6170018FDFF0018FEFF1F76E01700CC1D
    :20003000FFF0A91A000300961F76E617001A0200001A01001F76EC1700CCF0FF0A50009659

    现在、我重复中每行的前几个字符 Command1.hex ,一些字符以粗体显示...

    :20. 0040
    :20. 0050

    将其与进行比较 COMMAND2.HEX ...

    :20. 0010
    :20. 0030

    粗体字符是该行上数据地址的低16位。  在 C28x CPU 上、每个地址对应于1个16位字、而不是1个8位字节。  这与几乎所有其他 CPU 不同、其中每个地址对应于1个8位字节。  In Command1.hex 、地址的计数方式与 C28x CPU 的计数方式相同、其中每个地址对应1个16位字。  In COMMAND2.HEX 、地址以更典型的方式进行计数、其中每个地址对应1个8位字节。  您可以通过注意到中的地址看到该值 Command1.hex 每行前进0x10、而地址在中 COMMAND2.HEX 每行前进0x20。  即使所有行都具有相同的数据量、情况也是如此。

    虽然我无法通过测试确定、但很好地猜测、第三方工具会假定每个地址对应于1个8位字节。   

    这里是需要考虑的一种解决方案。  Uniflash 支持由链接器生成的 ELF 目标文件。  对于 Uniflash、请勿使用 hex 文件。  使用 .out 报头文件。  仅对第三方工具使用 hex 文件。

    谢谢。此致、

    -George.

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

    您好、 

    感谢您的快速响应和详细解释。

    用例是更新十六进制文件中的变量/参数值(离线校准)。 在十六进制文件中更新值后、需要在 ECU 中刷写同一个文件、以便 ECU 使用更新后的参数值。

    VCDMStudio 工具团队确认它们仅支持8位寻址。

    是否有任何变通办法、以便现有的第三方工具(支持字节寻址的工具、如 VCDM Studio)可以校准参数、并且该文件可以闪存到 ECU?

    或者、作为替代方案、您可以为 TMS320F28388D 微控制器推荐一款受支持的校准工具吗?

    谢谢!

    Vikram

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

    您似乎误解了我所描述的解决方案。

    用例是更新十六进制文件中的变量/参数值(离线校准)。 在十六进制文件中更新值后、需要在 ECU
    中刷新同一个文件

    而不是使用 hex 文件(由 -- memwidth=8 )要刷新 ECU、请使用 .out 报头文件。

    谢谢。此致、

    -George.

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

    您好、 

    感谢您的答复。  

    我不想再次重新编译代码。

    第三方工具不支持 .out 用于离线校准的调试文件。

    我想将校准后的文件刷写到 ECU 中。 如果我使用 .out 刷写和 .hex 文件中进行离线校准、可在首次刷写代码。 但是、如何刷写校准后的固件文件?

    转换校准后的值 十六进制 转换为 能源 情况? 如果是、我如何转换它?

    添加了示例。

    • 我有一个源代码,其中有一个变量(可校准)var = 10. 我使用选项编译代码memwidth = 8、该选项可生成两个 能源 和 A 十六进制 报头文件(通过十六进制实用程序)。

    • 我使用 .out 刷写和 .hex 用于校准的第三方工具的下载可视化文件。

    • 我会var = 20更新变量并导出或保存更新后的十六进制文件。

    • 我如何转换更新的  十六进制 转换为 能源 以便将其刷写到 ECU 中?

    工作流程:

    谢谢

    Vikram