(M)  s i s t e m a   o p e r a c i o n a l   m a g n u x   l i n u x ~/ · documentação · suporte · sobre

  Next Previous Contents

5. Building EEPROM Burner

5.1 What is this ?

(Note: This chapter is written by Abhijit Dasgupta. Abhijit's email: takdoom@yahoo.com

The name of this project is EEP and it can be obtained from:

Please do not use the old URL for EEP anymore.)

EEP is an open hardware design (you are free to copy, use, and modify the hardware design) EEPROM burner for 24-pin and 28-pin 5-volt EEPROMs. There are various designs available, but my main goal was to have something which

  • is easy to build and uses only the most commonly available parts,
  • is cheap, and
  • is controlled by Linux.
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).

A photo of the burner is at http://homepages.go.com/~abhijit_dasgupta/eep/eeprom-burner.jpg and a PostScript schematic diagram is at http://homepages.go.com/~abhijit_dasgupta/eep/schematic.ps.

5.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:

  • 24-pin 2816/28C16, 2048 bytes (16 kilobits)
  • 28-pin 2817/28C17, 2048 bytes (16 kilobits)
  • 28-pin 2864/28C64, 8192 bytes (64 kilobits)
  • 28-pin 28256/28C256, 32768 bytes (256 kilobits)
Various vendors manufacture these EEPROMs. Some are: Microchip, Atmel, Xicor, Catalyst, and STM.

5.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).

5.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 COPYING/LICENSE below.

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.

5.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.

5.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).

5.7 Parts List

  • ICs: 74HCT123, 74HCT132, 74HCT138, 74HCT157, 74HCT574 (1 ea), and 2 74HCT259s.
  • Resistors: 100K, 10K, 1K, 180 ohms, and 390 ohms (1 ea).
  • Capacitors: 100pF, 1uF, (1 ea) and 3 0.1uF power-bus bypass capacitors.
  • Misc: 1 LED, 1 SPST switch, 25-conductor ribbon cable with DB25 male connector, 28 pin ZIF socket (small breadboard can be used instead), header pins for jumpering.

5.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

5.9 How to build the software

Download the software http://metalab.unc.edu/pub/Linux/apps/circuits/EEP-0.2.tar.gz and unpack it. Then cd to the src directory and type `make'.

5.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

5.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.
3. A 24-pin chip (e.g. 2816) must be low-justified in the 28-pin ZIF socket.
2. Pin numbers in the right box are for the ZIF-28 socket, not the IC.
7. The signal labels inside the ZIF-28 socket box are for 28-pin EEPROMs
   (they are given in parentheses for 24-pin EEPROMs).
4. J1 and J2 are single-row 3-pin headers for jumpers (or use a DPDT switch).
5. For 28-pin EEPROMs, jumper the right two pins of both J1 and J2.
6. 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
takdoom@yahoo.com


Next Previous Contents