Skip to the content
PCBKitNew board
2 layersRomprogrammer, the printed circuit board in 3D

Open Source Flash/EEPROM programmer

Copper layers
2
Thickness
1.6 mm
Parts
5
Nets
57
Pads
110
Tracks, vias
233, 0
Pours
1
Routed
Yes
KiCad
KiCad 4
Created
16 Jan 2019
Updated
4 May 2017

Overview

Romprogrammer is an open-source printed circuit board by ashllay, from the ashllay/romprogrammer repository on GitHub. It is a 2-layer board with 5 parts on 57 nets, routed with 233 tracks and 0 vias.

It is built around the 74HC595. It belongs with the interfaces and adapters boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

1

README

README.md

romprogrammer

Open Source Flash/EEPROM programmer

This is an open source programmer for 8 bit-wide parallel Flash/EEPROM chips. So far I've only tested it with (and hardcoded the software for) 2MBit (256Kx8) JEDEC compatible Flash chips (and designed the board layout accordingly).

Larger ROMs would require a redesign of the board, smaller ROMs require an adapter for the pinout.

The board uses an Arduino Nano onto which the firmware is flashed. Then you can read and write your PROMs using the command line tool (which should work on all POSIX systems, but I only tested on Debian Linux).

The board layout is single sided and uses relatively wide clearances and traces - ideal for DIY etching :)

Schematic and Layout

Schematic and layout were made in KiCad EDA. You can use that to export to Gerber or PDF, whatever you prefer for you etching (or what you need for your professional board manufacturing service).

Building

Hardware

Parts
  • Whatever PCB material you want to use
  • 3x 74HC595 serial in, parallel out shift registers (Dual Inline Package)
  • 1x 32 Pin JEDEC DIL chip socket (ZIF, if you want to make your life easier)
  • 2x 15 Pin female pin headers (for the Arduino Nano)
  • 1x Arduino Nano
  • 1x 100nF ceramic capacitor, through hole
  • a few centimeters of insulated jumper wire

The hardware is designed to be easily DIY etched. It only uses a single layer (+ a few jumper wires). The jumper wires are indicated on the front copper layer. You should also add a 100nF ceramic cap between pins 16 and 32 of the ROM socket to stabilize its power supply.

Software

The software is split into two parts, the firmware for the ATMega328P (the µC on the Arduino Nano) and the Linux command line tool.

Firmware

The firmware requires gcc-avr and avr-libc. The Makefile also contains a rule for writing the firmware to the Arduino using avrdude. (Using an AVRISPmk2, if you want to use the built-in bootloader of the Arduino, you'll have to adapt the Makefile accordingly).

Just build the software in the firmware directory using make, flash it using make flash.

CLI

The Linux command line tool is compiled using CMake, goto the cli directory, create a build directory, cd into it, run cmake, then make:

text
mkdir build
cd build
cmake ..
make

Usage

Basic Usage and Tests

The command line interface is relatively easy to use, because it doesn't offer many functions (yet). A first check if building has worked and communication between the host and the programmer is working, can be performed by using the ping command:

text
romprg /dev/ttyUSB0 ping

(You'll require read/write access to the USB serial port, usually by adding your user account to the dialout group).

This should tell you some information about the firmware and indicate that communication is working.

Next, you should verify that your PROM chip is detected correctly by using the id command:

text
romprg /dev/ttyUSB0 id

This will use the JEDEC identification system to query the vendor and device ID of your ROM chip, like this:

text
EEPROM chip identification: manufacturer=0xBF, device=0xB6

These should match the IDs noted in your EEPROM's device datasheet.

Erasing

You can erase the whole chip or individual sectors using the erase command:

text
romprg /dev/ttyUSB0 erase chip

to erase the whole chip, or

text
romprg /dev/ttyUSB0 erase <startaddr> <endaddr>

to erase individual sectors. Note that the software only supports 4KByte sectors right now (the most common sector size in Flash chips). endaddr must be the address of the byte after the last byte to be erased. startaddr and endaddr must be sector aligned.

Writing

After erasing, you can write data to the chip by using the write command:

text
romprg /dev/ttyUSB0 write <startaddr> <inputfile>

At the moment only flat binary files are supported (i.e. the file content will be written verbatim to the flash). startaddr need not be sector aligned. startaddr + the size of inputfile must be smaller than the chip size.

Reading

You may also read back data on the chip using the read command:

text
romprg /dev/ttyUSB0 read <startaddr> <endaddr> <outfile>

endaddr must be greater than startaddr and indicates the address of the byte after the last one to be read. At the moment only flat binary files are supported, i.e. the ROM content will be copied verbatim into outfile. outfile will also be overwritten without asking you for permission, so make sure you know what you're doing ;-)

Verifying

There are two way to verify the contents of the ROM: the verify command, which reads a section of the ROM and compares it to an input file, and the crc command, which returns the CRC16 of a given ROM section.

text
romprg /dev/ttyUSB0 verify <startaddr> <endaddr> <infile>

Arguments are the same as for the read command (except the file is read instead of written).

text
romprg /dev/ttyUSB0 crc <startaddr> <endaddr>

Here, startaddr and endaddr work the same way as in the other commands.

License

Copyright (c) 2017 Florian Keßeler

The whole software and hardware is released under the terms of the GNU General Public License version 2.

Parts

5
QtyValueFootprintReferences
374HC595dip_sockets:DIP-16__300U2, U3, U4
1ARDUINO_NANO_V3arduinonano:ARDUINO_NANO_V3U1
1SST39SF020dip_sockets:DIP-32__600U5

Questions

What parts does the Romprogrammer use?

5 parts, built around the 74HC595. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Romprogrammer KiCad files?

From the ashllay/romprogrammer repository on GitHub, at the commit this page was made from: the board is board/romprogrammer.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Romprogrammer design in my own project?

Its repository states no licence, so its author keeps all rights: ask ashllay before reusing the design.

Similar boards

  • 2 layers45.7 × 31.8 mmLEDx16 board, the printed circuit board in 3D

    LEDx16 board

    tardate/LittleArduinoProjects

    a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another!

    36 parts803MIT
  • 2 layers228.6 × 100 mmMongus48, the printed circuit board in 3D

    Mongus48

    ChrisChrisLoLo/beyblock20

    The magnetic, modular, 20-key macropad that can join together to form an ortholinear board

    124 parts335GPL-3.0
  • 2 layers245.1 × 160 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-64x4-Home-Computer

    My DIY TTL home computer with VGA and PS/2 and 4x the processing power of a Commodore C64 or Apple II.

    139 parts326
  • 2 layers100 × 95.1 mmProtoboard-6x4-breakout, the printed circuit board in 3D

    Protoboard-6x4-breakout

    electroniceel/protoboard

    Advanced protoboard layout with 1.27mm pitch for smd parts

    4,745 parts311CC-BY-4.0
  • 4 layers140 × 100 mmDc usv, the printed circuit board in 3D

    Dc usv

    TobleMiner/DC-UPS

    A small DC UPS, designed to keep small appliances like consumer network equipment running during power outages

    351 parts223CERN-OHL-P-2.0
  • 2 layers100.5 × 218.3 mmTraktorino, the printed circuit board in 3D

    Traktorino

    silveirago/traktorino

    The open-source DIY MIDI Controller for DJs.

    96 parts220
  • 2 layers287.8 × 126.7 mmNoName, the printed circuit board in 3D

    NoName

    AlaaSaadAbdo/battoota

    Keyboards

    267 parts188
  • 2 layers100 × 100 mmTommyPROM32-595, the printed circuit board in 3D

    TommyPROM32-595

    TomNisbet/TommyPROM

    Simple Arduino-based EEPROM programmer

    36 parts187