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.

[参考译文] TMS320F2800157:需要确认单组器件损坏恢复

Guru**** 2979400 points

Other Parts Discussed in Thread: TMS320F2800157, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1661566/tms320f2800157-needed-confirmation-of-single-bank-device-corruption-recovery

器件型号: TMS320F2800157
主题: C2000WARE 中讨论的其他器件

您好团队:

我最近开始研究 TMS320F2800157 器件上的固件重新编程过程。 在查看可用文档时、我看到了应用手册 “C2000 软件控制的固件更新过程“、我认为该应用手册非常有用。

我正在对类似的方法进行一些修改、希望得到您的指导。

我的理解如下:

  • 配置单个 GPIO 进行引导模式选择。
  • GPIO = 0→闪存引导(自定义引导加载程序)
  • GPIO = 1→SCI 引导
  • 复位后、器件进入闪存引导并执行自定义引导加载程序。
  • 自定义引导加载程序使用 CRC 和重新编程/状态标志来验证应用固件。
  • 如果应用程序有效、引导加载程序会跳转到应用程序。
  • 如果应用程序无效或损坏、引导加载程序会将引导选择 GPIO 驱动至高电平并触发软件复位、从而使器件进入 SCI 引导模式以进行固件恢复。

我的问题与 F2800157的单组闪存架构有关。

由于自定义引导加载程序和应用程序都位于同一个闪存组中、因此如果闪存存储器损坏(例如由于中断更新,意外擦除或存储器损坏事件)、自定义引导加载程序本身是否可能与应用程序一同损坏?

如果是、F2800157 上是否有任何有助于确保自定义引导加载程序保持受保护或可恢复状态的硬件或软件功能? 例如:

  • 是否有机制使引导加载程序区域不可擦除或防止意外损坏?
  • 是否有在单组器件上实施可靠恢复机制的建议方法?
  • TI 是否建议针对此类用例使用任何特定的引导加载程序架构?

感谢您的支持。 对于在 TMS320F2800157 上实施强大固件更新和恢复解决方案的任何建议或最佳实践、我将不胜感激。

此致、
Kamarudheen MD

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

    Kamarudheen 、  

    我想真诚地为等待道歉... 我们遇到了内部问题、直到现在才看到该主题。

    再次对延迟感到抱歉。 我已采取措施、找到一位负责人来尽快回答您的问题!

    我会有一位 有关该主题的工程师关闭它并为您提供所需的支持。

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

    Kamarudheen,

    由于自定义引导加载程序和应用程序都驻留在同一个闪存组中、如果闪存存储器损坏(例如由于更新中断,意外擦除或存储器损坏事件而损坏)、自定义引导加载程序本身是否可能与应用程序一同损坏?

    只有在修改分配的闪存单元时,引导加载程序才会损坏 — 它应与应用程序分开。 您可以使用闪存 API 中的 WEPROT 位掩码保护引导加载程序扇区 — 您可以在 TMS320F280015x 闪存 API 版本 2.00.10.00 参考指南(修订版 A) 第 3.2.2 节中找到有关这些扇区的更多信息

    此致、

    Alex

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

    您好 Alex、

    感谢您对将引导加载程序保留在单独受保护的闪存区域中的阐述。

    我计划使用 RS over SCI-485 在 F2800157 上实现一个驻留闪存的自定义引导加载程序。

    我的理解是、TI SCI 闪存内核会接收块形式的固件数据、将数据存储在 RAM 中、然后使用闪存 API 对闪存进行编程。

    是否可以在自定义引导加载程序中实现相同的方法?

    例如:

    • 从闪存引导并执行受保护的自定义引导加载程序。
    • 通过 RS - 485 以块形式接收固件数据。
    • 将每个块存储在 RAM 中。
    • 仅对应用程序闪存区域进行擦除/编程。
    • 使用 CRC 验证映像、然后跳转到应用程序。

    此外、如果引导加载程序驻留在受保护的闪存区域中、并且仅更新应用程序区域:

    • 是否可以直接从引导加载程序闪存区域执行闪存 API?
    • 或者在执行擦除/编程操作之前、是否仍然必须将闪存 API 和闪存编程例程复制到 RAM 中?

    由于 F2800157 是单组闪存器件、因此我想了解在对不同的闪存扇区进行编程时是否可以从闪存执行代码、或者是否始终需要执行 RAM。

    这种总体架构是否是 F2800157 的推荐方法?

    是否有任何 C2000Ware 示例、应用手册或参考工程来演示具有基于块的固件下载和应用切换功能的自定义闪存引导加载程序?

    此致、
    Kamarudheen MD

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

    Kamarudheen,

    [报价 userid=“700824“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1661566/tms320f2800157-needed-confirmation-of-single-bank-device-corruption-recovery/6410882

    我的理解是、TI SCI 闪存内核会接收块形式的固件数据、将数据存储在 RAM 中、然后使用闪存 API 对闪存进行编程。

    是否可以在自定义引导加载程序中实现相同的方法?

    [/报价]

    是的、这是应该遵循的一般流程。

    [报价 userid=“700824“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1661566/tms320f2800157-needed-confirmation-of-single-bank-device-corruption-recovery/6410882
    • 是否可以直接从引导加载程序闪存区域执行闪存 API?
    • 或者在执行擦除/编程操作之前、是否仍然必须将闪存 API 和闪存编程例程复制到 RAM 中?
    [/报价]

    您无法在正在修改的闪存存储体之外执行代码。 因此、闪存 API 以及调用它的函数(因为它是异步的)必须放置在 RAM 中、尤其是因为这是单组器件。

    [报价 userid=“700824“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1661566/tms320f2800157-needed-confirmation-of-single-bank-device-corruption-recovery/6410882

    是否有任何 C2000Ware 示例、应用手册或参考工程来演示具有基于块的固件下载和应用切换功能的自定义闪存引导加载程序?

    此致、

    [/报价]

    您可以参考 C2000Ware/driverlib/f280015x/examples/flash 下的 flash_ex3_sci_flash_kernel。 应用手册是 C2000 微控制器的串行闪存编程(修订版 I)。

    此致、

    Alex

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

    您好 Alex、

    再次感谢您之前的解释。 他们非常乐于助人。

    我还有一个关于引导加载程序实现的问题。

    我的目标是尽可能多地重复使用 TI 现有的固件更新基础设施、而不是开发全新的协议。

    我的理解是、在标准 SCI 引导流程中、器件引导 ROM 执行 SCI 引导初始化、之后下载 SCI 闪存内核并从 RAM 执行。 然后、闪存内核接收应用程序映像并使用闪存 API 将其编程到闪存中。

    我不依赖于引导 ROM SCI 引导模式、而是考虑实现驻留闪存的自定义引导加载程序以执行类似的序列。 自定义引导加载程序将放置在受保护的闪存区域中、并在正常闪存引导后执行。 它会初始化 SCI/SCI-485、尽可能实现与 TI RS 闪存内核相同的通信协议、并仅对应用程序闪存区域进行编程、同时保持引导加载程序区域受保护。

    我的问题是:

    1.这种架构是否推荐用于 TMS320F2800157?

    2.如果我的自定义引导加载程序实现了与 TI SCI 闪存内核相同的通信协议、是否可以继续在 PC 端使用 TI 串行闪存编程器而无需修改、或者串行闪存编程器是否与引导 ROM SCI 引导过程和 TI 的闪存内核紧密耦合?

    3. TI 是否为构建与 TI 串行闪存编程器保持兼容的驻闪存引导加载程序提供任何指导或参考实现?

    我的目标是在添加受保护的自定义引导加载程序的同时更大限度地重复使用 TI 的现有软件组件、这个引导加载程序可以验证应用并支持通过 RS 485 进行固件更新。

    感谢您的时间和支持。

    此致、

    Kamarudheen MD