Arduino-Based EEPROM Programmer

Wiring

Installation:

Interactive Mode

Wiring

I used an ATMEL EEPROM with the following pinout. (http://www.digikey.ca/product-detail/en/AT28C256-15PU/AT28C256-15PU-ND/1008506)

 

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): http://arduino.cc/en/Hacking/PinMapping2560

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.

Installation:

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. http://inotool.org/

Become familiar with ino tool: http://inotool.org/quickstart

Download the arduino program here:

https://www.ualberta.ca/~smartynk/eeprom/sketch.ino

Download the python script here:

        https://www.ualberta.ca/~smartynk/eeprom/simprom.py

Modify the device set in simprom.py 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 eprog.py 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.