Classic 27c256 27c512 EPROM Programmer Using Nano
by coopzone in Circuits > Computers
3468 Views, 1 Favorites, 0 Comments
Classic 27c256 27c512 EPROM Programmer Using Nano
This project was build to program the original 1980's EPROMS, the typical UV erasable glass top ones used in many projects back in the day. This initial version only programs the 256k or 512k (giving 32kb or 64kb) versions typically called 27C256 or 27C512.
The main reason for just these two so far is that I used it to help build some RC2014 z80 retro computers - so far it has successfully programmed EPROMS fro:
sc108 z80 CPU board by Stephen C Cousins.
sc114 z80 SBC computer by Stephen C Cousins
simple80 SBC by Plasmo (AKA Bill Shen)
They are now all running perfectly.
Note: you will need a 12.7v PSU, I used my bench power supply for this to save on cost. It really does need to be 12.7 and not 12v. Other suggestions would be a cheap buck (step up) voltage converter. I have used one from Ebay and it seems to work fine. So the whole board can be powered at 5v.
The PCB design and Circuit for this project are now published on OSHWLab and can be found here:
https://oshwlab.com/mycoopzone/eprom_copy
Happy times.
Supplies
Not much to be said here really, all the parts are basic items available from places like ebay.
1 100nF C1,C2,C3,C4,C6 5 ceramic disc or multi layer ceramic 2.54mm pitch (many are 5.04)
2 100uf C5 1 Electrolytic cap 16v or 25v
3 1N4004 D1,D2 2 silicon rectifier
4 PWR J1 1 JST 2.54mm
5 ARDUINO NANO 1
6 47k R1 1 1/4watt metal or carbon
7 DPDT S1,S2 2 PCB mount mini switch 2.54mm pitch
8 78L05C U1 1
9 SN74HC595N U2,U3 2
10 Ziff Socket 28 pin 1
11 PCB for the project 1
Optionally sockets for the IC and Nano (normally just soldered to the PCB)
Notes:
The PCB gerber files are published on Github, see last section for resources
Ziff is optional, depends how many your going to program!
DPDT switches are the minature type with 2.53 mm pitch.
The IN4004 can be 4001 or 4002, only used to adjust the VCC to program voltage.
External 12.7 volt supply, normally use a bench PSU for this. Or an adjustable buck converter set to 12.7v
Program the Nano
I am assuming that you already now the process of using / programming an Arduino. This setup does not require any special settings etc. Just choose the correct board from the drop down menu.
Download / clone this github site into you Arduino sketch directory.
https://github.com/coopzone-dc/Eprom-27c512-27c256
Open the eprom.ini file and click upload to Arduino.
Once done you can do a quick test from a terminal program, for example minicom etc.
Use settings 115200 8N1 with no hardware flow control, it all went ok you will get this menu:
Started V 1.3 12/8/23
a nnnnn - Set address (for debug)
r nnnnn mmmmm - show mmmmm bytes at address nnnnn
i nnnnn mmmmm - show mmmmm bytes at address nnnnn in Intex Hex format
w nnnnn - write to eprom using xmodem transfer
m nnnnn mmmmm - md5sum rom content starting at nnnnn for mmmmmm bytes long
b nnnnn mmmmm - Check for FF's from nnnnn for mmmmmm bytes long
h repeat this menu
%
A few notes before looking at the option:
The address's and any ranges are in 5 digit hex numbers, the second (mmmmm) numbers are all counters NOT end address's so, for example, the r command needs two 5 digit hex numbers 00000 00011 would display the bytes from 00000 to 00010 (not 11), it starts at 0 not 1. Like this:
% r 00000 00011
0x00000 : 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
0x00010 : 41
%
You would use w 08000 to program the second 32k block in a 512(64k) eeprom.
The Commands
A set address
For debug,
R read
As it suggests it will display the contents (or part) of an eeprom. Can be useful if you capture the output to a file from the terminal program,
I Intel hex
Same as read, but the output is in intel hex format. This makes it a lot more useful if you capture the output. You can for example save an existing eeprom to a hex file (may need a bit of cleaning up in a text editor) then convert it to a binary file ready to program a new eeprom.
w write
write a binary file to eeprom starting at address nnnnn. You will be prompted to switch to program mode and start an xmodem upload. The file has to be in binary.
m md5
Gives the md5 value for the given start/count in the eprom. typically used to sum up what you wrote so that you can compare it to the md5 of the binary file. A check to show the write worked correctly.
b blank check
confirms the locations in the eeprom are FF's and ready to write to.
h help
Repeats the menu, just in case it's scrolled of the screen!
Some Useful Tools
Checking.
These are all commands for use in linux, I would think windows has similar ones, but I don't use windows.
Generate an md5 for a given file to compare it with the md5 of the eeprom
cat XXXXXX | openssl md5
like this:
cat SST39SF040.mpj | openssl md5
MD5(stdin)= e3a1764bf21ef95830cf57b916489686
Converting
This programmer only accepts binary data. Many files you can download are in intel hex format. So to convert from Intel Hex to binary use:
srec_cat XXXXXXX.hex -intel -o YYYYYYYY.bin -binary
srec_cat SCM_ROM-19200.hex -intel -o SCM_ROM-19200.bin -binary
You may need to tweak the hex file a little, for example remove any extra lines that are not relevant to write to an eeprom.
You can use the opposite command to convert from binary to intel hex:
srec_cat XXXXXXX.bin -binary -o YYYYYYYY.hex -intel
srec_cat SCM_ROM-19200.bin-binary -o SCM_ROM-19200.hex -intel
Have fun.