Next Previous Contents

5. Building EEPROM Burner

5.1 What is this ?

This chapter is written by Abhijit Dasgupta and is reproduced here from http://www.nnaf.net/~abhijit/eep. Abhijit's email : abhijit@ans.net

A photo of the burner is at - http://www.nnaf.net/~abhijit/pictures/eeprom-burner.jpg

This is an eeprom burner for the 2816/2864 type of eeproms. There are various designs available, but the main goal was to have something which

This one uses a handful of 74HCTxx logic chips all available at the local Radio Shack store! It uses the PC parallel port interface, and Abhijit wrote the driver code for Linux only, but it should be easy to modify it for other PC operating systems.

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

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

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.

5.3 Parts List

5.4 Usage

Download the software from http://www.nnaf.net/~abhijit/eep/eeprom.tar.gz. To build the software, just cd to the src directory and type `make';


readrom
-------
readrom will read a specified number of bytes from a 2816/2864 eeprom
starting at a given offset, and send it to the standard output in
either binary (raw) or ascii-hex listing format.

Usage:

    readrom -b|-t offset size

where

    -b            output binary (raw) bytes
    -t            output text (ascii-hex) listing
    offset        start address of eeprom, 0..8191
    size          number of bytes to output, 0..8192

Examples:

# read the contents of a 2864 in binary (raw) form and save it in a file:
readrom -b 0 8192 > contents.bin

# list 80 bytes starting at offset 32:
readrom -t 32 80


writerom
--------

writerom will read a given number of bytes from the standard input and
write them into a 2816/2864 eeprom starting at a specified offset.
writerom verifies the eeprom byte-by-byte as it writes into it.

Usage:

    writerom offset size

where

    offset        start address of eeprom, 0..8191
    size          number of bytes to output, 0..8192

Example:

# Write 8192 bytes from the file ne.lzrom into the eeprom:
writerom 0 8192 < ne.lzrom

5.5 Schematic Diagram

The schematic is in ascii, but a PostScript version which looks better is available from http://www.nnaf.net/~abhijit/eep/eeprom/schematic.ps


                       +-------+
              +5-------|RST    |               +5---o o o J1     +-----------+
              +5--o----|/CLR1  |         10K          |          |           |
                  |    |       |-----o--/VVV\-- +5    +----------|26 +5(NC)  |
      +------+    |    |1/2 123|     |              +----------->|27 NC(/WE) |
 16 o-|/CS2  |    |    |       |--||-+              | +--------->|23 /WE(A11)|
      |   CS1|----o----|B1     | 100pF              | |          |           |
      |      |         |    /Q1|---------->---------o o o J2     |  ZIF28    |
      |    Y1|---------|/A1    |                        |        |  socket   |
      | 138  |         +-------+         _ 1/2 74HCT132 |        |   for     |
      |      |                     +5 --| \   __        |        | 2816(2864)|
      |    Y2|--------------------------|  O--| \       |        |           |
  8 o-|A2    |                +-------+ |_/   |  O-------------->|/OE        |
  7 o-|A1  Y4|--------------->|EN   Y7|-----o-|_/       |        |           |
  6 o-|A0  Y3|----+    +5-----|RST    |     |           |        |           |
      |    Y0|-+  |           |     Y6|--+  |           |        |           |
      |  /CS3| |  |           | 259   |  |  |           |        |           |
      +------+ |  |           |     Y4|--|--|-----------|------->|2 NC(A12)  |
            |  |  |           |     Y3|--|--|-----------+        |           |
  5 o--->---|--|--|--------o--|D    Y2|--|--|------------------->|A10        |
  4 o--->---|--|--|------o-|--|A2   Y1|--|--|------------------->|A9         |
  3 o--->---|--|--|----o-|-|--|A1   Y0|--|--|------------------->|A8         |
  2 o--->---|--|--|--o-|-|-|--|A0     |  |  |                    |           |
            |  |  |  | | | |  +-------+  |  |      +5------------|28 NC(+5)  |
            |  |  |  | | | |             |  |      +5----/VVV\---|1 NC(RDY)  |
            |  |  |  | | | |  +-------+  |  |             1K     |           |
            |  |  |  | | | |  |     Y7|--|--|------------o------>|A7         |
            |  |  +---------->|EN     |--|--|-----------o|------>|           |
            |  |     | | | |  |       |--|--|----------o||------>|           |
            |  |     | | | |  | 259   |--|--|---------o|||------>|           |
            |  |     | | | |  |       |--|--|--------o||||------>|           |
            |  |     | | | |  |       |--|--|-------o|||||------>|           |
            |  |     | | | +--|D      |--|--|------o||||||------>|           |
            |  |     | | +----|A2   Y0|--|--|-----o|||||||------>|A0         |
            |  |     | +------|A1     |  |  |     ||||||||       |           |
            |  |     +--------|A0  RST|  |  |     ||||||||       | ZIF28     |
            |  |              +-------+  |  |   +------------+   |  for      |
            |  |                    |    |  |   |   data in  |   | 2816/64   |
            |  |                   +5    |  +-->|/OE         |   |           |
            |  |                         |      |     574    |   |           |
            |  +------------------------------->|CLK         |   |           |
            |                            |      |   data out |   |           |
            |                            V      +------------+   |           |
            +----+              +------------+     ||||||||      |           |
                 |              |       SEL  |     ||||||||      |           |
                 |              |          B3|<----|||||||o------|D7         |
 11 o---<-----------------------|Y3        B2|<----||||||o-------|           |
 12 o---<-----------------------|Y2        B1|<----|||||o--------|           |
 13 o---<-----------------------|Y1  157   B0|<----||||o---------|           |
 15 o---<-----------------------|Y0        A3|<----|||o----------|           |
                 |              |          A2|<----||o--- data---|           |
                 |              |          A1|<----|o---- bus ---|           |
                 |       GND----|/OE       A0|<----o-------------|D0         |
  +5--o--+       |              +------------+                   |           |
      |  |  __   o---------------------------------------------->|/CE        |
    100K +-|  \  |  __                                           +-----------+
  sw1 |    |   O-o-|  \ 1/2 74HCT132
  o-->o----|__/    |   O---390ohm--+
  |   |          +-|__/            |
  |  --- 1uF     |                LED
  |  ---     +5--+                 |
  |   |                            |
  +---o----------------------------o- GND

Notes:

  1. Pin numbers on the left margin are for DB25 parallel port.
  2. Pin numbers in the right box are for the _ZIF28 socket_, not the IC.
  3. A 2816 should be low-justified in the ZIF28 socket.
  4. J1 and J2 are single-row 3-pin jumpers. For both jumpers, the left two pins should be jumpered for a 2816, the right two for a 2864.
  5. The signal labels for a 2864 (if different from 2816) in the ZIF28 socket box are given in parentheses. E.g. pin 23 of the ZIF 28 is labeled "23 /WE(A11)", so it is /WE for a 2816, and A11 for a 2864.
  6. Sw1 needs to be open to enable operation of the programmer.

Next Previous Contents