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.

[参考译文] TMS320F28379D:软件重置为 bootloader 并请求固件更新

Guru**** 2589300 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1080168/tms320f28379d-software-reset-into-bootloader-and-request-firmware-update

部件号:TMS320F28379D
“线程:测试”中讨论的其它部件

情况:
我们将软件拆分为 bootloader 和固件。
引导加载程序会检查固件的 CRC,并在收到请求时执行闪存更新。
运行的固件获得外部命令(通过 SPI 的 e.q)以执行更新。

问题:
) 运行的固件如何强制重置进入引导加载程序? 看门狗是唯一的方法吗?
2) 除了必须执行更新而不是检查实际固件之外,固件如何告知引导加载程序? 参考手册指出,所有存储器都是通过 bootROM 代码初始化的。 因此,固件设置的所有信息将被重置序列销毁。

请提前感谢您的回答

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

    您好,戴特  

    业界普遍接受的最常见方法是,重置后,引导加载程序会等待一段短时间轮询主机发出的指示固件更新可用的命令。  然后,引导加载程序会确认该命令以启动固件下载和闪存更新。

    如果主机没有命令,则 bootloader 只会启动已有的应用程序。  

    如果没有可用的应用程序,或者它无效(由某些特定应用程序标准决定),引导加载程序只需等待固件更新可用。

    如果应用程序固件已经在运行,并且它能够接受来自某些主机的命令,则固件可能支持的命令之一是“固件更新可用” 如果收到此类命令,则应用程序只能分支机构/跳转到引导加载程序。   

    如果应用程序完全独立,一旦启动且根本没有外部通信,我们就必须考虑其他解决方案...但外部通信的可能性并不罕见。  

    请告诉我们这些想法是否有帮助...如果您有一个特定案例,以上内容都不适合您。  

    此致,

    克利须那

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

    克利须那你好,

    感谢您的回答。 当然,我们只是考虑了引导加载程序代码的分支。 但这意味着要让控制器处于冷启动后的状态:断开中断和 DMA,取消外围设备的初始化,停止 CLA,也许清除 RAM,降低 PLL,...
    软件或看门狗重置将为我们实现所有这些。 但仍存在由 bootROM 代码初始化的 RAM 问题。

    是的,引导加载程序可以在重置后侦听一段时间内的任何命令。
    但我们正在寻找一种使引导加载程序尽可能简单的方法。

    还有什么想法吗?

    此致
    Dieter

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

    您好,戴特  

    你能告诉我你在哪里看到你在这里所说的话:  

           参考手册指出,所有存储器都是通过 bootROM 代码初始化的。  

    您是否实际看到了重置时的内存清除,如果是,哪些是内存清除?

    谢谢,

    克利须那  

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

    克利须那,你好!

    这与 RAM 初始化有关:

    这是关于如何强制软件重置的开放式问题:

    因此,“陷阱0”似乎不是正确的方法。

    此致
    Dieter

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

    您好,戴特  

    很抱歉延迟回复...我们正在调查您所报告的内容,并将很快回复您。  同时,如果您有任何新发现,请告诉我们。  

    此致,

    克利须那

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

    RAM 仅在“Power On Reset”(开机重置)中初始化。 在 XRSN (看门狗)重置中无法初始化。 因此,您可以将标记存储在 RAM 中,并在下一个循环中使用。 只需确保位置不会被任何其他代码触及。

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

    因此,《雷夫曼》并没有说出全部真相,幸运的是,这是我们所面临的问题。

    这应该在下一个文档版本中更正。 谢谢你。

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

    您好,戴特,如果您的问题得到解决,请告诉我们。  我们将跟进我们一侧的文档。 此致,克利须那  

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

    克利须那你好,

    现在我有时间测试您使用看门狗重置的建议。
    遗憾的是,RAM 都是用0初始化的。
    我测试了 RAMM0,CLA1_MSGRAMHIGH,RAMLS0,RAMD0,RAMLS3和 RAMGS13。 一切都是一样的行为。

    我也在《雷夫曼》的监督章节中找到了这一解释:

    因此,RefMan 似乎讲述了真相,而不仅仅是“重启复位”功能初始化了 RAM。