This document discusses in-circuit programming (ICP) and in-system programming (ISP) of microcontrollers. ICP requires an external programmer connected via a proprietary protocol like SWD to program the flash memory. ISP allows programming the flash without an external programmer by using an onboard bootloader and communicating with the host processor over an interface like I2C, UART, or SPI. The document provides steps to demo ISP using a UART interface by first programming a bootloader, preparing a firmware binary, using ISP tool software to update the firmware over UART, and testing the new firmware.