Skip to content

leokrebber/parallel_eprom_reader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arduino-based Parallel (E)EPROM Reader

This is a simple sketch + Python script for reading 32-pin EPROMs/EEPROMs with an Arduino Mega 2560. Use cases include dumping BIOS chips, firmware extraction, archival, etc.

It supports most DIP-32 EEPROMs and EPROMs (like the BIOS chips found in many i486/Pentium PCs).

Warning: Ensure your chip operates at 5V, as this reader will damage 3.3V chips!

Limitations:

  • This tool cannot write to chips, as EEPROMS generally require about 12V for writing and EPROMS need to be erased with UV light.
  • An Arduino UNO does not have enough pins without I/O expanders
  • Only tested on a Mega 2560, but may work with other boards

The datasheet for the SST29EE020 EEPROM is also included, which follows a common pinout.

Wiring

You will need an Arduino Mega 2560, a small breadboard and ~30 jumper wires. Below is a wiring diagram for a DIP-32 EPROM:

                   ╭─────── ROM pins ───────╮                   
                   │                        │                   
                   ▼   ╭──────╮  ╭──────╮   ▼                   
             ──── NC  ■│1     ╰──╯    32│■ VDD ──── +5V         
         D46 ──── A16 ■│2             31│■ WE# ──── +5V         
         D45 ──── A15 ■│3             30│■  NC ────             
         D42 ──── A12 ■│4             29│■ A14 ──── D44         
         D37 ──── A7  ■│5             28│■ A13 ──── D43         
         D36 ──── A6  ■│6             27│■  A8 ──── D38         
         D35 ──── A5  ■│7             26│■  A9 ──── D39         
         D34 ──── A4  ■│8    DIP-32   25│■ A11 ──── D41         
         D33 ──── A3  ■│9             24│■ OE# ──── D3          
         D32 ──── A2  ■│10            23│■ A10 ──── D40         
         D31 ──── A1  ■│11            22│■ CE# ──── D2          
         D30 ──── A0  ■│12            21│■ DQ7 ──── D29         
         D22 ──── DQ0 ■│13            20│■ DQ6 ──── D28         
         D23 ──── DQ1 ■│14            19│■ DQ5 ──── D27         
         D24 ──── DQ2 ■│15            18│■ DQ4 ──── D26         
         GND ──── VSS ■│16            17│■ DQ3 ──── D25         
          ▲            ╰────────────────╯            ▲          
          │                                          │          
          ╰────────────── Arduino pins ──────────────╯          

The WE (write enable) pin is active-low, meaning pulling it high will disable writing on EEPROM chips.

You can also run python dump.py --wiring or open wiring.txt to view the same wiring diagram.

Software Requirements

  • Python 3.x
  • PySerial
  • Arduino IDE
  • A computer running Linux, Windows, or macOS

Flashing the Arduino Sketch

Open parallel_eprom_reader.ino in Arduino IDE, select your board and upload the sketch.

Reading with dump.py

First, install PySerial with pip:

pip install pyserial

After wiring the chip and flashing the sketch, plug the Arduino into your computer and run the dump.py Python script:

python dump.py --chip-kilobytes <chip size in KB> --filename dump.bin --port <Arduino serial port>

You can list your computer's serial devices with the following utility:

python -m serial.tools.list_ports

Example for a 128KB EPROM/EEPROM on Linux:

python dump.py --chip-kilobytes 128 --filename bios.bin --port /dev/ttyACM0

The script should output something like:

Connecting to /dev/ttyACM0....
Requesting 131072 bytes from Arduino...
/ Reading...
Successfully saved 131072 bytes to bios.bin

The output file size should match the chip size (e.g. a 128KB file for a 128KB chip). If the output file is all 0xFF or 0x00, double-check wiring and control pins.

About

Arduino-based Parallel (E)EPROM Reader

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages