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:TMS320F28375S 上的引导加载程序和应用程序转换问题

Guru**** 1689980 points
Other Parts Discussed in Thread: TMS320F28375S, UNIFLASH
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1379795/tms320f28375s-issue-with-bootloader-and-application-transition-on-tms320f28375s

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

工具与软件:

您好!

我目前正在处理一个将 TMS320F28375S 微控制器与 CCS12配合使用的项目。 我已经为基于 CAN 的自定义引导加载程序设置了扇区 A 至 D 以及为应用设置了扇区 E 至 J。

下面是我所面临的设置和问题:

  1. 我的自定义基于 CAN 的引导加载程序工作正常。 我可以从引导加载程序跳转到应用程序、而不会出现任何问题。
  2. 但是、当我的应用程序请求新的闪存更新时、控制器不会正确重新启动。 相反、它在中断处理程序之后停留在 ESTOP0。 这会在复位后发生、引导加载程序不会再次启动。
    看起来引导加载程序在复位或下电上电时没有正确初始化、并且应用程序直接启动、而没有执行引导加载程序。

您能否就以下方面提供指导:

  1. 如何确保每次控制器启动或复位时引导加载程序首先运行、然后才跳转到应用程序?
  2. 如何调试在闪存更新请求期间、在中断处理程序之后控制器卡在 ESTOP0的问题?

以下是在进行新闪存更新时复位控制器的方法。

在这个之后、控制器在 ESTOP0上获得残桩;

非常感谢您提出任何见解或建议。

谢谢。此致

Muzammil Qureshi

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

    尊敬的 Muzammil:

    >如何确保每次启动或重置控制器时引导加载程序首先运行、然后才跳转到应用程序?

    您可以通过引导模式开关设置、将器件引导模式设置为在 CAN 中启动。

    >如何调试在闪存更新请求期间中断处理程序后控制器卡在 ESTOP0的问题?

    首先、看看 ESTOP0中有哪些函数可以处理、以及程序计数器(PC)在哪里、一旦闪存更新请求发生、您是否能够单步执行?

    谢谢。此致、

    Charles

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

    您好、Charles、

    我使用 Uniflash 将引导加载程序代码刷写到引导加载程序区域(扇区 A 至扇区 D)。 然后、 我将应用程序代码闪存到应用程序区域(扇区 E 至扇区 J)。

    我的预期是、每次控制器启动时、引导加载程序都应首先运行、然后跳转到应用程序。 但是、控制器却直接从应用启动。

    引导模式选择引脚(GPIO 72和 GPIO 84)被上拉、因此设置指示从闪存引导。

    由于我已经 使用 uniflash 将引导加载程序代码快速刷写到闪存存储器扇区 A 到 D 中、因此每次控制器加电时、引导加载程序都应该启动。

    此外、如果我只刷写引导加载程序代码并对控制器进行下电上电、引导加载程序将不会运行。

    什么原因可能导致引导加载程序每次启动控制器时都无法启动? 是否会有另一个问题发生?

    感谢您的帮助。

    谢谢。此致  

    Muzammil Qureshi

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

    尊敬的 Muzammil:

    感谢您澄清、根据本场景中您希望引导至闪存的引导加载程序和应用程序的位置。  

    对于引导加载程序、什么是 codestart 段的"开始"、是闪存扇区 A? 另一个问题是、 您的应用的"开始"是什么?

    如果可以、您可以为引导加载程序和应用程序共享.map 文件?

    谢谢。此致、

    Charles

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

    您好、Charles、

    对于您的引导加载程序、对于其 codestart 部分、什么是"begin"、是闪存扇区 A 吗? [报价]

    "开始"       : origin = 0x080000,  length = 0x000008

    另一个问题、 您的应用程序的'开始'是什么?

    "开始"       :origin = 0x088000、  length = 0x000008

    如果可以、您可以共享引导加载程序和应用程序的.map 文件?

    当然、

    e2e.ti.com/.../mapfiles.zip

    谢谢。此致

    Muzammil Qureshi

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

    尊敬的 Muzammil:

    感谢您提供文件、我们会在第二天之前回复您。

    此致、

    Charles

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

    尊敬的 Muzammil:

    查看映射文件后、begin 似乎如图所示。 如果将应用程序启动移至 Bank1、是否会出现同样的行为?

    需要尝试的一点是在加载之前将闪存应用程序和引导加载程序组合到单个.out 文件中、重置器件并查看其是否从针对引导加载程序的0x80000处开始。

    谢谢!
    Charles

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

    您好、Charles、

    将闪存应用程序和引导加载程序组合到单个.out 文件中

    我不知道该如何操作、但是每次我的应用程序更改时、我都需要 文本文件 将其存储到闪存中。

    是否有替代方案??

    谢谢。此致

    Muzammil Qureshi

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

    尊敬的 Muzammil:

    或者、可以将应用程序和引导加载程序组合到单个中  文本文件 保护。   适用于 F28P65x 器件的 C2000微控制器的 CAN 闪存编程应用手册对此进行了演示、但同样适用于单核 F28375S 器件。

    谢谢。此致、

    Charles