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参考资料

SCI 引导

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

SCI 闪存内核基于 ROM 引导加载程序,它与 C2000Ware 中提供的主机 PC 应用程序 (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > serial_flash_programmer) 进行通信,并就接收数据包和分配给它的命令的完成情况向主机提供反馈。

注:

本节详细介绍了 CPU1 SCI 引导加载。有关 SCI 内核命令和功能的更详细说明,或有关如何使用 CPU2 或连接管理器 (CM) SCI 引导加载程序的步骤,请参阅 C2000 微控制器的串行闪存编程应用手册 [12]。

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

  1. 在 C2000Ware 中查找适用于目标器件的 SCI 闪存内核工程并导入 CCS。
    器件 编译配置 位置
    F2802x RAM C2000Ware_x_xx_xx_xx > device_support > f2802x > examples > structs > f28027_flash_kernel
    F2803x RAM C2000Ware_x_xx_xx_xx > device_support > f2803x > examples > c28 > f2803x_flash_kernel
    F2805x RAM C2000Ware_x_xx_xx_xx > device_support > f2805x > examples > c28 > f28055_flash_kernel
    F2806x RAM C2000Ware_x_xx_xx_xx > device_support > f2806x > examples > c28 > f28069_sci_flash_kernel
    F2807x RAM C2000Ware_x_xx_xx_xx > device_support> f2807x > examples > cpu1 > F2807x_sci_flash_kernel
    F2833x RAM C2000Ware_x_xx_xx_xx > device_support > f2833x > examples > f28335_flash_kernel
    F2837xS RAM C2000Ware_x_xx_xx_xx > device_support > f2837xs > examples > cpu1 > F2837xS_sci_flash_kernel > cpu01
    F2837xD RAM C2000Ware_x_xx_xx_xx > device_support > f2837xd > examples > dual > F2837xD_sci_flash_kernels
    F28004x RAM,支持 LDFU 的闪存,不支持 LDFU 的闪存 C2000Ware_x_xx_xx_xx > driverlib > f28004x > examples > flash, select flashapi_ex2_sci_kernel
    F2838x RAM CPU1-CPU2
    C2000Ware_x_x_xx_xx > driverlib > f2838x>examples>c28x_dual>flash_kernel
    CPU1-CM
    C2000Ware_x_x_xx_xx > driverlib > f2838x>examples>c28x_cm>flash_kernel
    F28002x RAM,支持 LDFU 的闪存 C2000Ware_x_xx_xx_xx > driverlib > f28002x > examples > flash, select flash_kernel_ex3_sci_flash_kernel
    F28003x RAM,支持 LDFU 的闪存 C2000Ware_x_xx_xx_xx > driverlib > f28003x > examples > flash, select flash_kernel_ex3_sci_flash_kernel
    F280013x RAM C2000Ware_x_xx_xx_xx > driverlib > f280013x > examples > flash, select flash_kernel_ex3_sci_flash_kernel
    F280015x RAM C2000Ware_x_xx_xx_xx > driverlib > f280015x > examples > flash, select flash_kernel_ex3_sci_flash_kernel
    F28P65x RAM C2000Ware_x_xx_xx_xx > driverlib > f28p65x > 示例 > c28x_dual > flash_kernel
    F28P55x RAM C2000Ware_x_xx_xx_xx > driverlib > f28p55x > examples > flash,
    选择t f28p55x_flash_ex3_sci_flash_kernel
  2. 确保 SCI 闪存内核工程的 Active Build Target Configuration 设置为 RAM,因为需要链接内核才能在 RAM 中执行。
  3. 构建内核工程。这些工程有一个编译后处理步骤,将编译和链接的 .out 文件转换为 SCI ROM 引导加载程序所需的正确的十六进制格式引导文件,并按扩展名为 .txt 的示例名称进行保存。
    1. 如果未生成 .txt 输出,则按照 节 4.1 操作以确保定义了生成十六进制文件的正确编译后处理步骤。

       查找转换后的 SCI 内核输出文件
      图 4-7 查找转换后的 SCI 内核输出文件
  4. 对内核加载到闪存中的固件代码重复执行构建过程。
    1. 请确认为闪存设置了 Active Build Target Configuration。
    2. 确认已定义用于生成 txt 文件的正确编译后处理步骤。
    3. 构建固件工程。

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

有关用来启用 SCI 引导的默认 BMSP,请参阅 TMS320F280015x 实时微控制器数据表。如果用户将 GPIO24 设置为 0 并将 GPIO32 设置为 1,则引导 ROM 跳转到 SCI 引导加载程序且 SCIRXDA 设置为 GPIO28,SCITXDA 设置为 GPIO29,并且无需对器件寄存器进行编程。

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

使用 serial_flash_programmer 可执行文件时,连接到 Rx 和 Tx 引脚的相应 SCI 引导加载程序 GPIO 引脚需要连接到主机 PC COM 端口。通常需要收发器来将虚拟 COM 端口从 PC 转换为可以连接到器件的 GPIO 引脚。在某些系统(例如 controlCARD 或 LaunchPad)上,使用 FTDI 芯片将用于 SCI 通信的 GPIO 引脚连接到 USB 虚拟 COM 端口。

对于 F2800157 LaunchPad,PC 必须连接到 LaunchPad 上的 USB 并使用器件上的 UART 布线将 GPIO 引脚连接到 XDS110 COM 端口。UART 布线的原理图位于 C2000Ware_x_xx_xx_xx > boards > (LaunchPads or controlCARDs) > DEVICE_NAME > Rev# > documentation。对于 F2800157,使用默认 SCI_SEL 设置,SCIRXDA 从内部布线到 GPIO28,SCITXDA 从内部布线到 GPIO29,因此需要配置引导选项 0x01。


 F2800157 LaunchPad UART 布线原理图
图 4-8 F2800157 LaunchPad UART 布线原理图

但是,用户也可以选择使用跳线将 XDS110 COM 端口从外部布线到 GPIO BoosterPack™ (BP) 接头。如果选择了备用 SCI GPIO 分配,并且需要连接到 XDS COM 端口,这样布线会很有用。以下步骤演示了如何从外部将 XDS110 COM 端口布线到 F2800157 LaunchPad 上的 GPIO28 或 GPIO29。

  1. 确保 UART 布线设置为连接到 GPIO28 和 GPIO29 (SCI_Sel1 = 1) 的 BoosterPack™ (BP);而不是从内部连接到 XDS110 COM 端口。这样,SCI-A 信号可以输出至 BP 接头引脚。

     将 SCI TX 或者 RX(GPIO28 或 GPIO29)信号路由至 BoosterPack (BP) 引脚
    图 4-9 将 SCI TX 或者 RX(GPIO28 或 GPIO29)信号路由至 BoosterPack (BP) 引脚
  2. 移除 J101 接头上用于 TXD 和 RXD 引脚的跳线。请注意,XDS RXD 引脚(更靠近 XDS 电路)连接到 MCU TXD,而该引脚更靠近 XDS 电路。同样,XDS TXD 连接到 MCU RXD。
  3. 根据电路板原理图中的 XDS110 目标接口部分,将一条跳线从 XDS TXD 连接到 GPIO28 (SCI-A RX),并将一条跳线从 XDS RXD 连接到 GPIO 29 (SCI-A TXD)。

     将 XDS TX、RX 跳转到 SCI TX、RX GPIO
    图 4-10 将 XDS TX、RX 跳转到 SCI TX、RX GPIO

现在需要设置将器件,以模拟使用引导选项 0x01、SCIRXA = GPIO28 且 SCITXA = GPIO29 的零引脚 SCI 引导。

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

     在 CCS 中打开“Target Configuration”菜单

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

       启动 CCS 中的目标配置

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

     连接到 CCS 中的目标核心

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

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

       模拟 SCIRXDA 为 GPIO28 且 SCITXDA 为 GPIO29 的零引脚 SCI 引导
      图 4-15 模拟 SCIRXDA 为 GPIO28 且 SCITXDA 为 GPIO29 的零引脚 SCI 引导
  9. 复位 CPU 并执行外部复位 (XRSn)。然后,单击 Resume 以开始引导序列。
  10. 如果引导 ROM 中存在中断且没有提供调试信息,或者中断处于程序代码之外,则按照 节 5.3 中的说明加载引导 ROM 符号。然后、确认器件处于 SCI 自动波特率锁定状态。

现在,ROM 中的 SCI 引导加载程序(具有引导选项 0x01 指定的 GPIO 分配)开始执行并等待与主机进行自动波特率锁定(以接收 A 字符来确定进行通信时的波特率)。此时,器件已准备好接收来自主机的代码。

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

若要使用此工具对 C2000 器件进行编程,请确保目标板已复位且当前处于上面配置的 SCI 引导模式并连接至 PC COM 端口。下面介绍了该工具在单核 SCI 引导中的命令行用法,其中 -d、-k、-a、-p 是必需参数。如果忽略波特率,则波特率默认设置为 9600。有关实用程序参数的更多详细信息,请参阅 [12]。

serial_flash_programmer.exe –d DEVICE -k KERNEL_FILE -a APPLICATION_FILE -p COM# -b BAUDRATE -v
  1. 导航至 Device Manager > Ports (COM & LP),找到 XDS110 UART COM 端口。

     在器件管理器中查找 XDS COM 端口
    图 4-16 在器件管理器中查找 XDS COM 端口
  2. 导航至包含已编译 serial_flash_programmer 可执行文件的文件夹 (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > serial_flash_programmer)。使用以下命令运行可执行文件 serial_flash_programmer.exe。
    serial_flash_programmer.exe –d DEVICE_NAME –k <path_to_kernel_hex> -a <path_to_application_hex> -p COM# -v
注:

节 4.1 中所述,闪存内核和闪存应用程序都必须采用 SCI8 引导格式。

这将自动连接到器件,执行自动波特率锁定,并将 CPU1 内核下载到 RAM 中并执行。现在,CPU1 内核正在运行并等待来自主机的数据包。

  1. serial_flash_programmer 将选项输出到屏幕上以供选择,而这些选项会发送到器件内核。选择 1-DFU CPU1 以将应用程序刷写到 CPU1。这种情况下,原始命令已经指定了应用程序文件,因此此时不需要其他信息。

     命令串行闪存编程器下载应用程序
    图 4-17 命令串行闪存编程器下载应用程序
  2. 执行命令后,需要执行应用程序。要运行应用程序,请选择 6-Run CPU1 并指定转移地址 0x0008 0000(应用程序的闪存入口点)。SCI 引导成功加载到器件上的应用程序现在执行闪存中加载的应用程序。

     将应用程序加载到闪存后运行应用程序
    图 4-18 将应用程序加载到闪存后运行应用程序