ZHCUCY3 April   2025 TMS320F2800132 , TMS320F2800133 , TMS320F2800135 , TMS320F2800137 , TMS320F2800152-Q1 , TMS320F2800153-Q1 , TMS320F2800154-Q1 , TMS320F2800155 , TMS320F2800155-Q1 , TMS320F2800156-Q1 , TMS320F2800157 , TMS320F2800157-Q1 , TMS320F280021 , TMS320F280023 , TMS320F280023C , TMS320F280025 , TMS320F280025C , TMS320F280034 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037C , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039C , TMS320F280040-Q1 , TMS320F280040C-Q1 , TMS320F280041 , TMS320F280041C , TMS320F280045 , TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049C , TMS320F28076 , TMS320F28374D , TMS320F28374S , TMS320F28375D , TMS320F28375S , TMS320F28376D , TMS320F28376S , TMS320F28377D , TMS320F28377S , TMS320F28378D , TMS320F28378S , TMS320F28379D , TMS320F28379S , TMS320F28384D , TMS320F28384S , TMS320F28386D , TMS320F28386S , TMS320F28388D , TMS320F28388S , TMS320F28P550SG , TMS320F28P550SJ , TMS320F28P559SG-Q1 , TMS320F28P559SJ-Q1 , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
  5. 2配置引导模式
    1. 2.1 独立引导
      1. 2.1.1 引导模式选择引脚 (BMSP)
      2. 2.1.2 引导定义表 (BOOTDEF)
      3. 2.1.3 引导 ROM OTP 配置寄存器
      4. 2.1.4 CPU2 启动流程
    2. 2.2 仿真引导
  6. 3对闪存编程
    1. 3.1 闪存 API
    2. 3.2 闪存内核
  7. 4将代码引导加载到闪存
    1. 4.1 C2000 Hex Utility
    2. 4.2 常见引导模式
      1. 4.2.1 引导至闪存
      2. 4.2.2 SCI 引导
      3. 4.2.3 CAN 引导
      4. 4.2.4 CAN-FD 引导
      5. 4.2.5 USB 引导
  8. 5常见问题解答
    1. 5.1 通过基于软件的实现施选择 BMSP GPIO
    2. 5.2 从闪存而非 RAM 运行闪存内核
    3. 5.3 在调试引导 ROM 时没有定义符号
    4. 5.4 使用片上闪存工具向 OTP 中写入值
    5. 5.5 使用闪存 API 插件向 OTP 中写入值
  9. 6总结
  10. 7参考资料

CAN 引导

注: 尽管这些步骤在 F280039C LaunchPad 上执行过,但一般流程可以轻松应用于支持自定义 BMSP 和引导定义表的任何 C2000 器件(表 2-3 中提供了所有器件)。有关要引导加载的器件的详细信息,请参阅器件特定的 TRM。

DCAN 闪存内核基于 ROM 引导加载程序,它与 C2000Ware 中提供的主机 PC 应用程序 (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > dcan_flash_programmer) 进行通信,并就接收数据包和分配给它的命令的完成情况向主机提供反馈。主机应用程序的源代码和可执行文件可在 dcan_flash_programmer 文件夹中找到。有关内核功能的更详细说明,请参阅 C2000 微控制器 CAN 闪存编程应用手册 [16]。

C2000Ware 中的 dcan_flash_programmer 支持以下器件:

  1. F28003x
  2. F280015x
  3. F28P65x
注: 在 F280015x LaunchPad 中,内置 CAN 收发器和连接器没有映射到任何可能的 CAN GPIO 分配,需要进行焊接以将正确的 GPIO 短接到收发器 [32]。
注: 本报告中使用的术语 DCAN 定义为 DCAN 闪存内核、DCAN 闪存编程器等,指的是由 Bosch 设计的控制器局域网通信接口 (CAN) [13] 版本 D。本文档中描述的 DCAN 闪存编程器是指 CAN 模块。

DCAN 闪存内核基于 DCAN ROM 加载程序源。为了使该代码能够擦除和编程闪存,必须合并闪存 API,这是通过链接闪存 API 来完成的。

在接收到任何应用程序数据之前,F28P65x 和 F280015x DCAN 闪存内核会擦除器件的闪存,为编程做好准备。F28P65x 和 F280015x DCAN 闪存内核工程允许用户指定在进行应用程序编程之前要擦除哪些闪存组和闪存扇区。C2000 微控制器 CAN 闪存编程应用手册 [16] 对此进行了更详细的讨论。

在闪存存储器中的相应位置进行擦除后,应用程序加载开始。缓冲区用于保存接收到的连续应用程序代码块。当缓冲区已满或检测到新的非连续数据块时,将对缓冲区中的代码进行编程。此过程一直持续到收到整个应用程序为止。

在首次写入扇区之前,F28003x DCAN 闪存内核会检查该扇区是否已被擦除。如果尚未擦除该扇区、则 F28003x 闪存内核使闪存 API 执行擦除操作。此后,一个缓冲区将被写入闪存的内容填满,并从闪存 API 发送编程命令。一旦发生写入,闪存内核就会通过闪存 API 验证相应段是否已写入闪存的正确地址。一旦内核将所有内容复制到闪存,工程就会跳转到映像的入口地址。

DCAN 模块在闪存内核中初始化后,该模块等待主机发送固件映像。闪存内核一次从主机接收 8 个字节,并将内容放入中间 RAM 缓冲区中。然后,将该缓冲区以 128 位或 512 位增量写入闪存。

  • F28P65x 和 F280015x DCAN 闪存内核工程支持 512 位编程
    • 如果需要,还有一个可用于 F28P65x 器件的 128 位编程工程
    • F280015x 闪存 API 支持 128 位编程,但闪存内核是用 512 位编程实现的
  • F28003x DCAN 闪存内核工程支持 128 位编程

存储在闪存中的固件映像的所有段都根据一次性编程的位数对齐。

  • 如果一次性编程 128 位 (F28003x),则应用程序的闪存段与 128 位边界对齐。在固件镜像的连链接器命令文件中,所有初始化段都需要映射到闪存扇区,并且在每次映射之后,需要添加 ALIGN(8) 指令以验证 128 位对齐。
  • 如果一次性编程 512 位(F280015x 和 F28P65x),则应用程序的闪存段与 512 位边界对齐。在固件镜像的连接器命令文件中,所有初始化段都需要映射到闪存扇区,并且在每次映射之后,需要添加 ALIGN(32) 指令以验证 512 位对齐。
    注: ALIGN(x) 指令会插入填充字节直到已编程位置在 x 字边界上对齐。对于 C2000,字大小为 16 位,因此 16 位编程需要使用 ALIGN(1),32 位编程需要使用 ALIGN(2),依此类推。

CCS 的闪存内核源文件和工程文件在 C2000Ware 中提供,位于相应器件的示例目录中。这些工程有一个编译后处理步骤,将编译和链接的 .out 文件转换为 DCAN ROM 引导加载程序所需的正确的十六进制格式引导文件,并按扩展名为 .txt 的工程名称进行保存。

通过检查 C2000Ware_x_xx_xx_xx > boards > (LaunchPads or controlCARDs) > DEVICE_NAME > Rev# > documentation 中 CAN 收发器和连接器的原理图,可以确认 LaunchPad 中 CAN 布线所需的正确 GPIO 分配。在 LAUNCHXL-F280039C 上,收发器 RXD 从内部布线到 GPIO5,TXD 从内部布线到 GPIO4,因此需要配置引导选项 0x02。


 F280039C LaunchPad CAN 收发器和连接器原理图
图 4-19 F280039C LaunchPad CAN 收发器和连接器原理图
  1. 在 C2000Ware 中查找适用于目标器件的 DCAN 闪存内核工程并导入 CCS。例如,F28003x 的 DCAN 闪存内核位于 C2000Ware_x_x_xx_xx > driverlib > f28003x > examples > flash。
  2. 确保 DCAN 闪存内核工程的 Active Build Target Configuration 设置为 RAM,因为需要链接内核才能在 RAM 中执行。
  3. 如果使用 LaunchPad,请应用 Project Properties > CCS Build > C2000 Compiler > Predefined Symbols 中的预定义符号 _LAUNCHXL_F280039C,以便在 device.h 中为 LaunchPad 使用正确的 GPIO 分配。

     为正确的 LaunchPad CAN GPIO 分配添加预定义符号
    图 4-20 为正确的 LaunchPad CAN GPIO 分配添加预定义符号
  4. 上电时,器件引导 ROM 由片上 10MHz 振荡器 (INTOSC2) 提供时钟。该值需要设置为闪存内核中的主内部时钟源,并且是复位时的默认时钟。在 device.h 中,取消注释并在第 295 行使用 #define USE_PLL_SRC_INTOSC。注释掉 #define USE_PLL_SRC_XTAL
  5. DCAN_boot.c 中,确认 bootloader_can_timing.h 的本地副本包含在第 64 行,而不是包含在 include 文件夹中自动生成的头文件中。

     包括本地 CAN 时序头文件
    图 4-21 包括本地 CAN 时序头文件
  6. bootloader_can_timing.h 中,确认第 51-53 行定义了以下 CAN 时序设置:
    1. 1Mbps 比特率
    2. 20Mhz CAN 时钟
    3. 20ms 位时间

       确认 CAN 时序设置
      图 4-22 确认 CAN 时序设置
  7. 构建内核工程。这些工程有一个编译后处理步骤,将编译和链接的 .out 文件转换为 DCAN ROM 引导加载程序所需的正确的十六进制格式引导文件,并按扩展名为 .txt 的示例名称进行保存。
    1. 如果未生成 .txt 输出,则按照 节 4.1 中的步骤操作,以确保定义了用于生成十六进制文件的正确编译后处理步骤。

       生成 DCAN 内核 txt 输出
      图 4-23 生成 DCAN 内核 txt 输出
  8. 在文本编辑器中打开闪存内核 txt 文件并将第 3-4 字节更改为 C0 7A。这些字节包含用于配置 CAN 总线比特率的元数据。
  9. 对内核加载到闪存中的固件代码重复执行构建过程。
    1. 请确认为闪存设置了 Active Build Target Configuration。
    2. 确认已定义用于生成十六进制文件的正确编译后处理步骤。
    3. 构建固件工程。

在 CCS 中构建内核和固件工程后,正确设置器件硬件,使其能与运行 C2000Ware 中提供的 dcan_flash_programmer 的主机 PC 进行通信。首先要做的是确保正确配置引导模式选择引脚,以将器件引导至 CAN 引导模式。如果用户需要在片上闪存中从外部主机加载代码,则用户可以使用默认 BMSP(如果支持)配置 CAN 引导,或者可以配置 BOOTPIN-CONFIG 和 BOOTDEF 寄存器。

用于启用 CAN 引导的默认 BMSP 可以在 TMS320F28003x 实时微控制器数据表中找到。如果用户将 GPIO24 设置为 1 并将 GPIO32 设置为 0,则引导 ROM 跳转到 CAN 引导加载程序且 CANRXA 设置为 GPIO5,CANTXA 设置为 GPIO4,并且无需对器件寄存器进行编程。

但是,如果用户希望灵活地使用具有不同 GPIO 分配的 CAN 引导,则需要为特定的引导选项配置 OTP 或仿真 BOOTCONFIG 和 BOOTDEF 寄存器。请参阅 TMS320F28003x 实时微控制器数据表中的 GPIO 分配,以确定哪种 CAN 引导选项符合 GPIO 要求。

运行示例所需的硬件组件是连接到 CAN 收发器的 C2000 器件和 PEAK PCAN-USB Pro FD 分析仪。

  1. LaunchPad 器件包含一个板载 CAN 收发器。确认 PEAK PCAN-USB Pro FD 分析仪通过接地、CAN-Lo 和 CAN-Hi 连接来连接到 LaunchPad。
  2. 确认板载 CAN 路由开关需要设置为低电平(至收发器),以便收发器使用 GPIO 进行通信。

     设置 CAN 路由开关
    图 4-24 设置 CAN 路由开关
    注: 对于 controlCard,需要使用定制设计的 CAN 收发器板和 HSEC 180 引脚 controlCard 扩展坞。定制设计的收发器板通过四种连接方式连接到 controlCard:接地、3.3V、CANTX 和 CANRX。

现在需要设置将器件,以模拟使用引导选项 0x02、CANRXA = GPIO5 和 CANTXA = GPIO4 的 CAN 引导。只有一个大约 10 秒的超时窗口,用于可将第一个 CAN 帧发送到器件。

  1. 打开 CCS 的工作区。
  2. 选择 View > Target Configurations。

     在 CCS 中打开“Target Configuration”菜单

    图 4-25 在 CCS 中打开“Target Configuration”菜单
  3. 用户可以将该器件的工程导入 CCS 并使用该工程连接器件,或将目标配置文件 (.ccxml) 从 C2000Ware (C2000Ware_x_xx_xx_xx > device_support > DEVICE_FAMILY > common > targetConfigs) 复制到用户定义的目标配置。
    1. 找到器件目标配置,然后右键单击手动启动。

       启动 CCS 中的目标配置

      图 4-26 启动 CCS 中的目标配置
  4. CCS 启动调试窗口时,选择目标 CPU 并连接到目标。

     连接到 CCS 中的目标核心

    图 4-27 连接到 CCS 中的目标核心
  5. 如果弹出一个窗口,表明引导 ROM 中存在中断且没有提供调试信息,或者中断处于程序代码之外,则按照节 5.3中的步骤调试引导 ROM。
  6. 加载符号后,转到 View > Memory Browser 以打开 Memory Browser。

     导航到 CCS 中的 Memory Browser
    图 4-28 导航到 CCS 中的 Memory Browser
  7. 在“Memory Browser”选项卡中,导航到地址 0xD00。请记住,位置 0xD00 使用有效性密钥 (EMU-BOOTPIN-CONFIG) 指定 BMSP,0xD04-0xD05 指定引导定义 (EMU-BOOTDEF-LOW)。
  8. 目标是配置 CANRXA = GPIO5 且 CANTXA = GPIO4 的零引脚 CAN 引导,因此需要禁用所有 BMSP 并且 EMU-BOOTDEF-LOW 需要设置为最低索引中的 0x02。如果引导选项编程为 EMU-BOOTDEF-LOW 中的任何其他条目,则不会选择目标引导模式。
    1. 将 0xD00-0xD01 (EMU-BOOTPIN-CONFIG) 设置为 0x5AFF FFFF。
    2. 将 0xD04 (EMU-BOOTDEF-LOW) 设置为 0x0002。
      注: 零引脚引导意味着器件自动引导至 BOOTDEF 定义的第一个条目。这是通过禁用所有 BMSP,从而允许器件仅考虑一个引导选项来实现的。

     模拟 CANRXA=GPIO5 且 CANTXA=GPIO4 的零引脚 CAN 引导
    图 4-29 模拟 CANRXA=GPIO5 且 CANTXA=GPIO4 的零引脚 CAN 引导
  9. 复位 CPU 并执行外部复位 (XRSn)。然后,单击 Resume 以开始引导序列。
  10. 如果引导 ROM 中存在中断且没有提供调试信息,或者中断处于程序代码之外,则按照 节 5.3 中的说明加载引导 ROM 符号。然后,确认器件处于 CAN 引导状态。

现在,ROM 中的 CAN 引导加载程序(包含引导选项 0x02 指定的 GPIO 分配)开始执行并等待从主机发送 CAN 帧。此时,器件已准备好接收来自主机的代码。

注: CAN 引导加载程序有一个 10 秒的窗口,用于接受 CAN 帧。如果在器件引导选项提供,则 SEND_TEST 模式会消除超时。这些选项使用相同的 GPIO 引脚进行通信,作为等效引导选项。但是,GPIO 引脚会在开始引导加载过程之前传输一个帧,帮助确定模块的功能是否正常。在 F280039x 器件中,可以使用引导选项 0x82 来避免超时,同时使用相同的 GPIO 分配作为引导选项 0x02。

命令行 PC 实用程序是一种编程解决方案,可以轻松集成到脚本环境中,用于生产线编程等应用程序。它是使用 Microsoft Visual Studio 用 C++ 编写的。工程及其源代码可在 C2000Ware (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > dcan_flash_programmer) 中找到。

主机负责将 DCAN 内核映像和闪存(固件)映像发送到 MCU。PEAK PCAN-USB Pro FD CAN 总线分析仪用作主机。闪存编程器工程在 Visual Studio 2019 上编译并运行。主机编程器使用 PEAK 的 PCAN_Basic API。[17]。PCAN_Basic API 可用于在 CAN 分析仪上发送和接收 CAN 帧。

注: PEAK PCAN-USB Pro FD CAN 总线分析仪向后兼容,可以接收 CAN 帧以及 CAN-FD 帧。

在 F28003x 器件上,CAN 模块的时钟由引导 ROM 切换到外部时钟源。LaunchPad 和 controlCard 中的外部时钟为 20MHz。引导 ROM 将标称比特率配置为 100Kbps。主机 CAN 编程器将 PEAK CAN 分析仪配置为具有相同的时钟和标称比特率值。

主机初始化分析仪以使用 CAN,以 2 字节增量发送内核,然后以 8 字节增量发送映像,每帧之间延迟 10ms,以便闪存 API 有时间将接收到的数据编程到闪存中。一旦固件映像被写入,主机 CAN 编程器就会退出。

若要使用此工具对 C2000 器件进行编程,请确保目标板已复位且当前处于前面配置的 CAN 引导模式,并连接至 PEAK PCAN-USB Pro FD CAN 总线分析仪。下面介绍了该工具在单核 CAN 引导中的命令行用法,其中 -d、-k 和 -a 是必需参数。可以使用 -v 启用详细输出。有关该实用程序参数的更多详细信息,请参阅 [4]。

dcan_flash_programmer.exe –d DEVICE -k KERNEL_FILE -a APPLICATION_FILE -v
  1. 导航至包含已编译可执行文件 dcan_flash_programmer 的文件夹 (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > dcan_flash_programmer)。
  2. 打开终端并使用以下命令运行可执行文件 dcan_flash_programmer:
    dcan_flash_programmer.exe –d DEVICE_NAME –k <path_to_kernel_hex> -a <path_to_application_hex> -v

首先,这会使用引导加载程序将 DCAN 闪存内核加载到器件的 RAM 中。通过 CAN 总线传输的字节可以在终端中看到。然后,内核会执行并加载,而后用“-a”命令行参数指定的文件对闪存编程,如图 4-30图 4-31 所示。如果成功加载到闪存中,内核会转移到应用程序并开始执行。

 已加载的 DCAN 闪存编程器内核图 4-30 已加载的 DCAN 闪存编程器内核
 已加载的 DCAN 闪存编程器应用程序图 4-31 已加载的 DCAN 闪存编程器应用程序