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.

Using the Ethernet Boot loader on TM4C129X

I am in the process of updating (rewriting) my code from the LM3S9B90 part to the TM4C129X part. I have a Test Application that I wrote that I use to program factory-fresh (blank) as well as already programmed LM3SB90 parts via the ROM Ethernet boot loader on a custom designed board. Everything works well for this.

I am using the TM4C129X development kit and TivaWare 2.1 to get started on the new code. While I can communicate with the Dev Kit using my Test App (via TCP), the reprogramming does not work. 

Here is what I have found so far:

The ROM Users Guide (spmu363) for the TM4C129 part does not contain a section on the Boot Loader like the LM3SB90 ROM User Guide (UG330) does. Why not?

My code for the TM4C129X makes it to the SoftwareUpdateBegin( ) function in swupdate.c. At first it was executing the "#else" portion of the "#if" statement and then jumping to the IntDefaultHandler( ) function in startup_ccs.c. I then defined ROM_UpdateEthernet in my project settings and now the "#if" portion of the code in SoftwareUdpateBegin is executed but it still doesn't work. Incidentally, there seems to be a porting error from StellarisWare to TivaWare in this area. In StellarisWare, the SoftwareUpdateBegin code contains the following check:

#if ((defined ROM_UpdateEthernet) && !(defined USE_FLASH_BOOT_LOADER))
ROM_UpdateEthernet(ROM_SysCtlClockGet());

and then rom.h contains:

#if defined(TARGET_IS_TEMPEST_RB1) || \
defined(TARGET_IS_TEMPEST_RC1) || \
defined(TARGET_IS_TEMPEST_RC3) || \
defined(TARGET_IS_TEMPEST_RC5) || \
defined(TARGET_IS_FIRESTORM_RA2)
#define ROM_UpdateEthernet \
((void (*)(unsigned long ulClock))ROM_ETHERNETTABLE[19])
#endif

However, in the TivaWare version of SoftwareUpdate  there is:

#if ((defined ROM_UpdateEthernet) && !(defined USE_FLASH_BOOT_LOADER))
ROM_UpdateEMAC(ui32SysClock);

and the TivaWare rom.h file has:

#if defined(TARGET_IS_TM4C129_RA1)
#define ROM_UpdateEMAC \
((void (*)(uint32_t ui32Clock))ROM_EMACTABLE[71])
#endif

It seems the TivaWare check should be:

#if ((defined ROM_UpdateEMAC ) && !(defined USE_FLASH_BOOT_LOADER))
ROM_UpdateEMAC(ui32SysClock);

This makes me wonder how this was ever tested.

I have also tried using the LMFlash Programmer (1613) to program via the Ethernet port without success.

Is there a sample program that uses the Ethernet ROM Boot loader for the TM4C129X parts?

Is there a fundamental difference in the way this works between the Stellaris LM3S9B90 and the Tiva TM4X129X parts?

Given that ROM_UpdateEMAC is defined only for TM4C129_RA1 parts and not RA0, does the Dev Kit that I have contain a RA0 part that just doesn't support this? How do I know if I have a RA0 or a RA1 part?

Thanks,

Jeff