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.

Simple Bootloader over UART

Other Parts Discussed in Thread: CC1101, CC1120

Good morning,

I'm hoping someone can explain the format of the TI Text output from CCS.  I see that you can create a relocatable and non-relocatable object.  The relocatable object doubles the size of the binary output file.  Why?

I want to create a simple UART program in the MSP430 that grabs each byte of a TI TXT binary file from the UART and programs it to the MSP430 program flash.  The start address needs to be different than the current program that is loaded so that I don't corrupt the current program.  Once the TI TXT binary file is in flash, I want to program the new start address of the new binary program into the reset vector.  Then reboot and see if the new program will work.  

Has anyone ever done this?  There's much more to my program than this but I wanted to start with something simple to see if this would work.

http://processors.wiki.ti.com/index.php/Generating_and_Loading_MSP430_Binary_Files#Using_CCS

I have read through the http://www.ti.com/lit/an/slaa450b/slaa450b.pdf 

Would it be easier to just use two linker files that put the program at different start addresses, then program a part with each and read the binary?  Then use that binary and pass it through the UART?  Then change the reset vector and reset the part?

  • The TI.TXT format is very simple. Lines start with an @ sign specifies an address in hex. Last line must have the single character q. Other lines contain consecutive bytes in hex separated with single spaces.

    It is not relocatable and is meant to be loaded to the addresses specified after the @ sign.

    Which MSP430 are you using? Which hardware interface to PC do you have?

  • Isn't there some more information on the line such as number of bytes in this line, checksum, relative address? Or was this the Intel format?

    However, on devices with more than 64k flash, the address behind the @ rolls over. This number is 16 bit only. Most software is smart enough to accept a decrease of the address as a sign for a 64k rollover and add 0x10000 to the new address. (and 0x20000 next time etc.)

    So the data blocks must be in ascending order in the file.

  • Thanks for the responses everyone.  I'm going to use this for several MSP430s.  Firstly the F5172 and then the G2553.

    I successfully can program the entire binary TI TXT file into flash at the right location and now just need to program the reset vector so that it points to the new program that was written to flash.  I will post example code and directions when I have it working.   I will be using this technique via the UART and even SPI through the air with the CC1101/CC1120 transceivers. 

  • Jens-Michael Gross said:

    Isn't there some more information on the line such as number of bytes in this line, checksum, relative address? Or was this the Intel format? ...

    For TI.TXT format, no # of bytes, no chechsum, no relative address. Intel format has those.

    Jens-Michael Gross said:
    ...

    However, on devices with more than 64k flash, the address behind the @ rolls over. This number is 16 bit only. Most software is smart enough to accept a decrease of the address as a sign for a 64k rollover and add 0x10000 to the new address. (and 0x20000 next time etc.)

    So the data blocks must be in ascending order in the file.

    Example of TI.TXT formatted object code:

    @FFFE
    00 E0
    @E000
    FF 3F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D
    0E 0F 10 11 12
    @12345
    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    10 11 12
    q


  • I am interested in this code if you get it completed.

  • old_cow_yellow said:

    @FFFE
    00 E0
    @E000
    FF 3F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D
    0E 0F 10 11 12
    @12345
    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    10 11 12
    q

    Well, this will make some older software choking. The oldest will not accept the 20 bit address in the third block, or take the first 4 letters as 16 bit, while newer one will put the second block to 0x1e000 and still choke on the third block address. And the newest one needs to scan the whole file once to determine which interpretation for the address should be taken.

  • Jens-Michael Gross said:

    @FFFE
    00 E0
    @E000
    FF 3F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D
    0E 0F 10 11 12
    @12345
    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    10 11 12
    q

    Well, this will make some older software choking. The oldest will not accept the 20 bit address in the third block, or take the first 4 letters as 16 bit, while newer one will put the second block to 0x1e000 and still choke on the third block address. And the newest one needs to scan the whole file once to determine which interpretation for the address should be taken.

    [/quote]

    Yes, many TI software cannot even accept odd number of bytes or @xxxx with odd address. But IAR, Elprotronic, Tessolve (Flasher) do not have such problems

  • You should be able to write the reset vector the same way you right any memory location. Simpy change FFFE to the address of your app.

**Attention** This is a public forum