uses the Arduino serial port to communicate with the Arduino IDE (or the avrdude command line tool used internally by the Arduino IDE) using an extended version of the STK500v2 protocol. It implements the following programming methods:


In-System Programming uses the 4 pin SPI (Serial Peripheral Interface Bus) protocol to communicate with the target MCU. This is very simple to set up, requiring only 4 signals and no additional hardware, and is supported by nearly all AVR MCUs.

The only drawback of ISP is that with certain fuse settings of the target MCU, ISP can be unusable (e.g. if the ISP feature or the RESET pin are disabled), or may be harder to implement (e.g. if an external clock is specified).

In ISP mode, works fairly similar to the ArduinoISP sketch included with the Arduino IDE. In fact, the Arduino pins used are almost exactly the same. However, is a little bit more versatile, supporting MCUs with more than 128K of flash memory, and can deal with strange clock settings.


High Voltage Serial Programming applies a +12V signal to the RESET pin of the target MCU and then uses a 4 pin serial protocol to program the target. This is slightly more difficult to setup than ISP, as the VCC and RESET pins have to follow a certain timing protocol, and the 12V signal has to be generated, but doing this is not prohibitively difficult.

The attraction of HVSP over ISP is that HVSP will always work, regardless of the fuse settings of the target MCU. HVSP is supported on all 8- and 14-pin AVR MCUs.


High Voltage Parallel Programming uses the same +12V signal protocol on the RESET pin as HVSP, but employs a parallel, not a serial protocol.

Like HVSP, HVPP works regardless of the fuse settings. It is supported on most AVR MCUs with 20 pins or more.


The Tiny Programming Interface is a protocol employed by the ATtiny4/5/9/10 family of minuscule MCUs (typically sold in a SOT23-6 package). TPI uses only 3 pins, and can be run either in low voltage mode (dedicated RESET pin pulled LOW) or high voltage mode (RESET pin usable as a regular I/O pin, set to +12V for programming).