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.

TMS570LC4357: Software Loader over ethernet

Part Number: TMS570LC4357


I want to load a new firmware over ethernet such that on the next boot, it will be valid. I know LC4357 runs instructions from flash and is there a way to accomplish this?

Note: I can't store binary image on RAM and swap, because binary image is larger than 512KB(Max RAM available)

Thanks in advance.

  • Hi, thanks for the reply but this app forces software loading process right after boot. I would like to achive a system such that it's all up to user to load a new software. If he decides to do it, he should be able to do it anytime. Also, execution of operation should continue normally after loading new software(until reboot). How can I accomplish such a mechanism in this kind of architecture where instructions are executed from flash?

  • Hi,

    The example provides an option to force the application update

    After MCU reset, the start-up code copies the Flash API of boot loader from flash to SRAM, and execute the boot loader from Flash.

    First, it checks the GPIO_A7 pin by calling CheckGPIOForceUpdate(). If GPIO-A7 is pulled LOW (S1 pushbutton on HDK), the bootloader is forced to update the application. The GPIO pin check can be enabled with ENABLE_UPDATE_CHECK in the bl_config.h header file, the bl_config.h also defines which GIO pin and what polarity are used for update check.

    Then, it will check the value at application address. If the value at this address doesn't match with the magic word defined in bootloader (for example 0x5a5a5a5a) , it will force the application update.

    // Check if update needed, the following condition is only for HDK
    #if defined (HDK)
    if(0 == CheckGPIOForceUpdate() && ((*(uint32_t *) APP_STATUS_ADDRESS) == 0x5A5A5A5A))
    {
          g_ulTransferAddress = (uint32_t)APP_START_ADDRESS;
          ((void (*)(void))g_ulTransferAddress)();
    }
    #else
    if((*(uint32_t *) APP_STATUS_ADDRESS) == 0x5A5A5A5A)
    {
           g_ulTransferAddress = (uint32_t)APP_START_ADDRESS;
           ((void (*)(void))g_ulTransferAddress)();
    }
    #endif