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 <http://www.atmel.com/images/doc0943.pdf>`__ 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:

.. code:: arduino


    // Create the programmer object
    ESP8266AVRISP avrprog(PORT, RESET_PIN)
    // ... with custom SPI frequency
    ESP8266AVRISP avrprog(PORT, RESET_PIN, 4e6)

    // Check current connection state, but don't perform any actions
    AVRISPState_t state = avrprog.update();

    // Serve the pending connection, execute STK500 commands
    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>.