ZHCU802B August   2020  – March 2026 TMS320F280040-Q1 , TMS320F280040C-Q1 , TMS320F280041 , TMS320F280041-Q1 , TMS320F280041C , TMS320F280041C-Q1 , TMS320F280045 , TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049-Q1 , TMS320F280049C , TMS320F280049C-Q1

 

  1.   1
  2.   C2000 MCU 在有器件复位时的实时固件更新
  3.   商标
  4. 1简介
  5. 2LFU 所需资源
  6. 3存储器布局
  7. 4LFU 中的静态代码
  8. 5LED 示例应用和 LFU 流程
  9. 6运行 LED 示例
    1. 6.1 串行闪存编程器更新
    2. 6.2 静态代码编程 – 通过 Code Composer Studio (CCS) 加载
    3. 6.3 应用的实时固件更新
    4. 6.4 限制和疑难解答
  10. 7扩展实现方案
    1. 7.1 F28P65x MCU 上带复位的实时固件更新
      1. 7.1.1 F28P65x LFU 硬件要求
      2. 7.1.2 闪存组织
      3. 7.1.3 FWU 引导模式
      4. 7.1.4 LED 示例应用
        1. 7.1.4.1 LFU 命令处理
      5. 7.1.5 运行示例
        1. 7.1.5.1 加载示例
        2. 7.1.5.2 组合 CPU1 和 CPU2 固件映像
        3. 7.1.5.3 LFU over MCAN 主机编程器
          1. 7.1.5.3.1 编译主机编程器
          2. 7.1.5.3.2 使用主机编程器
      6. 7.1.6 限制
  11. 8修订历史记录

LFU 中的静态代码

用于支持 LFU 的静态代码包含以下内容:

  • 组选择逻辑 – 如有两组(或更多)包含应用固件的闪存,则必须有确定从哪个闪存组引导的逻辑。此逻辑的常见实现方式取决于固件版本号。如前所述,在此示例中,较低版本号为最新映像。组选择逻辑位于默认闪存引导地址(在 F28004x 中为 0x80000),因此当引导 ROM 代码执行完成后,执行将传输到组选择逻辑。组选择逻辑仅包含在 Bank0 中,不在 Bank1 中。
  • 闪存内核 – 闪存内核的任务是使用外设从主机接收固件映像,并调用闪存编程 API 将其写入闪存存储器。在本文档中使用的是 SCI 闪存内核,因为会使用 SCI 外设传输新的固件映像。详细的分步流程记录在标头为 flashapi_ex2_ldfu.c 的文件中。
    • 在空白器件(两组闪存中均无应用固件)中,组选择逻辑将确认两组闪存中均无有效的 KEY,并将等待通过 SCI 传输的 LFU 命令。将使用闪存内核来更新 bank1 上的固件,因为内核代码首先在 bank0 上编程,因此将从 bank0 执行。
    • 如果一组或两组闪存包含有效应用,组选择逻辑会将控制传输到相应组的代码入口点 (codestart)。在此示例中,Bank0 的 codestart 地址为 0x8EFF0,Bank1 的为 0x9EFF0。
    • 在 LFU 期间,应用将调用闪存内核,以接收并更新固件。
  • 闪存 API – 闪存 API 提供擦除和编程闪存存储器的接口。这些 API 需要从未在更新的闪存组运行。

静态代码配置为单一示例 - flashapi_ex2_sci_kernel 工程(包含在 C2000Ware 中,地址为 <C2000Ware>\driverlib\f28004x\examples\flash)。此示例支持多种构建配置,下方列出了其中与 LFU 相关的配置:

  • BANK0_LDFU - 将组选择逻辑和闪存内核链接到组 0(地址为 0x80000 - 0x81FFF)。在闪存中使用闪存 API 符号。
  • BANK0_LDFU_ROM - 将组选择逻辑和闪存内核链接到组 0(地址为 0x80000 - 0x81FFF)。在 ROM 中使用闪存 API 符号;F28004x 的 Rev A 无法与这个构建配置一同使用,因为它不支持 ROM 中的闪存 API。
  • BANK1_LDFU - 将闪存内核链接到组 1 (0x90000 - 0x91FFF)。在闪存中使用闪存 API 符号。
  • BANK1_LDFU_ROM - 将闪存内核链接到组 1 (0x90000 - 0x91FFF)。在 ROM 中使用闪存 API 符号;F28004x 的 Rev A 无法与这个构建配置一同使用,因为它不支持 ROM 中的闪存 API。

更多详细信息,请参阅 flashapi_ex2_sci_kernel 工程(包含在 C2000Ware 中,路径为 <C2000Ware>\driverlib\f28004x\examples\flash)中的 flashapi_ex2_sciKernel.c。