Arduino-Based EEPROM Programmer



Interactive Mode


I used an ATMEL EEPROM with the following pinout. (


On the Arduino, wire up PORTA to the databus. Wire Port C to the lower half of the address bus. Wire PORTK to the upper-half of the address bus. To find which physical pins coincide with the Arduino Ports, see this page (applicable only to the Megs2560):

The OE, CE, WE on the eeprom are active low. I used a 7404 inverter in between these lines on the chip and the arduino. While it requires extra hardware, it makes asserting a line on the arduino more intuitive, and hopefully reduces unknown states upon powerup.


These installation instructions assume a linux-based computer, and some proficiency with Linux.

Install inotools

Inotool is a command-line based toolchain for working with your arduino.

Become familiar with ino tool:

Download the arduino program here:

Download the python script here:

Modify the device set in to the appropriate device your arduino is (typically but not always /dev/ttyACM0)

Interactive Mode

You can interactively program the EEPROM by using a serial monitor to talk to the arduino. (In fact, this is how the python automated bin-file programmer works)

The commands available in the interactive mode are:

    /* Serial Interface


     * Communicates with which interprets intel hex and sends along

     * commands to this program.


     * Commands:

     * r <addr>

     *  Reads a byte. Outputs a string in the format "addr: data"


     * a <lower limit> <upper limit>

     *  Reads a range of addresses. Outputs a series of strings


     * w <data> <addr>

     *  Writes a byte.


     * z <limit>

     *  Zeroes upto a limit


     * d <limit>

     *  romdump upto a limit


     * q <lower> <upper> <data>\n\r      

     *  Writes a data to many locations


     * s 0 0

     *  Show settings help menu


     * s <setting> <value>

     *  Assert a setting.


The settings menu has a number of interesting options as well for debugging purposes.

      ***Settings Menu***

      Option Format: s <setting> <boolean value (1 or 0)


        Option | Description

       1      | Reverse Nibbles on Write

       2      | Reverse Databus on Write

     3(X)   | Reverse Nibbles on Read (Not yet Implemented)

     4(X)   | Reverse Databus on Read (Not yet Implemented)

       5      | Place Address on Address Lines and Hold till Reset

Option 5 is used like this: “s 5 0x1000”. This places the address 0x1000 on the address bus and enters an infinite loop. This is useful for debugging your address bus wiring connections.