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.

TMS320F280049C: Bootloader getting started

Part Number: TMS320F280049C
Other Parts Discussed in Thread: C2000WARE

Hi,

Working on the examples of the bootloader for a while now. A lot of reading and trying to get it to work with controlcard.

I need some guidance please:

1) what is the difference between LDFU (bank 0, 1) and DFU ? -> this shows in the menu

There are 7 different builds:

Bank0_LDFU

Bank0_LDFU_ROM

Bank0_NO_LDFU

Bank1_LDFU

Bank1_LDFU_ROM

Bank1_NO_LDFU

CPU1_RAM

What is used when? I cannot find this in any documentation.

2) I programmed Bank1_LDFU to the CC with CCS and then with the original serial_flash_programmer tool I programmed the kernel and then blinky application.

This is the only thing I get to work. The programing only works once. When I disable kernel programming in the tool, it does not work, only kernel+application. How should this work (flow)?

3) How can I debug the bootloader? I tried the CPU1_RAM build. But at start it will jump twice to "ESTOP0" and the waits for a character (and stays there). When stopping the debugger its at sci.h waiting for a character from the uart, I asume this is the function in the library.

4) Is it possible to use this bootloader without programming the 'kernel', so just the application. Which build should I use(to start with)?

In the end I want to have a bootloader that checks for a character at startup within 100ms to start the bootload process, if not it will jump to the application.

Best regards,

Ruud

  • Hi Ruud, 

    Have you studied this application note regarding Serial Flash Programming of C2000 Microcontrollers.http://www.ti.com/lit/an/sprabv4c/sprabv4c.pdf   

    Please let us know which documents you are referring to when you are asking questions about LDFU etc.,   Also which device boot mode are you planning to use?  

    Thanks,

    Krishna

  • Hi Krishna,

    I did find this document, maybe I overlooked it. I scnaned the document and I think its a good starting point.

    I want to use RS485, so a modified SCI boot mode. If you have suggestions about this!?

    Thanks!

    Ruud

  • Hi Krishna,

    I did'nt find this document. I've read this and it clarifies some things. 

    Also I just saw that an updated version of C2000Ware was available, per 20 March. I was using 2.01 (which was the latest a week ago).

    Still, no explanation is given, in the doc you suggested, about what the difference is between DFU and LDFU.

    I get 2 options in the menu of the serial programmer: DFU and LDFU. Which version is used and  when it should be used? 

    Modes:

    The example has seven build configurations, listed below.
    //! BANK0_LDFU: Only supports the Live Device Firmware Update (LDFU)
    //! command for Bank 0; other commands are not supported
    //! by this build configuration. For more information about
    //! the LDFU command functionality, please read the documentation
    //! in 'flashapi_ex2_LDFU.c'. Links the flash kernel to Bank 0
    //! (0x80000 - 0x82007 will be reserved). Uses Flash API symbols
    //! in flash.
    //!
    //! BANK0_LDFU_ROM: Only supports the Live Device Firmware Update (LDFU)
    //! command for Bank 0; other commands are not supported
    //! by this build configuration. For more information about
    //! the LDFU command functionality, please read the documentation
    //! in 'flashapi_ex2_LDFU.c'. Links the flash kernel to Bank 0
    //! (0x80000 - 0x82007 will be reserved). Uses Flash API symbols
    //! in ROM; Rev A of F28004x cannot be used with this build
    //! configuration.
    //!
    //! BANK0_NO_LDFU: Supports all commands except the LDFU command. Links the
    //! flash kernel to Bank 0. Uses Flash API symbols in flash.
    //! Commands must only be used to manipulate flash in Bank 1.
    //!
    //! BANK1_LDFU: Only supports the Live Device Firmware Update (LDFU)
    //! command for Bank 1; other commands are not supported
    //! by this build configuration. For more information about
    //! the LDFU command functionality, please read the documentation
    //! in 'flashapi_ex2_LDFU.c'. Links the flash kernel to Bank 1
    //! (0x90000 - 0x92007 will be reserved).Uses Flash API symbols in
    //! flash.
    //!
    //! BANK1_LDFU_ROM: Only supports the Live Device Firmware Update (LDFU)
    //! command for Bank 1; other commands are not supported
    //! by this build configuration. For more information about
    //! the command functionality, please read the documentation
    //! in 'flashapi_ex2_LDFU.c'. Links the flash kernel to Bank 1.
    //! (0x90000 - 0x92007 will be reserved) Uses Flash API
    //! symbols in ROM; Rev A of F28004x cannot be used with this
    //! build configuration.
    //!
    //! BANK1_NO_LDFU: Supports all commands except the LDFU command. Links the
    //! flash kernel to Bank 1. Uses Flash API symbols in flash.
    //! Commands must only be used to manipulate flash in Bank 0.
    //!
    //! CPU1_RAM: Supports all commands except the LDFU command. Links the flash
    //! kernel to RAM.
    //!

    Because I do not know if Rev A of the f280049C is in the field, I can skip BANK0_LDFU_ROM and BANK1_LDFU_ROM. Right?

    What is the difference between: BANK0_LDFU and BANK0_NO_LDFU

    When to use : CPU1_RAM

    With the above samples: If I use Bank0, I can ONLY program Bank1 for application? So the rest (all segment - kernel) of Bank0 will not be used?

    I am trying to get a starting point to make a bootloader, but I am missing overview and getting lost in non explaned modes.

    Thanks!

    Ruud

  • Ruud,

    We are very sorry for the confusion.  I will pass this info to corresponding team and file a ticket to get the documentation updated.

    1.  DFU means Device Firmware upgrade.  It erases the necessary sectors and programs the image and verifies it.  Where as LDFU means Live Device firmware upgrade. 

    LDFU can be used

    (i) to update Bank1 when your application is still executing from Bank0. OR

    (ii) to update Bank0 when your application is still executing from Bank1.

    Meaning, only one bank will be active at-a-time (from which application is executed) and the other one will be updated when a LDFU command is given. 

    2.  _ROM means, the kernel uses the Flash API in ROM.  As you correctly said, only RevB has the Flash API in ROM.  If you don't know which revision is in field, don't use the ROM version.

    3.  No LDFU: This supports operations other than LDFU; Supports DFU, erase, verify etc.

    4. _RAM: Flash kernel and API get mapped to RAM and hence can be used to perform operations (except LDFU) on both banks.  

    On your question regarding using Bank0 or Bank1 kernels:  Yes, only one bank can be operated. Bank0 kernels can be used to perform operations on Bank1 and vice versa.

    Thanks and regards,
    Vamsi