ESP8266
AVR In-System Programming over WiFi for ESP8266

This library allows an ESP8266 module with the HSPI port available to become an AVR In-System Programmer.

Hardware

The ESP8266 module connects to the AVR target chip via the standard 6-pin AVR "Recommended In-System Programming Interface Connector Layout" as seen in AVR910 among other places.

If the AVR target is powered by a different Vcc than what powers your ESP8266 chip, you must provide voltage level shifting or some other form of buffers. Exposing the pins of ESP8266 to anything larger than 3.6V will damage it.

Connections are as follows:

ESP8266 AVR / SPI
GPIO12 MISO
GPIO13 MOSI
GPIO14 SCK
any* RESET

For RESET use a GPIO other than 0, 2 and 15 (bootselect pins), and apply an external pullup/down so that the target is normally running.

Usage

See the included example. In short:

1 // Create the programmer object
2 ESP8266AVRISP avrprog(PORT, RESET_PIN)
3 // ... with custom SPI frequency
4 ESP8266AVRISP avrprog(PORT, RESET_PIN, 4e6)
5 
6 // Check current connection state, but don't perform any actions
7 AVRISPState_t state = avrprog.update();
8 
9 // Serve the pending connection, execute STK500 commands
10 AVRISPState_t state = avrprog.serve();

License and Authors

This library started off from the source of ArduinoISP "sketch" included with the Arduino IDE:

ArduinoISP version 04m3
Copyright (c) 2008-2011 Randall Bohn
If you require a license, see
    http://www.opensource.org/licenses/bsd-license.php

Support for TCP on ESP8266
Copyright (c) Kiril Zyapkov <kiril@robotev.com>.