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-FD 引导

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

节 3.2中所述,ROM 引导加载程序只能将代码加载到 RAM 中,这就是使用 ROM 引导加载程序在闪存内核中加载以便代码可以存储到闪存中的原因。CAN 闪存内核基于 ROM 引导加载程序,它与 C2000Ware 中提供的主机 PC 应用程序 (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > can_flash_programmer) 进行通信,并就接收数据包和分配给它的命令的完成情况向主机提供反馈。主机应用程序的源代码和可执行文件可在 can_flash_programmer 文件夹中找到。有关内核功能的更多信息,请参阅 C2000 微控制器的 CAN 闪存编程应用手册 [16]。

C2000Ware 中的 can_flash_programmer 支持以下器件:

  1. F28003x
  2. F28P55x
  3. F28P65x
注:

在本文档中,术语 MCAN、MCAN 闪存内核、CAN 闪存编程器等指的是模块化控制器局域网 (MCAN)。MCAN 是可与控制器局域网灵活数据速率 (CAN-FD) [15] 互换使用的术语。本文档中描述的 CAN 闪存编程器是指 MCAN 模块。

闪存内核工程是根据 MCAN ROM 引导加载程序建模的。它直接进入已修改为写入闪存的 MCAN_Boot 函数。闪存内核的 MCAN 模块初始化与引导加载程序相同。MCAN 模块的时钟源、标称和数据比特率、GPIO 引脚等由内核在初始化时根据引导模式进行设置。

在接收到任何应用程序数据之前,F28P55x 内核会擦除器件的闪存,为编程做好准备。此外,F28P55x MCAN 闪存内核工程允许用户指定在进行应用程序编程之前要擦除哪些闪存组和闪存扇区。C2000 微控制器的 CAN 闪存编程应用手册 [16] 的自定义闪存组和扇区擦除一节中对此进行了更加详细的介绍。

在对应用程序进行编程之前,F28003x 内核会检查每个闪存扇区是否被擦除过。如果之前没有擦除闪存扇区,则会擦除该扇区并写入应用程序数据。

F28P65x 内核会在应用程序下载过程开始时擦除闪存。擦除闪存可能需要几秒时间。请注意,当应用程序加载显示为失败时,说明闪存正在被擦除。

在闪存存储器中的相应位置进行擦除后,应用程序加载开始。闪存内核一次从主机接收 64 个字节,并将内容放入中间 RAM 缓冲区中。然后,将该缓冲区以 128 位或 512 位增量写入闪存。

  • F28003x 和 F28P65x MCAN 闪存内核一次对 128 位进行写入
  • F28P55x MCAN 闪存内核一次对 512 位进行写入

此后,RAM 缓冲区将被写入闪存的内容填满,并从闪存 API 发送编程命令。一旦发生写入,闪存内核就会通过闪存 API 验证相应段是否已写入闪存的正确地址。一旦内核将所有内容复制到闪存,工程就会跳转到映像的入口地址。

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

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

用于传输应用程序数据的协议遵循 MCAN ROM 加载程序协议。使用原始 MCAN ROM 加载程序协议,使用的标称比特率为 1Mbps,并且每帧从主机向目标器件传输 64 个字节,以实现标称位时序。该协议使用的数据比特率是 2Mbps,以实现数据位时序。

CCS 的闪存内核源文件和工程文件在 C2000Ware 中提供,位于器件相应的示例目录中。这些工程有一个编译后处理步骤,将编译和链接的 .out 文件转换为 MCAN 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,因此需要配置 BOOTDEF 0x02。


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

     为正确的 LaunchPad CAN GPIO 分配添加预定义符号
    图 4-33 为正确的 LaunchPad CAN GPIO 分配添加预定义符号
  4. 上电时,器件引导 ROM 由片上 10MHz 振荡器 (INTOSC2) 提供时钟。该值需要设置为主内部时钟源,并且是复位时的默认时钟。在 device.h 中,取消注释并在第 295 行使用 #define USE_PLL_SRC_INTOSC。注释掉 #define USE_PLL_SRC_XTAL
  5. 构建内核工程。这些工程有一个编译后处理步骤,将编译和链接的 .out 文件转换为 MCAN ROM 引导加载程序所需的正确的十六进制格式引导文件,并按扩展名为 .txt 的示例名称进行保存。
    1. 如果未生成 .txt 输出,则按照 节 4.1 中的步骤操作,以确保定义了用于生成十六进制文件的正确编译后处理步骤。

       生成 CAN 内核 txt 输出
      图 4-34 生成 CAN 内核 txt 输出
  6. 对内核加载到闪存中的应用程序代码重复执行构建过程。
    1. 确认为闪存设置了 Active Build Target Configuration。
    2. 确认已定义用于生成十六进制文件的正确编译后处理步骤。
    3. 构建固件工程。

在 CCS 中构建内核和固件工程后,正确设置器件硬件,使其能与运行 C2000Ware 中提供的 can_flash_programmer 的主机 PC 进行通信。首先要做的是确保正确配置引导模式选择引脚,以将器件引导至 CAN-FD 引导模式。如果用户需要将外部主机中的代码加载到片上闪存中,则用户需要配置 BOOTPIN-CONFIG 和 BOOTDEF 寄存器,因为它们不作为默认引导选项提供。请参阅 TMS320F28003x 实时微控制器数据表中的 GPIO 分配,以确定哪种 CAN-FD 引导选项符合 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-35 设置 CAN 路由开关
    注: 对于 ControlCard,需要使用定制设计的 CAN 收发器板以及 HSEC 180 引脚 ControlCard 扩展坞。定制设计的收发器板通过四种连接方式连接到 ControlCard:接地、3.3V、CANTX 和 CANRX。

需要设置器件,以模拟使用引导选项 0x02、CANRXA = GPIO5 且 CANTXA = GPIO4 的零引脚 CAN 引导。现在需要设置将器件,以模拟使用引导选项 0x08、CANRXA = GPIO5 且 CANTXA = GPIO4 的零引脚 CAN-FD 引导。请注意,只需大约 10 秒即可将第一个 CAN 帧发送到器件。

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

     在 CCS 中打开“Target Configuration”菜单

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

       启动 CCS 中的目标配置

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

     连接到 CCS 中的目标核心

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

     导航到 CCS 中的 Memory Browser
    图 4-39 导航到 CCS 中的 Memory Browser
  7. 在“Memory Browser”选项卡中,导航到地址 0xD00。请记住,位置 0xD00 使用有效性密钥 (EMU-BOOTPIN-CONFIG) 指定 BMSP,0xD04-x0D05 指定引导定义 (EMU-BOOTDEF-LOW)。
  8. 目标是配置 CANRXA = GPIO5 且 CANTXA = GPIO4 的零引脚 CAN 引导,因此需要禁用所有 BMSP 并且 EMU-BOOTDEF-LOW 需要设置为最低索引中的 0x08。如果引导选项编程为 EMU-BOOTDEF-LOW 中的任何其他条目,则不会选择目标引导模式。
    1. 将 0xD00-0xD01 (EMU-BOOTPIN-CONFIG) 设置为 0x5AFF FFFF。
    2. 将 0xD04 (EMU-BOOTDEF-LOW) 设置为 0x0008。
      注: 除了 EMU-BOOTDEF-LOW 中较低的 8 个字节外,EMU-BOOTDEF-LOW 和 EMU-BOOTDEF-HIGH 可以设置为任意值,因为在零引脚引导中会忽略这些值。

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

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

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

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

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

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

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

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

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

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

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

 已加载的 MCAN 闪存编程器内核图 4-41 已加载的 MCAN 闪存编程器内核
 已加载的 MCAN 闪存编程器应用程序图 4-42 已加载的 MCAN 闪存编程器应用程序