SPRU514Y August 2001 – June 2022
High-availability systems may need to be designed so that the firmware can be upgraded without taking the system offline. Examples include systems that service data centers, hospitals, and military applications. The ability to update system firmware while the system is running and start using the new firmware once the update is complete is called Live Firmware Update (LFU). This is also described as a "warm" start.
For information about creating and calling a custom entry point that performs the warm start, see the Live Firmware Update Reference Design with C2000 MCUs (TIDUEY4) design guide.
In order to support LFU, code generation tools need to provide a way to ensure that no system reset occurs during an update, no real-time interrupts are missed, and the system state (global and static variables) can be maintained. Both program and data memory of the firmware image may need to be updated. Global and static variables may be handled in the following ways during a warm start:
.TI.bound
section. If the .TI.bound sections
are contiguous in memory, the linker can coalesce them into a single output
section, which reduces the number of CINIT records required to initialize them.
(This is the default if neither --lfu_default nor an attribute is used to
specify otherwise.).TI.update
output section. This section defaults to copy compression (that is, no
decompression is required during a warm start), which reduces the LFU image
switchover time.--lfu_default=none
option is used and a global or static
variable has neither the "preserve" nor "update" attribute.The C28x and CLA compilers provide LFU support for ELF-based firmware images, which use the EABI application binary interface. This support allows you to switch over to a new LFU image while choosing whether to preserve, update (re-initialize), or add individual global and static symbols read in from a reference ELF binary.
Features provided to support LFU functionality include:
preserve
attribute, which can be used in C code to specify that the address of an
individual symbol should be preserved. See Section 7.16.4. update
attribute, which can be used in C code to specify that an individual symbol
should be re-initialized during a warm start. See Section 7.16.4.