SPRUJH3 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
The USB flash kernel is based on the ROM bootloader, communicating with the host PC application provided in C2000Ware (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > usb_flash_programmer) and essentially performing the same operations as the ROM bootloader. Because the ROM bootloader is equipped with the flash API, the bootloader is able to erase and program flash to perform the firmware update.
Flash kernel source and project files for CCS are provided in C2000Ware, in the examples directory of the corresponding device. These projects have a post-build step in which the compiled and linked .out file is converted into the correct boot hex format needed by the SCI ROM bootloader and is saved as the project name with a .dat extension.

After building the kernels in CCS, set up the device correctly to communicate with the host PC running the usb_flash_programmer.






Command line options and file IO can be done through the C standard library, but USB operations can only be done through the device driver framework of the operating system. There are two widely-used libraries that provide this capability.
The first is libusb, an open-source (LGPL) library that features a Unix-style API. The second is WinUSB, which is part of the Windows Driver Development Kit. Both libraries run in user mode and provide generic access to USB devices without the need for a customer driver. Libusb is very easy to use and is also available on Linux, but it's somewhat slower and any distribution is complicated by the license. WinUSB is harder to use, but is faster and the resulting software is simpler to distribute.
The precompiled version of usb_flash_programmer.exe included with C2000Ware uses WinUSB, but source code is provided for both libraries. The WinUSB drivers need to be installed on the device for the USB bootloader to run.


The command line PC utility is a lightweight (approximately 64KB executable) programming solution that can easily be incorporated into scripting environments for applications like production line programming. This was written using Microsoft Visual Studio in C++. The project and source can be found in C2000Ware (C2000Ware_x_xx_xx_xx > utilities > flash_programmers > usb_flash_programmer > src > VS2010_USBLoader2000).
Input filepaths are loaded in ascending order on the command line, so the flash kernel filepath must be provided listed first to be loaded into the RAM. After the flash kernel is loaded, the ROM transfers control and the kernel begins to execute to program the application to the flash. The flash kernel must prepare the device for flash programming before the device is ready to begin communications, so a small delay is needed. During this time, the flash kernel configures the PLL and flash wait states.
At the beginning of the download process, some preliminary data is transferred before the actual flash application code, including a key, a few reserved fields, and the application entry point. This is after the entry point is received that the kernel begins to erase the flash. Erasing the flash can take a few seconds. Note, that while the application load looks as if failed, the flash is being erased. Once the flash is erased, the application load continues by transferring each block of application code and programming to flash.
usb_flash_programmer.exe <path_to_kernel_dat> <path_to_application_dat>Once the application is programmed into flash, the flash kernel attempts to run the application by branching to the entry point that was transferred at the start of the application load process.