ZHCADG6A December   2023  – April 2024 TMS320F2800157 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1 , TMS320F28P659DK-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
  5. 2编程基础知识
  6. 3ROM 引导加载程序和十六进制实用程序用法
  7. 4DCAN 闪存内核
    1. 4.1 实施
      1. 4.1.1 自定义闪存组和扇区擦除
      2. 4.1.2 应用程序加载
  8. 5MCAN 闪存内核
    1. 5.1 实施
      1. 5.1.1 自定义闪存组和扇区擦除
      2. 5.1.2 应用程序加载
  9. 6实现示例
    1. 6.1 器件设置
      1. 6.1.1 闪存内核
      2. 6.1.2 硬件
    2. 6.2 主机应用:dcan_flash_programmer
      1. 6.2.1 概述
      2. 6.2.2 使用 Visual Studio 编译和运行 dcan_flash_programmer
      3. 6.2.3 为 F28003x 运行 dcan_flash_programmer
      4. 6.2.4 使用 DCAN 引导加载程序下载工程
      5. 6.2.5 使用 CCS 编译工程
    3. 6.3 主机应用:can_flash_programmer [MCAN]
      1. 6.3.1 概述
      2. 6.3.2 使用 Visual Studio 编译和运行 can_flash_programmer
      3. 6.3.3 为 F28003x 运行 can_flash_programmer
      4. 6.3.4 使用 MCAN 引导加载程序下载工程
      5. 6.3.5 使用 CCS 编译工程
    4. 6.4 应用加载:CPU2 映像
      1. 6.4.1 组合两个映像 (.txt)
  10. 7疑难解答
    1. 7.1 常见问题
    2. 7.2 DCAN 引导
    3. 7.3 MCAN 引导
  11. 8参考资料
  12. 9修订历史记录

应用程序加载

本节介绍使用 DCAN 引导模式将应用程序编程到闪存的整个流程。

要确保器件已准备好进行 DCAN 通信,需要复位器件同时确保引导模式引脚处于正确状态以选择 DCAN 引导模式。随后的步骤如下:

  1. 器件进入 DCAN 引导加载程序,等待接收邮箱 1 中的消息帧。对于引导加载程序通信,可接受的消息具有 0x1 的消息标识符 (MSGID) 值。有关邮箱和 MSGID 的更多信息,请参阅器件特定 TRM 的 DCAN 一章 [6]。
  2. 闪存内核以每帧 2 字节的数据传输到器件。主机编程器将帧传输到器件,检查数据字节 3 和 4 是否为非零值。文本文件的字节 3 和 4 必须替换为根据位时序寄存器值 (CAN_CALC_BTRREG) 的最终结果计算出的十六进制值,顺序为最低有效字节后跟最高有效字节。如果主机编程器识别出字节 3 和 4 的位时序更改,则主机编程器会将位时序更改发送到器件并重新初始化自身(跳过以下 7 个保留字)。器件会将比特率增加到所需的位时序,并继续接收帧,直到内核完成下载。
  3. ROM 转移控制权,闪存内核开始执行。从内核必须让器件准备好进行闪存编程到内核准备好开始通信的期间有些许延迟,在此期间内核会配置 PLL 和闪存等待状态等。
    1. 此时,F28P65x 和 F280015x 器件将擦除用户指定的闪存组和扇区。
    2. F28003x 内核在稍后进行擦除。
  4. 内核进入 DCAN 引导模式并等待接收邮箱 1 中的消息帧。CAN_CALC_BTRREG 值 (bootloader_can_timing.h) 在工程内调整为 1Mbps,并且 DCAN 消息缓冲器大小由内核从每帧 2 字节调整为每帧 8 字节,从而加快应用程序下载。
  5. 主机编程器将延迟 5 秒,然后以 1Mbps 和每帧 8 字节的有效负载发送应用程序映像。

  6. 下载过程开始时会读取一个密钥、一些保留字段和应用程序入口点。
    1. 此时,F28003x 内核开始擦除闪存。擦除闪存可能需要几秒钟,因此请务必注意,虽然看起来应用程序加载可能已失败,但很可能只是闪存被擦除了。
  7. 一旦闪存被擦除,应用程序加载将继续进行,将数据帧传输到应用程序代码块中,并将其编程到闪存中(每次 128 位或 512 位)。
    1. F280015x 和 F28P65x 闪存内核一次对 512 位进行编程
    2. F28003x 闪存内核和 128 位版本的 F28P65x 闪存内核一次对 128 位进行编程
  8. 将一个数据块编程到闪存后,内核继续接收消息以编程下一个数据块。此过程一直持续到整个应用程序已被编程到闪存中为止。

应用程序编程到闪存中后,闪存内核会转到其在应用程序加载过程开始时的入口点来尝试运行应用程序。这需要一次器件复位。