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.

[参考译文] TMS320F280049C:TMS320F280049C 引导加载程序中的跳转问题

Guru**** 2427060 points
Other Parts Discussed in Thread: TMS320F280049C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1522234/tms320f280049c-jumping-issue-in-tms320f280049c-boot-loader

器件型号:TMS320F280049C


工具/软件:

您好、

我正在为 TMS320F280049C 开发定制引导加载程序。 我的存储器映射的结构如下:

-引导加载程序:0x80000–0x81FFF
-应用程序段 1(主):0x82000–0x8FFFF
-应用程序分段 2(备份):0x90000–0x9DFFF

引导加载程序支持用于备份恢复的双组更新。

问题描述:
如果在更新 Sector1 时(特别是在擦除步骤之后但编程完成之前)发生断电:
-开机引导加载程序检测到双扇区版本号后,
-继续跳到扇区 2 在 0x90000。


**然而**在跳转到 Sector2 期间、将出现**连续的看门狗重置**。 看门狗已禁用、跳转函数正确地将函数指针转换为 0x90000。


有趣的是、如果在扇区 2 更新期间发生断电、引导加载程序可以成功回退到扇区 1、而不会出现复位问题。 但是、当扇区 1 被擦除时、会有与系统状态相关的内容。

观察结果:
-已使用 CCS 内存视图验证 Sector2 中的应用程序代码是否存在且有效。
-跳转逻辑检查通过并发出呼叫。
-尝试跳转后, ECU 会反复重置。

我的问题:
-从引导加载程序安全跳转到位于 0x90000 的备份应用程序的建议步骤是什么?
-如何防止这个复位循环?

有人遇到过这种情况吗?


我们非常希望提供有关正确跳转上下文处理的任何建议或示例。

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

    您好:

    当您升级主应用程序(与引导加载程序位于同一闪存组中)时、您是否从 RAM 执行引导加载程序? 如果您在闪存编程期间断电、它可能会使闪存存储体处于损坏状态。

    当引导加载程序对应用程序进行擦除/编程时、它应驻留在 RAM 中、因为无法同时读取/写入闪存。 并非所有引导加载程序都从 RAM 运行、只有其中的一部分。 请参阅.TI.ramfunc 段。

    还请共享所有应用程序和引导加载程序的链接器命令文件。

    此致、

    马特

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

    您好、

    感谢您发送编修。我们会重新检视您的建议。

    我理解您的观点:

    闪存 API 和闪存初始化函数在开始时被复制到 RAM、然后尝试跳转到任何应用程序代码。

    2.在闪存编程期间,在闪存分区 1 中切断电源,可能会使闪存存储体处于损坏状态。 但我在这里有一个疑问— 在部分 1(验证前)闪烁后断电时、为什么不会发生这种损坏?

    在我的情况下,在闪存分区 1 后,如果我切断电源,系统仍然可以正常启动—如果需要,甚至可以跳到备份版本(分区 2 )。 但当我切断电源时 擦除之后和在扇区 1 中编程完成之前 、它无法跳至备份版本(分区 2)(因为扇区为空或未完全刷新)。

    您能帮我了解为什么在扇区 1 的刷写后不会发生损坏、而是在擦除后断电、以及在扇区 1 的刷写完成之前导致问题?

    如果在扇区 2 更新(在任何阶段)期间发生断电、引导加载程序都可以成功回退到扇区 1、而不会出现复位问题。  

    您能帮助我理解这种行为吗?

    • 当 sector1 具有有效代码时、为什么它会跳转到 sector2?

    • 它的作用 不会 当区段 1 为空或未完全闪烁时跳至区段 2?

    我的存储器映射的结构如下:

    -引导加载程序:0x80000–0x81FFF (BANK1)

    -应用程序段 1(主):0x82000–0x8FFFF(组 1)

    -应用程序扇区 2(备份):0x90000–0x9FFFF(组 2)

    希望对此场景进行澄清。

    此致、

    Sravani

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

    您好 Sravani、

    如果在完成闪存编程之前断电、则会发生损坏。 闪存编程需要在一段时间内向闪存单元施加特定的电压、如果该电压被中断、则无法保证闪存会被正确编程。 我们没有看到编程完成后断电后损坏的原因是此时已写入闪存单元。  

    此致、

    马特

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

    您好、

    感谢您的支持。

    我以前有过我的 闪存组 0 中的引导加载程序和主应用程序 ,我观察到,如果在闪存编程在 Bank0 发生断电,系统失败跳到备份扇区 ( Bank1 )-我知道这是预期的,因为你说的银行 0 腐败。

    为了改善这一点、我移动了:

    • 将加载程序引导至存储体 1 () 0x90000

    • 主应用程序保留在组 0 中 () 0x82000
    • 也将应用备份到闪存组 1 () 0x92000

    在初始引导加载期间、 我仅  在0x92000 (BANK1) 处刷写了应用代码。 如果编程期间(在完全写入之前)断电、则复位时、引导加载程序会尝试跳转到备用应用程序 (Bank0)、并按预期正常工作。

    该问题在我第二次尝试闪存扇区 1 时出现 (0x82000):
    如果编程期间(在完全写入之前)断电、则复位时、引导加载程序会尝试跳转到备份应用程序 (BANK1)、但失败。 它不会跳转到0x92000 (BANK1) 处的备份应用、即使它仍然有效。  在尝试跳转到备用扇区 (BANK1) 时会发生连续复位。

    即使是引导加载程序也是如此 不再驻留在组 0(损坏的组)中 我依然还在面对着 同样的问题

    提前感谢您的澄清和建议!

    此致、

    Sravani

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

    您好:

    专家将在 7 月 3 日之前离职、请期待届时回复。

    谢谢您、

    Luke

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

    您好:

    您如何在引导加载程序中分支到备份应用程序? 您能否共享闪存组 0 和闪存组 1 应用以及引导加载程序的链接器命令文件?

    此致、

    马特

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

    您好、

    由于一个月内没有回复、我会假设问题已解决并关闭主题。

    此致、

    马特