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.

[参考译文] TMS320F28335:C2000引导加载程序

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/613255/tms320f28335-c2000-bootloader

器件型号:TMS320F28335

您好,

我假设 我将代码放置在 C2000闪存 AB 扇区中、并  通过编写引导加载程序将其复制到 CD 扇区、那么当 AB 有问题时、如何直接从 CD 扇区开始? 可以这么做吗?

谢谢

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

    表6-22所示。 F28335、F28333、F28235中闪存扇区的地址在 SPRS439N 的第162页中、引导至闪存进入点在扇区 A 中固定为0x33 FFF6 - 0x33 FFF7。这无法更改。 选择引导至闪存选项时、这是引导 ROM 代码将跳转到的地址。

     

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

    我开发了一个引导加载程序、 在程序中、我可以确定用户程序(使用闪存段 A 和 B)是否正常、以及备份用户程序(使用闪存段 D 和 E) 以防止程序升级失败。

    当程序升级失败时,我知道有一种方法可以将闪存部分 D 和 E 复制 到闪存部分 A 和 B 区 A 区缩减程序,但我  不想使用  

    我想知道在实施备份程序时是否有方法更改程序内容的偏移地址,并且程序直接从 备份程序启动(使用闪存部分 D 和 E)?

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

    我不明白“A 区和 B 区缩减计划”是什么意思。 如上一个帖子中所述、引导至闪存入口点在引导 ROM 中是固定的、无法更改。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道引导至闪存入口点是固定的。当 DSP 启动时、 程序将从地址0x33 FFF6 - 0x33 FFF7引导到我的引导加载程序。闪存段 A 和 B 存储在用户程序中、闪存段 D 和 E 存储在用户备份程序中(从闪存段 A 和 B 复制)。
    我想知道在实施备份程序时是否有方法更改程序内容的偏移地址,并且程序直接从备份程序启动(使用闪存部分 D 和 E)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很遗憾我不理解这个问题。 如果您可以用物理地址(例如)重新陈述您的问题、我可能会更好地提供帮助。 扇区 A 和 B 以及 C 和 D 中的内容是否相同? 您希望从 C & D 执行而不是从 A & B 执行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我可能对您提出的问题有所了解。 您在闪存中有一个在复位时执行的自定义引导加载程序。 您的应用程序将被编译并链接到闪存扇区 A 和 B 所包含的存储器位置中执行。在某个时候、您会向引导加载程序指示您有一个新的应用程序要加载。 在将新应用程序加载到闪存之前、引导加载程序会将应用程序从闪存扇区 A 和 B 复制到闪存扇区 D 和 E、以防新应用程序发生故障。 如果发生故障、您希望引导加载程序分支直接连接到备份应用程序、该应用程序位于闪存扇区 C 和 D、并在存储器中的该偏移处执行。 您希望这样做、而不是将备份应用程序复制回原始闪存扇区 A 和 B 位置。 您担心的是、您的应用程序已编译并链接为从闪存扇区 A 和 B 执行、并且您询问是否需要执行任何操作来使其从闪存扇区 C 和 D 执行

    这是您所询问的内容的有效总结吗? 恐怕我对 C28x 比较陌生、还没有深入了解 C28x 指令集(在我的列表中...) 编译器/链接器是否创建与位置无关的代码。 我不相信有一个 CPU 寄存器可以被设置为提供一个偏移来在某些新位置执行与位置相关的代码。 就我所见、但可能不正确、C28x 没有一个内存管理单元、允许您将内存的各个部分映射到新地址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道一个功能、其中代码可以加载到存储器的一部分并从另一部分运行(请参阅 SPRU513N 的第32页)。 如果 Tom 对您的问题的理解是正确的、C28x 不支持这样的内存重映射。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这是我想要问的、但这不是我想要实现的。我想知道、 例如、闪存扇区 A 和 B 0x3F66F0-0x3F66F1数据为0x007F 和0x7100、将程序代码转换为"LB 0x3F7100"、我想知道的是、您是否可以通过这种方式将程序的某些跳转地址改回闪存扇区 D 和 E、 以便您可以直接从闪存扇区 D 和 E 开始?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许您可以有两个版本的代码。 一个连接用于扇区 A 和 B、另一个连接用于扇区 D 和 E、并闪存这两个扇区。 通常、控制会分支到扇区 A 和 B。如果您的代码检测到问题、它可以分支到 D 和 E 中的起始地址