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.
_____________________________________Before posting bug reports or ask for help, do at least quick scan over this article. It applies to any kind of problem reporting. On any forum. And/or look here.If you cannot discuss your problem in the public, feel free to start a private conversation: click on my name and then 'start conversation'. But please do so only if you really cannot do it in a public thread, as I usually read all threads. And I prefer to answer where others can profit from it (or contribute to it) too.
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 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? ...
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... 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:
@FFFE00 E0@E000FF 3F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D0E 0F 10 11 12 @1234500 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F10 11 12 q
I am interested in this code if you get it completed.
old_cow_yellow @FFFE00 E0@E000FF 3F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D0E 0F 10 11 12 @1234500 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F10 11 12 q
Jens-Michael Gross old_cow_yellow @FFFE00 E0@E000FF 3F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D0E 0F 10 11 12 @1234500 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F10 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.
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.