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

USB 引导

注: 由于 C2000 LaunchPad 没有允许 USB 数据传输的 USB 外设,因此与 controlCard 不同,这些步骤基于 F28379D controlCARD Rev 1.3。更重要的是,早期器件版本在 USB 引导加载程序中存在已知错误,阻止器件与主机 PC 通信,因此必须至少使用 F28379D Rev C 器件版本。

USB 闪存内核基于 ROM 引导加载程序,与 C2000Ware (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > usb_flash_programmer) 中提供的主机 PC 应用程序进行通信,本质上执行与 ROM 引导加载程序相同的操作。由于 ROM 引导加载程序具有闪存 API,因此引导加载程序能够擦除闪存并对其进行编程,以执行固件更新。

注: 本节演示 CPU1 USB 引导加载。有关 USB 内核功能和 CPU2 用法的更详细说明,请参阅 C2000 微控制器的 USB 闪存编程应用报告 [20]。

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

  1. 在 C2000Ware 中查找适用于目标器件的 USB 闪存内核工程并导入 CCS。
    1. 对于 F2837xD 器件,内核可以在 C2000Ware_x_xx_xx_ > device_support > f2837xD > dual > F2837xD_usb_flash_kernels 中找到。
  2. 确保 USB 闪存内核工程的 Active Build Target Configuration 设置为 RAM,因为需要链接内核才能在 RAM 中执行。

     生成正确的 USB 内核 Bin 输出
    图 4-43 生成正确的 USB 内核 Bin 输出
  3. 构建内核工程。这些工程有一个编译后处理步骤,将编译和链接的 .out 文件转换为 USB ROM 引导加载程序所需的正确的二进制格式,并按扩展名为 .dat 的示例名称进行保存。
    注: 如果未生成 .dat 输出,则按照 节 4.1 中的步骤操作,验证是否定义了用于生成二进制文件的正确编译后处理步骤。
  4. 对内核加载到闪存中的固件代码重复执行构建过程。
    1. 确认为闪存设置了 Active Build Target Configuration。
    2. 按照 节 4.1 中的步骤操作,验证是否定义了用于生成二进制文件的正确编译后处理步骤。
    3. 构建固件工程。

在 CCS 中构建内核后,正确设置器件,使其与运行 usb_flash_programmer 的主机 PC 进行通信。

  1. 在 controlCARD 和主机 PC 之间连接 mini-USB 和 micro-USB。
  2. 设置 controlCARD GPIO 以使用 CCS 和卡上 XDS100v2 仿真器进行调试 [20]。有关连接选项,请参阅 C2000™ 微控制器 USB 闪存编程应用报告中的 ROM 引导加载程序一节。
    1. 将 A:SW1 位置 1 设置为 On(上侧),将位置 2 设置 Off(下侧)。

     配置 F2837xD controlCard 以使用 CCS 和板载 XDS 仿真器进行调试
    图 4-44 配置 F2837xD controlCard 以使用 CCS 和板载 XDS 仿真器进行调试
  3. 打开 CCS 的工作区。
  4. 选择 View > Target Configurations。

     在 CCS 中打开“Target Configuration”菜单

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

       启动 CCS 中的目标配置

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

     连接到 CCS 中的目标核心

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

     导航到 CCS 中的 Memory Browser
    图 4-48 导航到 CCS 中的 Memory Browser
  9. 在“Memory Browser”选项卡中,导航到地址 0xD00。
  10. 设置器件以进行仿真 USB 引导。在 TMS320F28003xD 实时微控制器技术参考手册 [23] 的配置 Get 引导选项一节中,BMODE 值定义为 0x0C。将 0xD00 编程为 0x0C5A。

     配置 F2837xD controlCard 以模拟 USB 引导
    图 4-49 配置 F2837xD controlCard 以模拟 USB 引导
  11. 复位 CPU,然后点击 Resume 以启用 USB 引导序列。
  12. 如果引导 ROM 中存在中断且没有提供调试信息,或者中断处于程序代码之外,则按照节 5.3中的步骤加载引导 ROM 符号。然后,确认器件在引导 ROM 中处于 USB 引导模式。

命令行选项和文件 IO 可以通过 C 标准库完成,但 USB 操作只能通过操作系统的器件驱动程序框架完成。有两个广泛使用的库提供此功能。

第一个是 libusb,它是一个开源 (LGPL) 库,采用 Unix 样式的 API。第二个是 WinUSB,它是 Windows 驱动程序开发套件的一部分。这两个库都在用户模式下运行并提供对 USB 器件的通用访问,无需使用客户驱动程序。Libusb 非常简便易用,也可以在 Linux 上使用,但它有点慢并且,任何分发都因许可证而变得复杂。WinUSB 使用起来要难一些,但速度更快并且生成的软件更易于分发。

C2000Ware 随附的 usb_flash_programmer.exe 预编译版本使用 WinUSB,但为这两个库提供了源代码。需要在器件上安装 WinUSB 驱动程序才能运行 USB 引导加载程序。

  1. 转至“设备管理器”,右键单击通用串行总线控制器下无法识别的设备。F28379D 显示为 Stellaris Device Firmware Upgrade
  2. 选择更新驱动程序 > 浏览我的电脑以查找驱动程序 > 让我从计算机上的可用驱动程序列表中选取 > 从磁盘安装
    1. 将其输入到从以下位置的制造商文件中复制C2000Ware_x_xx_xx_xx\utilities\flash_programmers\usb_flash_programmer\windows_driver\x86

       浏览 C2000Ware 以查找 USB Windows 驱动程序
      图 4-50 浏览 C2000Ware 以查找 USB Windows 驱动程序
  3. 现在,如果安装成功,WinUSB 驱动程序安装到器件上,并在 Texas Instruments Microcontrollers 类别下显示为 F28x7x USB Boot Loader

     设备管理器中显示的 F28x7x USB 引导加载程序器件
    图 4-51 设备管理器中显示的 F28x7x USB 引导加载程序器件
  4. 复位 CPU 并执行外部复位 (XRSn)。然后,单击 Resume 以开始引导序列。

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

输入文件路径在命令行上按升序加载,因此必须首先提供并列出闪存内核文件路径才能加载到 RAM 中。闪存内核加载完毕后,ROM 转移控制权并且内核开始执行以将应用程序编程到闪存。闪存内核必须准备好器件以便进行闪存编程,然后器件才可以开始通信,因此需要一个较短的延迟。在此期间,闪存内核配置 PLL 和闪存等待状态。

下载过程开始时,在实际闪存应用程序代码传输之前先传输一些初始数据,包括密钥、一些保留字段和应用程序入口点。接收到入口点后,内核开始擦除闪存。擦除闪存可能需要几秒钟时间。请注意,当应用程序加载看似失败时,说明闪存正在被擦除。闪存被擦除后,应用程序加载将通过传输每个应用程序代码块并将其编程到闪存而继续。

  1. 导航至包含已编译可执行文件 usb_flash_programmer 的文件夹 (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > usb_flash_programmer)。
  2. 打开终端并使用以下命令运行可执行文件 usb_flash_programmer.exe:
    usb_flash_programmer.exe <path_to_kernel_dat> <path_to_application_dat>
    注: 闪存内核和闪存应用程序都必须采用二进制引导格式,如上面在 节 4.1 中所述。

应用程序编程到闪存中后,闪存内核会转到其在应用程序加载过程开始时的入口点来尝试运行应用程序。