The In-System programming (ISP), also known as In-circuit serial programming (ICSP), enables the programming of a logical circuit directly in the deployment system. A simple serial connection, e.g. JTAG or SPI, is usually used for this purpose.
The advantage of in-system programming is that otherwise the block to be programmed would have to be removed from the target system or a further production step for programming would have to be introduced before assembly. Background: In the course of component miniaturization, chip packages are increasingly being used that can only be soldered, but not simply plugged in. As a result, there is less mechanical stress, and the entire programming process is faster and less exposed to potential sources of error.
For programming via additional serial interfaces, an in-system programmer (ISP), occasionally also an in-circuit programmer, is used, which is usually a small add-on hardware with which programmable electronic components designed for this purpose can be programmed in the installed state. Programming in this context means that firmware (a previously created program and/or data) is written to the internal, non-volatile memory (e.g., an internal EEPROM or flash memory) of an electronic device. The provision of higher programming voltage, which may still be necessary, usually takes place in the electronic component itself.
---
The far rarer and more complex reprogramming via USB is comparable to a (device) firmware upgrade, which is especially possible in consumer electronics products. It does not require any special hardware but needs a bootloader, the program for programming and USB communication, so to speak. Before the first in-system programming with USB, it must be delivered to the microcontroller conventionally via an (in-system) programming device. However, it can also be pre-programmed in the factory.

Image credit www.create-learn.us
Typically, the devices to be programmed are microcontrollers, system-on-a-chip (SoC) devices or “simple” memories whose data is programmed. For example, you have to be put into a programming mode from the outside, by the ISP.
An in-system programmer usually has a connector that is plugged into the built-in block to be programmed or plugged into a connector specially designed for this purpose on the circuit board. The in-system programmer usually obtains its data from a PC to which it is also connected. Normally, software on the PC takes over the entire control of the programming process, so that the ISP can be kept quite simple and inexpensive. In this case, it converts the voltage levels from the PC into values suitable for the device.
The control software on the PC is often integrated into a corresponding programming environment for software creation for the specific module. Often, the ISP hardware and the PC software can also read the data already present in the block, e.g. to control a programming process.