Arduino-Based EEPROM Programmer
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.
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)
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.