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.

[参考译文] TMS320F28377S:在不使用引导模式引脚的情况下进行串行固件更新。

Guru**** 2392475 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1473660/tms320f28377s-serial-firmware-update-without-using-the-boot-mode-pins

器件型号:TMS320F28377S
Thread 中讨论的其他器件:C2000WARE

工具与软件:

我们最初通过单个 PCB 上的编程控制器和 DSP 对 DSP 实施串行固件更新。 此设置在提供复位和引导模式选择引脚以将 DSP 置于串行引导模式方面不会出现问题。 但在我们的新产品设计中、DSP 和编程控制器位于单独的 PCB 上、我们计划通过差分信令(例如 RS -485或 CAN)在它们之间进行通信。 因此、我们正在寻找一种解决方案、从而无需复位/引导模式选择引脚、并使用相同的通信通道(RS -485或 CAN)实现串行固件更新。

我考虑的一个潜在解决方案如下:

  1. 修改现有闪存内核以侦听预期的通信接口(即 CAN 或 RS 485)、而不是使用原始引导接口。 我假设闪存内核代码可进行修改、并且可以轻松修改以用于此目的。

  2. 将此更新后的闪存内核存储在闪存中。

  3. 接收到固件更新命令后、将闪存内核从闪存复制到 RAM。

  4. 内核加载到 RAM 后、它会将新固件(包括闪存内核)写回闪存、就像通过 ROM 引导加载程序加载更新一样。

能否就该解决方案是否可行提供反馈? 我是否应该考虑任何挑战、缺点或其他注意事项? 此外、如果您有任何与此主题相关的资源/主题或文献、我将非常感谢您的指导。

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

    尊敬的 Asad:

    这是您可在 CAN 范围内为此器件实施的一个可行解决方案。 我将首先介绍我们当前针对 CAN 的解决方案、您可以在 C2000微控制器的 CAN 闪存编程 应用手册中查看该解决方案并对其进行修改以进行固件更新。

    需要考虑的一些因素:

    -如果板是分开的,是否每个有自己的 CAN 收发器? 如果没有、您是否需要实施它们?

    - 如果你不需要执行它们? 另外、如果您有 Visual Studio 许可证、则可以修改该器件的现有闪存内核。 我们使用 PEAK API 来处理 CAN 消息。  

    谢谢。此致、

    Charles

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

    尊敬的 Charles Roberson:

    非常感谢您的指导。

    关于您的问题:是的、这些电路板是单独的、每个电路板都有自己的 CAN 收发器。 我们对使闪存内核成为固件更新的一部分有一个担忧。 我们假设出现以下两种情况:

    1. 新的固件更新包含闪存内核代码中的错误。
    2. 固件更新中断、例如、由于电源故障。

    在这些情况下、电路板不再能够通过串行固件更新进行更新。 您是否有任何降低此类风险的建议? 我当时正在考虑将闪存内核存储在其中一个闪存扇区并对该扇区进行写保护的方法。 在这种情况下、我们可以先使用闪存内核对电路板进行编程、然后仅发送应用更新。

    在这方面:

    1. 您是否同意这将是一种可行的方法?
    2. 您预计此方法会带来哪些挑战? 是否需要修改链接器文件来将应用程序重新定位到闪存中的不同偏移量? 是否需要重新映射中断矢量表?
    3. 是否可以从闪存应用程序调用 ROM 引导加载程序代码? 如果可能的话、这可以大大简化整个过程、并且我们可以使用标准实现。
    4. 如果我们为 CAN 引导模式设置引导模式引脚、以便器件始终以 CAN 引导模式启动、该怎么办? 应用程序的软件复位会在 CAN 引导模式下调用器件吗?  那么、在需要从闪存正常执行的情况下、是否有可能从 CAN 引导模式跳转到闪存执行?  

    其理念是以最少的开发工作量实现最可靠的实施。 再次感谢您的支持、我期待您对这种方法的看法。

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

    尊敬的 Charles Roberson:

    非常感谢您的指导。

    关于您的问题:是的、这些电路板是单独的、每个电路板都有自己的 CAN 收发器。 我们对使闪存内核成为固件更新的一部分有一个担忧。 我们假设出现以下两种情况:

    1. 新的固件更新包含闪存内核代码中的错误。
    2. 固件更新中断、例如、由于电源故障。

    在这些情况下、电路板不再能够通过串行固件更新进行更新。 您是否有任何降低此类风险的建议? 我当时正在考虑将闪存内核存储在其中一个闪存扇区并对该扇区进行写保护的方法。 在这种情况下、我们可以先使用闪存内核对电路板进行编程、然后仅发送应用更新。

    在这方面:

    1. 您是否同意这将是一种可行的方法?
    2. 您预计此方法会带来哪些挑战? 是否需要修改链接器文件来将应用程序重新定位到闪存中的不同偏移量? 是否需要重新映射中断矢量表?
    3. 是否可以从闪存应用程序调用 ROM 引导加载程序代码? 如果可能的话、这可以大大简化整个过程、并且我们可以使用标准实现。
    4. 如果我们为 CAN 引导模式设置引导模式引脚、以便器件始终以 CAN 引导模式启动、该怎么办? 那么、在需要从闪存正常执行的情况下、是否有可能从 CAN 引导模式跳转到闪存执行? ROM 引导加载程序是否支持从闪存执行的命令?

    其理念是以最少的开发工作量实现最可靠的实施。 再次感谢您的支持、我期待您对这种方法的看法。

    最新动态:  我曾浏览过 e2e 论坛、并浏览过软件控制的固件更新文档。 这似乎是解决我们问题的可行办法。 唯一的问题仍然是固件过程因任何原因中断。 在这种情况下、器件将始终以闪存模式引导、可能无法将其置于引导模式。 第4点仍然是个问题。

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

    尊敬的 Asad:

    如果我们为 CAN 引导模式设置引导模式引脚、以便器件始终以 CAN 引导模式启动、该怎么办? 那么、在需要从闪存正常执行的情况下、是否有可能从 CAN 引导模式跳转到闪存执行? ROM 引导加载程序是否支持从闪存执行命令?.[/QUOT]

    您可以在 C2000Ware 中的以下位置查看引导 ROM 源:libraries\boot_rom\f2837xd\revB\rom_sources\F2837x_bootrom\cpu01-bootrom\source

    在 DCAN_boot.c 中、您可以看到有两种方法绕过 CAN 引导加载程序以跳转到闪存:

    1. 如果 DCAN-A 未启用
    2. 如果发送的第一个数据字不是有效的密钥

    您可以向器件发送无效密钥(!= 0x08AA)、并绕过 CAN 引导加载程序以从闪存执行。

    此致!

    Matt