Skip to content

Latest commit

 

History

History
138 lines (99 loc) · 4.56 KB

README.md

File metadata and controls

138 lines (99 loc) · 4.56 KB

Breadboard EEPROM Programmer

Introduction

This subproject is an EEPROM Programmer on a breadboard using:

  • a Sparkfun Arduino Pro Micro
  • two SN74HC595 Serial-In Parallel-Out (SIPO) Shift Registers, to minimize the pin needed on the Arduino.
  • a AT28C256 32K x8 Paged Parallel EEPROM

Schematics

How to use

Command line interface

Use ./eeprom.py as a command line interface:

usage: eeprom.py [-h] [-p PORT] {flash,save,dump,erase} ...

EEPROM Programmer CLI

positional arguments:
  {flash,save,dump,erase}
    flash               Flash a binary file to EEPROM
    save                Save EEPROM to binary file
    dump                Dump EEPROM as text (hex/ascii)
    erase               Erase EEPROM

optional arguments:
  -h, --help            show this help message and exit
  -p PORT, --port PORT  USB port to use

Written by @adumont

Dump 256 byte pages as text (hexa/ascii)

usage: eeprom.py dump [-h] [-a ADDR] [-n PAGES] [-o OFFSET]

optional arguments:
  -h, --help            show this help message and exit
  -a ADDR, --addr ADDR  Address (hexadecimal), default: 0000
  -n PAGES, --pages PAGES
                        Number of 256B pages to dump (decimal)
  -o OFFSET, --offset OFFSET
                        Offset to show addresses (hexadecimal), default: 8000

./eeprom.py dump will dump PAGES pages of 256 bytes starting at address ADDR (in hex). If ADDR isn't a multiple of 256, it will dump the 256 bytes page aligned around ADDR. If offset is specified, the addresses showned will be offset by offset (in hex).

$ ./eeprom.py dump
Connected to programmer on port: /dev/ttyACM0

00008000: 58d8 a9ff 8d03 60a9 aa85 00a9 ffa5 008d  X.....`.........
00008010: 0160 4c12 8040 daba 48e8 e8bd 0001 2910  .`L..@..H.....).
00008020: d003 68fa 404c 2580 a900 8508 a980 8509  ..h.@L%.........
00008030: a900 850a a902 850b a2ff a9ff 8510 a000  ................
00008040: e8f0 0db1 0891 0ac8 d0f6 e609 e60b d0f0  ................
00008050: e610 d0ef 6000 0000 0000 0000 0000 0000  ....`...........
[...]

Flash a binary file to EEPROM

usage: eeprom.py flash [-h] [-a ADDR] [-l LEN] file

positional arguments:
  file                  File to write to EEPROM

optional arguments:
  -h, --help            show this help message and exit
  -a ADDR, --addr ADDR  Address (hexadecimal), default: 0000
  -l LEN, --len LEN     Length (bytes, decimal), default: file size

./eeprom.py flash will flash the file FILE at address ADDR. It takes about 13s to flash 32KB.

Save EEPROM content to a binary file

usage: eeprom.py save [-h] [-a ADDR] [-l LEN] file

positional arguments:
  file                  File to save as

optional arguments:
  -h, --help            show this help message and exit
  -a ADDR, --addr ADDR  Address (hexadecimal), default: 0000
  -l LEN, --len LEN     Length (bytes, decimal)

./eeprom.py save will save LEN bytes (dec) from EEPROM starting at address ADDR (hex) to file FILE. It takes about 5.5s to download 16KB.

Erase EEPROM

usage: eeprom.py erase [-h] [-f FILL]

optional arguments:
  -h, --help            show this help message and exit
  -f FILL, --fill FILL  Fill byte (hexadecimal), default: ff

./eeprom.py erase will write FF (hex) to all the EEPROM. It takes about 13s to erase 32KB.

Credits

Here are some awesome projects from which I have taken inspiration and sometimes also some code as a starting point:

Datasheets

References