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

 

  1.   商标
  2. 1引言
  3. 2LFU 所需资源
  4. 3存储器布局
  5. 4LFU 中的静态代码
  6. 5LED 示例应用和 LFU 流程
  7. 6运行 LED 示例
    1. 6.1 串行闪存编程器更新
    2. 6.2 静态代码编程 – 通过 Code Composer Studio (CCS) 加载
    3. 6.3 应用的实时固件更新
    4. 6.4 限制和疑难解答
  8. 7修订历史记录

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。