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.

[参考译文] LAUNCHXL-F2800157:参考设计请求 — 双映像/闪存标志/固件验证 (TMS320F2800157)

Guru**** 2953530 points

Other Parts Discussed in Thread: TMS320F2800157, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1648872/launchxl-f2800157-request-for-reference-implementation-dual-image-flash-flag-firmware-validation-tms320f2800157

器件型号: LAUNCHXL-F2800157
主题中讨论的其他器件: TMS320F2800157、 C2000WARE

您好团队:

我目前正在 使用 TI 应用报告 SPRACN1(使用 GPIO 控制的引导选择基于 SCI 引导的固件更新)中所述的方法在 TMS320F2800157 (C2000) 器件上实现软件控制的固件更新机制。

虽然当前方法适用于正常的固件更新流、但我对 电源故障场景中的稳健性和恢复有所担忧。

 电流实现

  • 器件: TMS320F2800157
  • 引导配置:使用 GPIO 通过 OTP 自定义引导(类似于 SPRACN1)
  • 更新方法:SCI 引导+串行闪存编程器
  • 流量:
    • 应用程序将 GPIO 设置为高电平→RESET
    • 引导 ROM 进入 SCI 引导
    • 内核下载和编程应用程序

 问题

如果 在闪存擦除/写入期间断电、系统可能会:

  • 再次引导至 闪存模式(GPIO 低电平)
  • 但闪存可能包含 损坏/部分应用程序
  • 导致 无效执行或不可恢复状态

这使得当前方法 在生产中具有非失效防护功能


 要求

我希望通过 强大的固件更新机制来增强设计、其中包括:

1、双映像支持

  • 闪存中的 A/B 应用程序分区
  • 安全更新而不覆盖正在运行的映像
  • 发生故障时的回滚功能

2.基于闪存的更新标志

  • 存储在闪存中的持续标志、表示:
    • 正在更新
    • 更新成功
  • 基于此标志而不是仅基于 GPIO 的引导决策

3、固件验证

  • 跳转到应用程序之前的 CRC/校验和验证
  • 检测损坏的图像
  • 自动回退到更新模式

 具体问题

  1. TI 是否 为以下内容提供任何参考示例或演示工程:

    • F2800157(或类似器件)上的双映像固件更新
    • 基于闪存标志的引导流程控制
    • 固件验证(CRC/校验和)
  2. 是否有任何 C2000Ware 示例/库/API 可用于:

    • 映像完整性验证
    • 闪存元数据处理(标志/标头)
  3. 是否有任何 引导加载程序参考设计 支持:

    • 失效防护固件更新
    • 电源中断后恢复
  4. 是否有 以下方面的建议最佳实践:

    • 实现双映像的闪存分区
    • 通过 SCI 实现可靠固件更新
    • 处理不完整的固件更新

 附加上下文

  • 用例: 需要可靠固件更新的生产系统
  • 现场更新期间无 JTAG 访问
  • 要求: 更新期间从电源故障中恢复失效防护

 预期结果

我正在寻找:

  • 参考设计(如果可用)
  • 应用手册或内部文档
  • 建议的架构/设计方法

 

感谢您的支持。

此致、
Kamarudheen MD

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

    您好:

    抱歉、我在下一个星期三之前不在办公室。 请预计响应会延迟到那时。

    此致、

    马特

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

    您好:

    请注意 、F280015x 是 单闪存组器件、因此您必须将固件映像 A + B 和自定义引导加载程序(如有必要)保留在同一组中。 由于闪存编程期间的断电/中断可能会导致闪存损坏、因此存在一定程度的风险。 您可以利用 ROM 中提供的外设引导加载程序来加载闪存内核以对应用程序进行编程、从而规避此问题。 此闪存内核可实现您所需的闪存元数据和映像完整性验证过程。  

    我将参考以下资源:

    此致、
    马特

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

    您好 Matt、

    感谢您的解释。

    我知道 F280015x 是一款单闪存组器件、完全支持双映像很困难。 我将介绍您提到的闪存内核和 LFU 示例。

    但是、我仍然希望使固件更新 具有失效防护功能、尤其是在出现电源故障的情况下。

    我有几个澄清:

    1. 由于无法完全实现双映像、 建议的安全方法是什么?

      • 我们应该使用:
        • 闪存标志(正在更新/有效映像)?
        • 跳转到应用程序之前进行 CRC 验证?
    2. 要将标志存储在闪存中:

      • 是否有任何推荐的结构?
      • 我们是否应该使用单独的闪存扇区?
    3. 对于固件验证:

      • 更适合生产:
        • VCU CRC 示例
        • 由链接器生成的 CRC
    4. 如果固件损坏:

      • 我们是否应该始终依赖 ROM 引导模式(SCI 引导) 进行恢复?
      • 还是有更好的方法?

    我的目标是构建一个 能够在断电后安全恢复的强大固件更新系统。

    请针对此器件提供建议的最佳方法。

    此致、
    Kamarudheen MD

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

    您好 Matt、

    感谢您的详细答复、并向我指出 LFU 示例、CRC 资源和推荐的多层恢复策略。 有关使用 状态标志+ CRC 验证+ ROM 引导回退的说明 非常有用。

    根据您的建议、我将继续使用以下架构:

    • 元数据专用闪存扇区 (STATUS 标志+ CRC)
    • 由链接器生成的 CRC +运行时 CRC 验证
    • ROM SCI 引导加载程序回退 以进行恢复
    • 使用 闪存内核(来自 C2000Ware) 进行编程

    额外说明:自定义引导加载程序+基于 GPIO 的恢复

    除了上述内容外、我还计划将 小型定制引导加载程序 与基于 GPIO 的引导切换方法(类似于 SPRACN1)集成到闪存中、我希望您对这种组合方法有所意见。

    建议的增强功能

    1. 复位时(闪存引导):

      • 自定义引导加载程序首先执行
      • 读取:
        • 闪存状态标志(更新状态)
        • CRC 验证结果
    2. 引导决策:

      • White check mark 如果固件有效→跳转到应用程序
      • X 如果固件无效或标志指示“正在更新“:
        • 将 引导 GPIO(例如 GPIO15)驱动为高电平
        • 触发 软件复位
        • 器件进入 ROM SCI 引导模式
    3. SCI 编程阶段:

      • 闪存内核执行
      • 更新的元数据扇区:
        • 设置“Update in progress“
        • 对新映像进行编程
        • 更新 CRC
        • 设置“更新完成“
    4. 恢复行为(电源故障情况):

      • 如果发生中断:
        • 标志保持为“进行中“或 CRC 不匹配
        • 引导加载程序在下一次复位时检测到故障
        • 再次强制 SCI 引导(通过 GPIO + RESET)

    问题

    1. 架构验证

      • 是否为以下组合:
        • 闪存引导加载程序(用于验证+决策)
        • 基于 GPIO 的引导切换(强制使用 ROM 引导加载程序)
        F2800157 的推荐安全方法?
    2. 基于 GPIO 的引导覆盖

      • 是否认为通过 GPIO(如 SPRACN1 所示)主动强制 SCI 引导对于生产系统是可靠的、而不是仅依赖于 ROM 回退?
    3. 引导加载程序位置安全

      • 由于此自定义引导加载程序驻留在闪存(同一组)中:
        • 应采取哪些预防措施来 防止闪存擦除/写入过程中损坏?
        • 建议:
          • 将其放在单独的扇区中、永远不会擦除?
          • 使用任何硬件/软件保护机制?
    4. 故障边缘情况

      • 在最坏的情况下、
        • 引导加载程序本身已损坏
      • 我假设 ROM 引导加载程序是唯一的恢复路径。
      • 这种理解是否正确、是否有其他建议来处理此场景?

    目标

    我的目标是构建一个 失效防护固件更新系统 、该系统能够:

    • 检测损坏或不完整的固件
    • 使用 SCI 引导自动恢复
    • 安全处理电源故障
    • 尽管受到单组闪存的限制、但仍可更大限度地降低风险

    再次感谢您的支持和指导。

    此致、
    Kamarudheen MD

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

    您好:

    [报价 userid=“700824“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1648872/launchxl-f2800157-request-for-reference-implementation-dual-image-flash-flag-firmware-validation-tms320f2800157/6368723

    架构验证

    • 是否为以下组合:
      • 闪存引导加载程序(用于验证+决策)
      • 基于 GPIO 的引导切换(强制使用 ROM 引导加载程序)
      F2800157 的推荐安全方法?
    [/报价]

    是的、我建议使用单组器件。

    [报价 userid=“700824“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1648872/launchxl-f2800157-request-for-reference-implementation-dual-image-flash-flag-firmware-validation-tms320f2800157/6368723

    基于 GPIO 的引导覆盖

    • 是否认为通过 GPIO(如 SPRACN1 所示)主动强制 SCI 引导对于生产系统是可靠的、而不是仅依赖于 ROM 回退?
    [/报价]

    是的、这将涵盖最常见的情况。 您也可以 从应用程序代码直接分支到 ROM 引导加载程序、如果需要、可提供 GPIO + RESET 方法的替代方案。 但是、在这样做时、要考虑器件状态差异--与冷启动相比、您的引导加载程序可能已经更改了 PLL 和看门狗设置、并且 ROM 引导加载程序需要特定的初始化状态。

    我唯一担心 的是、如果闪存组本身 损坏、则引导加载程序将无法执行并配置器件以进行 SCI 引导。 我建议使用某 种监控器电路、 在器件挂起时通过 BOOT 引脚强制 SCI 引导。  

    [报价 userid=“700824“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1648872/launchxl-f2800157-request-for-reference-implementation-dual-image-flash-flag-firmware-validation-tms320f2800157/6368723

    引导加载程序位置安全

    • 由于此自定义引导加载程序驻留在闪存(同一组)中:
      • 应采取哪些预防措施来 防止闪存擦除/写入过程中损坏?
      • 建议:
        • 将其放在单独的扇区中、永远不会擦除?
        • 使用任何硬件/软件保护机制?
    [/报价]

    是的、通常我们建议将引导加载程序放在单独的闪存扇区中、并使用软件强制保护装置进行隔离。 存在写擦除保护 (WEPROT) 掩码、可防止某些闪存扇区被 擦除或写入。 请查看 F280015x 闪存 API 用户指南: https://www.ti.com/lit/ug/spruj96/spruj96.pdf

    另请注意、闪存 API 需要从 RAM 执行(因为使用闪存内核,所以您已经打算执行此操作)、因为器件的闪存架构不允许同时读取/写入。

    [报价 userid=“700824“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1648872/launchxl-f2800157-request-for-reference-implementation-dual-image-flash-flag-firmware-validation-tms320f2800157/6368723

    故障边缘情况

    • 在最坏的情况下、
      • 引导加载程序本身已损坏
    • 我假设 ROM 引导加载程序是唯一的恢复路径。
    • 这种理解是否正确、是否有其他建议来处理此场景?
    [/报价]

    是的、ROM 引导加载程序是唯一的路径。 请参阅我对上述 (2) 的建议。  

    此致、
    马特