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.

[参考译文] TMS320F28375S:如何使用基于 CAN 的自定义引导加载程序刷写 BIN 文件。

Guru**** 2609775 points
Other Parts Discussed in Thread: TMS320F28375S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1577457/tms320f28375s-how-to-flash-bin-files-using-a-custom-can-based-bootloader

器件型号:TMS320F28375S


大家好:

我在 TI TMS320F28375S MCU 上工作、 目前、我使用 TXT 文件刷写器件、该文件清楚地指定了文件中基于 CAN 的自定义引导加载程序的闪存地址和块大小。 、如本主题中所建议:
https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1355292/tms320f28375s-issue-with-source-file-availability-post-bootloader-jump-on-tms320f28375s

但现在、我要使用引导加载程序的 BIN 文件刷写 MCU。  

BIN 文件仅包含原始数据、没有任何地址或块大小信息。

如何使用自定义 CAN 引导加载程序正确处理和刷写 RAW bin 文件? 在使用 TI C2000 器件上的 BIN 文件时、管理闪存地址和数据分块的最佳实践是什么?

谢谢!

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

    您好:

    如果您正在刷写只有要编程到 MCU 中的数据的原始 BIN 文件、则必须跟踪一些变量。

    1.您将需要确定需要编程的闪存区域、并在引导加载程序中对此进行硬编码、或使用一些数据包协议来传达此信息。

    2.当块被接收/编程到 MCU 时、您需要跟踪要编程的地址。

    3.你将需要有某种方式的通信目标没有更多的数据来自主机. 您可以通信和跟踪图像大小、具有超时条件以及传输字符/数据包结束等

    您是否特别遇到任何问题?

    此致、

    Skyler

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

    您好、  

    感谢您的答复。 您建议的点是在刷写 txt 文件时在我的引导加载程序中完成的。 但是、我遇到的是一个更具体的问题  非线性存储器映射

    如果我使用一个 TI TXT 文件、它会在不同闪存地址包含多个数据段。 例如、一个段可能从 0x88000 到 0x88FFF 开始、然后存在一个缺口(用 0xFFFF 填充)、另一个段可能稍后从 0x89380 开始、以此类推
    TXT 文件明确包含每个数据块的起始地址、因此我的引导加载程序可以正确地将每个块编程到其适当的闪存区域中。

    但当我生成一个时  RAW BIN 文件 、所有这些地址偏移和间隙都将丢失—它只包含连续数据流、没有任何关于每个段在闪存中的位置的信息。 因此、如果我尝试直接刷写、所有数据块最终会背对背写入、这会破坏程序布局。

    我的问题是:
    使用 BIN 文件时如何处理这种情况?

    还有比 Raw bin 文件更好的版本或 BIN 文件吗?

    是否有办法生成仍然保留原始 TXT 文件段地址的 BIN 文件?

    是否可以修改工程的链接器命令文件或任何构建设置、使所有代码/数据段连续置于闪存中(即它们之间没有空区域)?

    对此场景的任何建议或最佳实践都将非常有帮助。

    再次感谢您的时间和支持!
    Muzammil

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

    尊敬的 Muzammil:

    有关为整个存储器范围生成 bin 文件的一些提示、请参阅 George 对 该线程的响应。

    此致、

    Skyler

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

    您好、Skyler、

    感谢您的回复和分享参考线程。

    我浏览了建议的帖子、但我无法清楚地了解它如何适用于我的案例。

    在我的工程中、起始地址在链接器命令文件中固定、并且相同的地址已经在我基于 CAN 的自定义引导加载程序内正确管理。

    我需要生成一个.bin文件、使数据完全保持在正确的地址、就像在.txt文件中一样。 我不希望忽略这些空洞或未使用的内存区域;只需用填充0xFFFF

    连续布局对我来说是完美的,只要所有段都保持在正确的偏移量,并且内存间隙被填充0xFFFF。 您能否.bin为为 TMS320F28375S 生成此类文件提供适当且详细的解决方案?

    您建议的主题有点令人困惑、因此、针对此案例提供更清晰的解释或示例确实会有所帮助。

    此致、
    Muzammil

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

    尊敬的 Muzammil:

    乔治的答复将其分为几个步骤。 用户需要创建一个新的链接器 cmd 文件、用于指定地址范围。 该地址范围是生成 BIN 文件时将读取的范围。 请注意、ROMS 指令中指定的存储器范围需要乘以 2、因为尽管 C28x 是 16 位可寻址的、但 hex2000 工具将其视为字节可寻址存储器。 例如、如果用户希望生成一个包含 0x80000 - 0x90000 中所有数据的二进制文件、ROMS 指令将如下所示:

    ROMS {
       all_mem: o = 0x100000, l = 0x20000, fill = 0xFFFF
    }

    然后、您需要按照指定的方式添加编译后处理步骤:

    hex2000 -q -b -image -o binary_file.bin roms_directive_file.txt final_executable_file.out

    使用这些步骤、您将能够生成.bin 文件、该文件直接反映闪存的内容并将所有数据保持在适当的偏移量。 任何未编程的位置都将用 0xFFFF 填充。

    此致、

    Skyler

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

    您好、Skyler、

    我已经按照您上面提到的步骤操作、但仍然无法生成所需的.bin文件。

    让我详细解释一下我迄今所做的工作:

    1. roms_directive_file.txt在我的工程中添加了、其中包含:

      ROM

      all_mem:o = 0x110000、l = 0x05FFF6、fill = 0xFFFF
      }
    1. 在工程设置中、我按照您的建议完全添加了编译后处理步骤、指向十六进制实用程序并使用 ROMS 指令文件。

    尽管这样做、但我仍然无法.bin按预期生成文件。

    我是否还遗漏了其他要点? C2000 十六进制实用程序中是否需要启用或配置特定设置? 或者、是否有另一个我忽略的因素阻止.bin生成文件?

    目前、除了您所说的内容外、我还没有进行任何其他设置。

    您需要创建一个新的链接器 cmd 文件、用于指定地址范围。

    我应该在链接器 cmd 文件中做什么更改或在新的链接器 cmd 文件中做什么?

    我非常希望获得指导。

    此致

    Muzammil

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

    尊敬的 Muzammil:

    需要在编译后处理步骤中添加 hex2000.exe 的路径。 例如:

    "${CCE_INSTALL_ROOT}/tools/compiler/ti-cgt-c2000_22.6.1.LTS\bin\hex2000.exe" -q -b -image -o binary_file.bin roms_directive.cmd "${BuildArtifactFileName}"

    此外、您创建的 ROMS 指令文件应该是.cmd 文件、并且应该从构建中排除。 只能由编译后处理步骤使用。 您无需修改现有链接器 cmd 文件。

    此致、

    Skyler