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修订历史记录

LED 示例应用和 LFU 流程

此示例(flashapi_ex3_live_firmware_update 工程)旨在演示 LFU,其中,LED 会定期闪烁。这是使用实时器件固件更新(实时 DFU 或 LDFU)命令实现的,该命令由 SCI 内核发出,可与串行闪存编程器(PC 工具)配套使用。

在此示例中,将执行 SCI 自动波特锁,自动波特锁使用的字节将回传。初始化并启用两个中断的命令是:SCI Rx FIFO 中断和 CPU Timer 0 中断。CPU Timer 0 中断每秒出现一次;CPU Timer 0 的中断服务例程 (ISR) 会根据正在运行的构建配置切换 LED。

  • 根据 BANK0_FLASH 构建配置切换 LED1。“BANK0”是此构建配置中的预定义符号,定义此符号后,工程会将 GPIO 设置为与 LED1 关联。
  • 根据 BANK1_FLASH 构建配置切换 LED2。“BANK1”是此构建配置中的预定义符号,定义此符号后,工程会将 GPIO 设置为与 LED2 关联。

上述构建配置生成的应用映像,将用于在此文档中演示 LFU。请注意,除了上述两种构建配置的不同外,两种应用映像没有其他差别。因此,这是相对简单的 LFU 演示示例。

SCI Rx FIFO 中断的 FIFO 中断级别被设为 10 字节。串行闪存编程器数据包中的字节数(使用 LDFU 命令时)为 10。从串行闪存编程器向器件发送命令时,SCI Rx FIFO ISR 会从 FIFO 中的 10 字节数据包中接收命令。如果该命令与实时器件固件更新(实时 DFU)命令匹配,代码会跳转至位于相应闪存组的 SCI 闪存内核 (flashapi_ex2_ldfu.c) 内部的实时 DFU 函数 (liveDFU())。如果 Bank0 上的应用正在执行,控制将传递到 Bank0 上位于 0x81000 处的 liveDFU()。如果 Bank1 上的应用正在执行,控制将传递到 Bank1 上位于 0x91000 处的 liveDFU()。在此函数中,执行传递到 ldfuLoad() 函数,以擦除相应闪存组,将十六进制格式的程序(为相应 SCI 引导格式)加载到闪存中,并验证程序。然后将看门狗配置为进行复位。最后,启用看门狗,以便复位。器件复位后,会进行引导并加载新固件。

图 5-1 所示为代码进入应用的 main() 后的概要代码流程。更多详细信息,请参阅位于 flashapi_live_firmware_update 工程(包含在 C2000Ware 中,路径为 <C2000Ware>\driverlib\f28004x\examples\flash)中的 flashapi_ex3_live_firmware_update.c。

GUID-01AFFBC3-E478-4F66-89B3-DAFAE220CC2A-low.gif图 5-1 进入应用的 main() 后的代码流程