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

静态代码编程 – 通过 Code Composer Studio (CCS) 加载

图示步骤中使用的硬件是 ControlCARD 集线站 Rev4.1 上的 F28004x ControlCARD。如果 JTAG 连接可用,则 CCS 可用于为闪存组 0 和 1 加载静态代码。注意:

注:

在加载映像之前,请确保在 CCS(或您的目标配置文件 – 右键单击选择属性)中如图 6-1 所示进行设置。在 BANK0_LDFU 和 BANK1_LDFU 配置中构建 flashapi_ex2_sci_kernel 工程,并分别加载至目标。CCS 闪存插件会将内容加载至闪存。

 将闪存设置为仅擦除必要扇区图 6-1 将闪存设置为仅擦除必要扇区
  1. 加载 BANK0 静态映像(flashapi_ex2_sci_kernel 工程的 BANK0_LDFU)。
     选择要加载到闪存组 0 的内核图 6-2 选择要加载到闪存组 0 的内核

    将静态内容加载到 BANK0 后,首先会执行组选择逻辑,确定在两个组中均未对应用固件进行编程。

    控制将传递到闪存内核,它将做好在 BANK1 中对应用进行编程的准备。图 6-3 所示为 CCS 视图(程序不会在 main() 停止,而是会继续运行并等待 SCI 命令):

     编程闪存组 0 内核后的 CCS 窗口视图图 6-3 编程闪存组 0 内核后的 CCS 窗口视图
  2. 在 CCS 中打开“Memory Browser”窗口,并输入地址 0x80000,验证 BANK0 的内核内容。
     验证闪存组 0 内核编程成功的 CCS 存储器浏览器视图图 6-4 验证闪存组 0 内核编程成功的 CCS 存储器浏览器视图
  3. 现在切换到 Windows 命令提示,并执行以下命令:serial_flash_programmer_appln.exe -d f28004x -k f28004x_fw_upgrade_example\flashapi_ex2_sci_kernel.txt -a flashapi_ex3_live_firmware_updateBANK1FLASH.txt -b 9600 -p COMx 其中 x = PC 和目标板之间相应 JTAG 连接的 COM 端口。可以在设备管理器中寻找端口,从而找到该 COM 端口号。在目标和计算机之间如果连接了提供 JTAG 和 SCI 功能的 USB 电缆,则会出现该端口号。此示例使用的波特率为 9600。以构建配置 BANK1_FLASH 构建 CCS 工程 flashapi_ex3_live_firmware_update 将生成 flashapi_ex3_live_firmware_updateBANK1FLASH.txt。
     根据 Windows 命令提示调用的 LFU 串行命令图 6-5 根据 Windows 命令提示调用的 LFU 串行命令
  4. 选择 LDFU (8) 命令后,内核将在 BANK1 中接收并对应用进行编程。应用大小约为 36KB。下载时间约为 30 秒。
     成功完成对闪存组 1 进行编程的 LFU 命令图 6-6 成功完成对闪存组 1 进行编程的 LFU 命令
  5. 传输完成后,输入 0 指示命令操作结束。在 CCS 中打开“Memory Browser”窗口,并输入地址 0x92000,验证 BANK1 的应用内容。
     验证闪存组 1 中的应用编程成功的 CCS 存储器浏览器视图图 6-7 验证闪存组 1 中的应用编程成功的 CCS 存储器浏览器视图

    内核还将更新 BANK1 扇区 2 中的 KEY 和版本号。现在静态映像在编程后的 BANK0 中,应用映像在 BANK1 中编程。

  6. 此时,用户将电路板复位就可以看到 LED2 开始闪烁。
  7. 接下来加载 BANK1 静态映像(flashapi_ex2_sci_kernel 工程的 BANK1_LDFU)。
     选择要加载到闪存组 1 的内核图 6-8 选择要加载到闪存组 1 的内核
  8. 在 CCS 中打开“Memory Browser”窗口,并输入地址 0x90000,验证 BANK1 的内核内容。
     验证闪存组 1 内核编程成功的 CCS 存储器浏览器视图图 6-9 验证闪存组 1 内核编程成功的 CCS 存储器浏览器视图

    静态内容被加载到 BANK1 之后,在 main() 停止执行。Bank1 的内核将出现这种情况,因为组选择逻辑仅位于 Bank0 上,不在 Bank1 上。因此,对于 Bank1 来说,执行流程遵循传统流程,codestart 延伸至 main()。

     编程闪存组 1 内核后的 CCS 窗口视图图 6-10 编程闪存组 1 内核后的 CCS 窗口视图
  9. 在 CCS 中按“Run”(运行),组选择逻辑将运行,并从 BANK1 执行应用。然后,在 PC 命令行中执行以下命令。

    serial_flash_programmer_appln.exe -d f28004x -k f28004x_fw_upgrade_example\flashapi_ex2_sci_kernel.txt -a flashapi_ex3_live_firmware_updateBANK0FLASH.txt -b 9600 -p COMx 其中 x = PC 和目标板之间相应 JTAG 连接的 COM 端口。以构建配置 BANK0_FLASH 构建 CCS 工程 flashapi_ex3_live_firmware_update 将生成 flashapi_ex3_live_firmware_updateBANK0FLASH.txt。

     根据 Windows 命令提示调用的 LFU 串行命令图 6-11 根据 Windows 命令提示调用的 LFU 串行命令
  10. 控制将从应用传递到闪存内核,选择 LDFU (8) 命令后,内核将在 BANK0 中接收并对应用进行编程。
  11. 传输完成后,输入 0 指示命令操作结束。
     成功完成对闪存组 0 进行编程的 LFU 命令图 6-12 成功完成对闪存组 0 进行编程的 LFU 命令

    内核还将更新 BANK0 扇区 2 中的 KEY 和版本号。现在静态映像在编程后的 BANK1 中,应用映像在 BANK0 中编程。

  12. 此时,与之前一样,用户将电路板复位就可以看到 LED1 开始闪烁。