This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28379S: SCI Bootloader takes ~5 Mins to Upload Code & Fails Above 38400 Baud on a Custom PCB

Part Number: TMS320F28379S
Other Parts Discussed in Thread: C2000WARE

Tool/software:

Hi TI team,

I'm using the TMS320F28379S on a custom PCB and have configured the device to boot via SCI boot mode using boot select pins. While the bootloader does work, it’s extremely slow — it takes nearly 5 minutes to upload the firmware. Additionally, the boot load process fails at baud rates above 38400.

Here are the setup details:

  • Controller: TMS320F28379S (on custom PCB)

  • Boot Mode: Set via boot pins to SCI mode.

  • SCI Flashing Tool: serial_flash_programmer.exe from C2000Ware

  • Bootloader Example Used: F2837xS_SCI_Flash_Kernel

  • Baud Rates Tested:

    • White check mark 9600 → works

    • White check mark 38400 → works

    • X 57600 → fails

    • X 115200 → fails

  • Upload Time at 38400: ~5 minutes for ~50 KB firmware

  • GPIO Remap for BMSP :

    • GPIO72

    • GPIO73
      (Default was GPIO72 & GPIO84 — changes are reflected in OTP memory)

  • External Oscillator: 16 MHz crystal

  • PLL Configuration in Application: 200 MHz system clock

  • Connection: The PC is connected to the custom PCB using a USB-A to USB-C cable. From the USB-C port, the connection goes through an FT232 USB-to-UART IC, which interfaces with the TMS320F28379S controller.

My Questions:

  1. Are there any TI-recommended ways to speed up SCI bootloading or alternative faster boot modes?

  2. What clock source and frequency does the ROM SCI bootloader use during the boot process?

  3. Is there a known baud rate limitation for the default SCI bootloader in ROM?

  4. Why does the SCI bootload fail at 57600 and 115200 despite the correct PLL in the application?

  5. Is there a way to configure or override the ROM bootloader to support higher baud rates (e.g., 115200) to reduce flashing time?

Appreciate any insights or recommendations — thank you!

  • Hello,

    1. There is a significant overhead when reading data from a COM port on Windows (~30ms each time the port is read). Due to the byte-by-byte nature of the bootROM transmission, this overhead adds up quickly. There isn't much that can be done to speed up ROM loading process, but you can modify the SCI flash kernel/host in such a way that it doesn't need every single byte to be echoed back from target to host. Alternatively, you could use another MCU as the host rather than a host PC.

    2. The SCI boot mode runs using INTOSC2, 10MHz.

    3. The quality of the cable and transceiver plays a large role in the stability of the SCI communication. Have you observed the same instability using a shorter cable or alternative transceiver?

    4. See #3

    5. No, the ROM bootloader uses autobaud to configure the rate. You could try manually increasing the baud rate of the flash kernel instead of using autobaud, but I still recommend implementing some other kind of handshake to verify that the communication is successful.

    Kind regards,

    Skyler

  • Hi Skyler,

    Thanks for your response — it was very helpful in understanding the cause of the SCI bootload slowness.

    As a follow-up, I’m planning to implement your recommendation to modify the SCI flash kernel and host tool to avoid waiting for an echo on every byte, and instead send data in larger blocks.

    Could you please provide:

    1. Any reference documents, examples, or guidelines from TI that show how to modify both the flash kernel and the serial_flash_programmer.exe host tool for block-based transfer?

    2. Specifically, where in the C2000Ware kernel and PC tool code should I apply the changes?

    3. After this modification, what is the expected flashing time for ~50 KB of code at 38400 and 9600?

    My main goal is to reduce the flashing time from ~5 minutes to under 1 minute, ideally around 30 seconds, using a PC as the host.

    Also, if it turns out that this method can't reliably achieve flashing under 1 minute, could you suggest the best practice or alternative boot methods (e.g., SPI, CAN, or using another MCU) to achieve faster flashing in a production or field update environment? But I prefer PC as Host.

    Thanks again for your support. Kindly do the needful.

  • Hello,

    1. Unfortunately, we do not have any documentation that will walk you through these modifications. At a high level, the gating implementation here is that the host programmer expects every single byte it sends to be echoed back by the target. It won't send the next byte unless there is a successful echo back received. You could remove this feature from the host in favor of a checksum-based echo-back method. 

    2. The main function of the C2000ware kernel that needs to be updated is the SCIA_GetWordData() function. On the host side, the f021_DownloadImage() function will need to be updated.

    3. This depends on your implementation and the transceiver. 

    In general, CAN will be faster and can run up to 1Mbps with less variation between transceivers.

    Kind regards,

    Skyler

  • Hi Skyler,

    I'm thinking of modifying as you mentioned and I'm some what clear with kernel file from what you mentioned but how come I can modify the serial_flash_programmer.exe file can you please provide an insight for this 

    and in mean time I'll update my progress regarding code modification. Kindly support if any doubt raised.

    Could you please provide is there any documentation on implementation of bootloader using CAN

  • Hi Rajamurugan,

    You can modify the source for the serial_flash_programmer.exe by opening the C2000ware project in Microsoft Visual Studio:

    C2000Ware_5_04_00_00\utilities\flash_programmers\serial_flash_programmer\serial_flash_programmer.sln

    There exists reference documentation for our CAN solution in the following app note:

     https://www.ti.com/lit/an/sprad51a/sprad51a.pdf

    It should be noted that this device will follow a DCAN implementation, and similar to the ability to modify the source for the serial flash programmer, this program's source can also be modified here:

    C2000Ware_5_04_00_00\utilities\flash_programmers\dcan_flash_programmer\dcan_flash_programmer.sln

    Thanks and regards,

    Charles