EEP-0.2

Abhijit Dasgupta [email protected]

26 Apr 2004

1. EEP: EEPROM Programmer for Linux

1.1 What is this ?

EEP is an open hardware design EEPROM burner for 24-pin and 28-pin 5-volt EEPROMs with Linux support. ``Open hardware design'' means you are free to copy, use, and modify the hardware design, provided you do not restrict others from doing so. The EEP software copyright policy is GPL.

EEP can be obtained from:

Please do not use the old URL for EEP that came with EEP-0.1 anymore.

For questions and/or comments, send email to Abhijit Dasgupta at [email protected].

There are various designs for EEPROM burners, but my main goal was to have something which

The latest version is EEP-0.2.

The ICs in EEP are all common 74HCT series logic chips, and it uses the PC parallel port interface. I wrote the driver code for Linux only, but it is GPL code, and it should be easy to modify it for other PC operating systems.

I use EEP to burn netboot PROMs for ethernet cards, which are used to make diskless linux boxes. See the netboot/etherboot packages for details of how to do that. You can also use it for microcontroller systems with external ROM (e.g. 8031).

There is also a 171K jpeg file picture of the burner.

1.2 Supported EEPROMs

Most 5-volt-programmable 24-pin and 28-pin EEPROMs should work with EEP-0.2. Here is a partial list of common EEPROMS that are known to work:

Various vendors manufacture these EEPROMs. Some are: Microchip, Atmel, Xicor, Catalyst, and STM.

1.3 Schematics and pinouts

The schematic is in PostScript (schematic.ps), but a GIF image (schematic.gif) is also included. The ascii version is older. In the schematic diagram, pin numbers are shown outside each IC diagram. Pin numbers for the big box on the right side are for the 28-pin ZIF socket.

The file pinouts.txt has pinout information for the ICs used.

For the 74HCT ICs used in the circuit, Vcc and Ground connections are not shown in the schematic. Of course, these pins must be properly connected. Please refer to the pinouts.txt file for full pinouts (in particular Vcc/Ground connections).

1.4 Construction

WARNING: It is easy to destroy the parallel port of your PC by connecting things to it. It is also possible to damage or destroy the whole PC, its attachments, peripherals, and people near it by improper connections and electrical accidents. USE EXTREME CAUTION.

Disclaimer: Use at your own risk. There is absolutely no warranty of any kind here, see the COPYING/LICENSE policy in GPL.

The programmer can be built on a breadboard, but use a protoboard for a more permanent version. Use 0.1uF power-bus bypass capacitors generously. The 5V power source can be obtained from the PC itself, but be careful here. The 28-pin ZIF socket is perhaps the most expensive component. If you are building on a breadboard, you may be able to get by without it (not recommended).

The 180 ohms resistor connecting pin 10 (Y6) of the upper 74HCT259 to pin 1 of the ZIF socket is a current limiting resistor to protect the 74HCT259 IC in cases where a 28-pin EEPROM with RDY/BSY pin is used. When using 32 kilobytes (256 kilobits) EEPROMs like the 28256, it is recommended that this resistor be shorted for more reliable operation.

1.5 Jumper setup

J1 and J2 are single-row 3-pin headers for jumpers. When using 28-pin EEPROMs, jumper the right two pins on both J1 and J2. For 24-pin EEPROMs, jumper the left two pins on both J1 and J2.

1.6 Low-justification of 24-pin EEPROM devices

When plugging in a 24-pin EEPROM device (like 2816) into the 28-pin ZIF socket, make sure the 24-pin device is ``low-justified'' in the ZIF socket. This means that pins 1, 2, 27, and 28 of the ZIF socket will remain unused, and the ground pin of the devices match up (i.e. pin 12 of the 24-pin device should sit in to pin 14 of the ZIF socket).

1.7 Parts List

1.8 If you have already built EEP-0.1

If you have already built the EEP-0.1 burner, you can make the following modificatons to make the EEP-0.2 burner:

  1. remove the connection from 74HCT157 pin 1 (SEL) to the upper 74HCT259 pin 11 (Y6)
  2. remove the 1K resistor that is connected from pin 1 of ZIF-socket to Vcc
  3. add a new connection from pin 1 (SEL) of the 74HCT157 to pin 9 of of the DB-25 parallel port
  4. add a new connection from pin 10 of the upper 74HCT259 to the unused pin of J1
  5. add a 180 ohms resistor from pin 11 of the upper 74HCT259 to pin 1 of the ZIF-socket

1.9 How to build the software

Download the software package and unpack it. Then cd to the src directory and type `make'.

1.10 Usage

The progran eep is used for burning and reading an eeprom. It reads data from stdin and writes it to the eeprom. The data needs to be in binary (raw) format. None of the usual hex and/or ascii formats (Intel, Motorola srecord, etc) are supported, so if your assembler ouputs in only a hex/ascii format, you will need to convert it to binary (see, e.g., the Hex2bin and srecord, available from the metalab.unc.edu/pub/Linux archive). When reading, the output is also raw binary to stdout (unless the -t option is given).

Usage:

      eep  -0|-1|-2  -r|-w  -b|-t  offset  size

where:

    -0|-1|-2  -0 chooses port lp0, -1 port lp1, and -2 port lp2,
    -r|-w     -r reads the eeprom to stdout, and -w burns it from stdin,
    -b|-t     -b is normal (binary) mode, and -t is debugging (ascii hex),
    offset    is the start address within the eeprom, 0..32767, and,
    size      is the number of bytes to read/write, 0..32768.

The offset and size can be specified as a string of digits in decimal
notation, but will be taken as hexadecimal when there is a ``0x'' prefix,
and octal when preceded by ``0''.

Examples
--------

# Read the contents of a 2864 in binary (raw) form and save it in a file
eep -1 -r -b 0 8192 > contents.bin
# Same as:
eep -1 -r -b 0 0x2000 > contents.bin


# List 16 bytes starting at offset 128
eep -1 -r -t 128 16
# Same as:
eep -1 -r -t 0x80 0x10


# Write 16384 bytes from the file nepci.lzrom into the first-half of
# a  28C256 eeprom, through lp0:
cat nepci.lzrom | eep -0 -w -b 0 16384

1.11 Schematic Diagram in ASCII


                       +-------+                      J1
              +5-------|RST    |               +5---o o o----+   +-----------+
              +5--o----|/CLR1  |         10K          |      |   |           |
                  |    |       |-----o--/VVV\-- +5    +------|---|26 A13(+5V)|
      +------+    |    |1/2 123|     |              +--------|-->|27 /WE(NC) |
 16 o-|/CS2  |    |    |       |--||-+              | +------|-->|23 A11(/WE)|
      |   CS1|----o----|B1     | 100pF              | | J2   |   |           |
      |      |         |    /Q1|---------->---------o o o    |   |  ZIF28    |
      |    Y1|---------|/A1    |                        |    |   |  socket   |
      | 138  |         +-------+         _ 1/2 74HCT132 |    |   |   for     |
      |      |                     +5 --| \   __        |    |   |  EEPROM   |
      |    Y2|--------------------------|  O--| \       |    |   |           |
  8 o-|A2    |                +-------+ |_/   |  O-----------|-->|22 /OE     |
  7 o-|A1  Y4|--------------->|EN   Y7|-----o-|_/       |    |   |           |
  6 o-|A0  Y3|----+    +5-----|RST    |     |   180 ohm |    |   |           |
      |    Y0|-+  |           |     Y6|-----|---/VVV\---|----|---|1 A14(NC)  |
      |  /CS3| |  |           | 259 Y5|-----|-----------|----+   |           |
      +------+ |  |           |     Y4|-----|-----------|------->|2 A12(NC)  |
            |  |  |           |     Y3|-----|-----------+        |           |
  5 o--->---|--|--|--------o--|D    Y2|-----|------------------->|21 A10     |
  4 o--->---|--|--|------o-|--|A2   Y1|-----|------------------->|24 A9      |
  3 o--->---|--|--|----o-|-|--|A1   Y0|-----|------------------->|25 A8      |
  2 o--->---|--|--|--o-|-|-|--|A0     |     |                    |           |
            |  |  |  | | | |  +-------+     |      +5------------|28 +5V(NC) |
            |  |  |  | | | |                |                    |           |
            |  |  |  | | | |  +-------+     |                    |           |
            |  |  |  | | | |  |     Y7|-----|------------o------>|3  A7      |
            |  |  +---------->|EN     |-----|-----------o|------>|4  A6      |
            |  |     | | | |  |       |-----|----------o||------>|5  A5      |
            |  |     | | | |  | 259   |-----|---------o|||------>|6  A4      |
            |  |     | | | |  |       |-----|--------o||||------>|7  A3      |
            |  |     | | | |  |       |-----|-------o|||||------>|8  A2      |
            |  |     | | | +--|D      |-----|------o||||||------>|9  A1      |
            |  |     | | +----|A2   Y0|-----|-----o|||||||------>|10 A0      |
            |  |     | +------|A1     |     |     ||||||||       |           |
            |  |     +--------|A0  RST|     |     ||||||||       | ZIF28     |
            |  |              +-------+     |   +------------+   | socket    |
            |  |                    |       |   |   data in  |   |  for      |
            |  |                   +5       +-->|/OE         |   | EEPROM    |
            |  |                                |     574    |   |           |
            |  +------------------------------->|CLK         |   |           |
            +----+                              |   data out |   |           |
                 |                              +------------+   |           |
                 |              +------------+     ||||||||      |           |
  9 o-------------------------->| SEL        |     ||||||||      |           |
                 |              |          B3|<----|||||||o------|19 D7      |
 11 o---<-----------------------|Y3        B2|<----||||||o-------|18 D6      |
 12 o---<-----------------------|Y2        B1|<----|||||o--------|17 D5      |
 13 o---<-----------------------|Y1  157   B0|<----||||o---------|16 D4      |
 15 o---<-----------------------|Y0        A3|<----|||o----------|15 D3      |
                 |              |          A2|<----||o--- data---|13 D2      |
                 |              |          A1|<----|o---- bus ---|12 D1      |
                 |       GND----|/OE       A0|<----o-------------|11 D0      |
  +5--o--+       |              +------------+                   |           |
      |  |  __   o---------------------------------------------->|20 /CE   14|
    100K +-|  \  |  __                                           +---------+-+
  sw1 |    |   O-o-|  \ 1/2 74HCT132                                       |
  o-->o----|__/    |   O---390ohm--+                                       |
  |   |          +-|__/            |                                  GND -+
  |  --- 1uF     |                LED
  |  ---     +5--+                 |
  |   |                            |
  +---o----------------------------o- GND

Notes:

1. Pin numbers on the left margin are for DB25 parallel port.
2. A 24-pin chip (e.g. 2816) must be low-justified in the 28-pin ZIF socket.
3. Pin numbers in the right box are for the ZIF-28 socket, not the IC.
4. The signal labels inside the ZIF-28 socket box are for 28-pin EEPROMs
   (they are given in parentheses for 24-pin EEPROMs).
5. J1 and J2 are single-row 3-pin headers for jumpers (or use a DPDT switch).
6. For 28-pin EEPROMs, jumper the right two pins of both J1 and J2.
7. For 24-pin EEPROMs, jumper the left two pins of both J1 and J2.
8. The SPST switch sw1 needs to be open to enable operation of the programmer.
9. Please refer to the file pinouts.txt for full pinouts of the ICs used.

Abhijit Dasgupta
[email protected]