In-Circuit Serial Programming, when you program the chip without having to physically remove it and place it in a programmer.
Most (if not all) of the chips used by the Arduino series can use ICSP (In-Circuit Serial Programming) to reprogram the chip. This is accomplished by sending serial commands to the chip using the SPI interface (Serial Peripheral Interface). Doing this saves the inconvenience (or virtual impossibility, in the case of surface mounted processors) of removing the chip and placing it into a programmer.
Generally speaking, the ICSP interface consists of 6 signals to the target chip:
- MOSI - Master Out Slave In
- MISO - Master In Slave Out
- SCK - Serial clock
To program the target chip the programmer holds
/RESET low (ie. at zero volts) and then issues very specific commands via the SPI interface (MOSI/MISO/SCK). This enters "serial programming" mode, in which the processor responds to "commands" sent via SPI as documented in the relevant datasheet.
/RESET is low, any code already on the chip does not execute.
Contrast to bootloader which uses code already installed on the chip (quite possibly by ICSP) and does not require extra hardware.