A bootloader is a firmware IP (software shipped pre-programmed with the device) that can be used to program the SoC memories (flash and SRAM) using serial interfaces like UART or I2C. The bootloader is usually invoked after the bootcode has completed when the device is about to start the customer application. To support production programming use cases some bootloaders also offer more interfaces like SPI or CAN. A bootloader can also be used for in-field updates.