forked from Apple-2-HW/TommyPROM
Updated documentation for 3.0
This commit is contained in:
parent
fb877244c1
commit
9777edba29
@ -19,7 +19,7 @@
|
||||
#include "XModem.h"
|
||||
|
||||
|
||||
static const char * MY_VERSION = "2.8";
|
||||
static const char * MY_VERSION = "3.0";
|
||||
|
||||
|
||||
// Global status
|
||||
|
@ -19,10 +19,10 @@ The basic circuit is as follows:
|
||||
* Pins D2..D9 are wired to the data lines on the target PROM.
|
||||
* Pins A0..A2 are wired to the WE, CE, and OE control lines on the target PROM.
|
||||
* Pins A3..A5 control shift registers to produce the address lines.
|
||||
* Pins D10..D12 control A16..A18 for chips larger than 64K bytes.
|
||||
* Pins D10..D12 control A<sub>16</sub>..A<sub>18</sub> for chips larger than 64K bytes.
|
||||
|
||||
Note that the existing design uses 74LS164 shift registers, but another 8-bit parallel out
|
||||
shift register, like the 74LS595, could be used instead with some pin changes. See the
|
||||
shift register, like the 74LS595, can be used instead with some pin changes. See the
|
||||
[74LS595 Shift Registers](#74ls595-shift-registers) section below for details.
|
||||
|
||||
The two shift registers can produce a sixteen bit address, although the 28C256 only needs
|
||||
@ -35,10 +35,9 @@ A<sub>16</sub>..A<sub>18</sub>
|
||||
## 74LS595 Shift Registers
|
||||
|
||||
When using the [74LS595](images/TommyPROM-595.jpg) instead of the 74LS164, there is
|
||||
an additional output latch that
|
||||
is pulsed to put the contents of the shift register on the output lines. The code
|
||||
supports the 164s or the 595s by default. No code changes are needed to use either
|
||||
version of the shift register hardware.
|
||||
an additional output latch that is pulsed to put the contents of the shift register on the
|
||||
output lines. The code supports the 164s or the 595s by default. No code changes are
|
||||
needed to use either version of the shift register hardware.
|
||||
|
||||
The table below shows the connections when using either the 74LS164 or the 74LS595 for the
|
||||
address shift registers. USR refers to the Upper Shift Register
|
||||
|
BIN
docs/images/TommyPROM-nano-700.jpeg
Normal file
BIN
docs/images/TommyPROM-nano-700.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 103 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 903 KiB |
BIN
docs/images/TommyPROM-pcb -500.jpg
Normal file
BIN
docs/images/TommyPROM-pcb -500.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 122 KiB |
BIN
docs/images/TommyPROM-pcb.jpg
Normal file
BIN
docs/images/TommyPROM-pcb.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 995 KiB |
@ -11,41 +11,45 @@ This is a simple EEPROM programmer and reader that can be assembled using an Ard
|
||||
few additional parts. It has been successfully built using the Arduino UNO, Nano and
|
||||
Boarduino models.
|
||||
|
||||
The original code was specific to the 28C256 32Kx8 EEPROM, but it has been extended to also support Intel 8755A EPROMS and some 29C010 Flash.
|
||||
The original code was specific to the 28C256 32Kx8 EEPROM, but it has been extended to
|
||||
also support SST39SF flash, 27C EPROMs, 29C flash and the Intel 8755A EPROMS.
|
||||
|
||||
![TommyPROM Nano Hardware](images/TommyPROM-nano.jpg)
|
||||
|
||||
## Design
|
||||
|
||||
The 28C design can be used with other 5V EEPROMS as well. Many 5V chips, including UV
|
||||
EPROMs, such as the 2716, 2764, 27C2001 and 27C040, can be read, but not written, with the
|
||||
basic hardware. Some pin changes may be needed to get the signals to the correct pins on
|
||||
the device. See the [Extending the design](extending) page for details on suggested
|
||||
hardware and software changes needed to support new EPROM and EEPROM families.
|
||||
|
||||
The PROM-specific code is modular and can be easily adapted to support additional devices.
|
||||
There are currently drivers and hardware designs for 28C series EEPROMS and the Intel
|
||||
8755A EPROM.
|
||||
|
||||
Some 29C series chips, like the 29C010 can be written with the 28C hardware. The 29C
|
||||
series only differs from the 28C in that the 29C chips erase and write an entire sector at
|
||||
a time. The 29C010 and some 29C020 chips use a 128 byte sector, which matches the XModem
|
||||
buffer in the current code. Other 29C020s and all 29C040s use a 256 byte sector and
|
||||
cannot be written without code changes to buffer up an entire 256 byte block of data
|
||||
before writing.
|
||||
[![TommyPROM Nano Hardware](images/TommyPROM-nano-700.jpg)]((images/TommyPROM-nano.jpg)
|
||||
|
||||
Features include:
|
||||
* Simple hardware design that can be assembled on a breadboard.
|
||||
* ROM images transfers using XMODEM - no special host client needed.
|
||||
* Support for fast block EEPROM writes - a 32K EEPROM will program in just a few seconds.
|
||||
* Optimized code that supports the timing requirements needed to unlock the 28C series Software Protection Algorithm.
|
||||
* Modular software design to easily support other EEPROM and EPROM families.
|
||||
* Modular software design to easily support other EEPROM, flash, and EPROM families.
|
||||
* Hardware support for 19 address lines, allowing the use of chips as large as 512KB, like the SST39SF040 and 29C040.
|
||||
|
||||
The [hardware](hardware) page has descriptions of the hardware designs and links to schematics. The [software](software) page has class definitions and more information
|
||||
on the software design.
|
||||
## Design
|
||||
|
||||
The 28C hardware and software design can be used with [other 5V PROMS](prom-families) as
|
||||
well. Many 5V chips, including UV EPROMs such as the 2716, 2764, 27C2001 and 27C040, can
|
||||
be read, but not written, with the basic hardware. Some pin changes may be needed to get
|
||||
the signals to the correct pins on the device. See the [Extending the design](extending)
|
||||
page for details on suggested hardware and software changes needed to support new EPROM,
|
||||
flash, and EEPROM families.
|
||||
|
||||
The PROM-specific code is modular and can be easily adapted to support additional devices.
|
||||
There are currently drivers for 28C series EEPROMS, SST39SF flash, 27C EPROMs and the
|
||||
Intel 8755A EPROM.
|
||||
|
||||
Some 29C series chips, like the 29C010 can be written with the 28C hardware and driver.
|
||||
The 29C series only differs from the 28C in that the 29C chips erase and write an entire
|
||||
sector at a time. The 29C010 and some 29C020 chips use a 128 byte sector, which matches
|
||||
the XModem buffer in the current code. Other 29C020s and all 29C040s use a 256 byte
|
||||
sector and cannot be written without code changes to buffer up an entire 256 byte block of
|
||||
data before writing.
|
||||
|
||||
The [hardware](hardware) page has descriptions of the hardware designs and links to
|
||||
schematics. The [software](software) page has class definitions and more information on
|
||||
the software design.
|
||||
|
||||
The project was inspired by the
|
||||
[MEEPROMMER programmer](http://www.ichbinzustaendig.de/dev/meeprommer-en).
|
||||
[MEEPROMMER programmer](https://github.com/mkeller0815/MEEPROMMER).
|
||||
|
||||
## Compiling
|
||||
|
||||
@ -59,8 +63,12 @@ unlocking. To use different Arduino hardware, like the Micro, the board-specifi
|
||||
PromDevice.cpp and PromAddressDriver.cpp must be change to match the port mappings between
|
||||
the ATmega chip and the Arduino I/O pins.
|
||||
|
||||
To use the 8755A version of the code and matching hardware, uncomment PROM_IS_8755A and
|
||||
comment out the other PROM_IS_xx choices in Configure.h.
|
||||
Because the Arduino has limited code and RAM space available, only one PROM driver is
|
||||
compiled in at a time. To change drivers, uncomment the desired PROM_IS_xx line in
|
||||
Configure.h and comment out the other choices. The code to instantiate the driver is
|
||||
near the top in TommyPROM.ino. The change to Configure.h will automatically cause a
|
||||
driver to be installed, but it may be necessary to modify the parameters for a specific
|
||||
chip type.
|
||||
|
||||
## Operation
|
||||
![TommyPROM console screenshot](images/tommyprom-console.png)
|
||||
@ -118,7 +126,3 @@ Protection enabled. Use the UNLOCK command to disable this. See the
|
||||
Arduino pins that match the definitions in the code.
|
||||
* This repo contains a standalone program called HardwareVerify that allows low-level
|
||||
access to the address, data, and control lines through a menu-driven interface. See the [troubleshooting](troubleshooting) section for more tips.
|
||||
|
||||
## Further Work
|
||||
* [ ]Add a new PromDevice class for 27 series EPROMS.
|
||||
* [x] Additional error checking in the CmdLine code.
|
||||
|
145
docs/prom-families.md
Normal file
145
docs/prom-families.md
Normal file
@ -0,0 +1,145 @@
|
||||
---
|
||||
title: PROM Types
|
||||
description: "PROM types supported by TommyPROM - EPROM, EEPROM, Flash"
|
||||
has_children: false
|
||||
nav_order: 5
|
||||
---
|
||||
|
||||
TommyPROM can be used to read and write several different types of PROM chips. Due to
|
||||
differences in the technologies of these chips, some features of TommyPROM may work
|
||||
differently or may not be applicable at all. The standard code can read most types of
|
||||
PROM, even if there is no specific softare support for them.
|
||||
|
||||
|
||||
# PROM Types
|
||||
|
||||
## EPROM - Erasable Programmable Read-only Memory
|
||||
|
||||
EPROMs can be written once, but must then be erased by exposing them to UV light for
|
||||
several minutes. They are usually easily read by TommyPROM, but there is limited
|
||||
support for programming.
|
||||
|
||||
## EEPROM - Electrically Erasable Programmable Read-only Memory
|
||||
|
||||
EEPROMs are the easiest PROMs to use. They usually can be erased and reprogrammed
|
||||
electrically at the individual byte level. This makes them appear similar to a slower
|
||||
static RAM. All of the interactive features of TommyPROM work well with EEPROMs. Due
|
||||
to their complexity, EEPROMs typically come in smaller sizes than other technologies.
|
||||
The largest EEPROM in the 28C family is 32K bytes.
|
||||
|
||||
## Flash ROM
|
||||
|
||||
Flash is similar to EEPROM, in that it can be electrically erased and reprogrammed. Unlike
|
||||
EEPROMs, Flash cannot erase single bytes individually. Instead, the chip is arranged into
|
||||
memory blocks called sectors. The programmer can erase individual sectors or, sometimes,
|
||||
the entire chip. Some chip families require an explicit erase command and others initiate
|
||||
an erase at the start of a programming operation.
|
||||
|
||||
Most of the features of TommyPROM are supported for Flash, but some operations that would
|
||||
do multiple writes to the same sector work differently.
|
||||
|
||||
## OTP ROM - One-time Programmable ROM
|
||||
|
||||
One-time Programmable (OTP) ROM is written once, either at the factory or in the field.
|
||||
These chips cannot be erased and re-written, but it can be read by TommyPROM. Interesting
|
||||
trivia - some of the field-programmable OTPs are just EPROMs packaged without the erase
|
||||
window.
|
||||
|
||||
# Supported Chip Families
|
||||
|
||||
## 28C EEPROM
|
||||
|
||||
The 28C series EEPROMs, specifically the 28C256, are the original chips that TommyPROM supported. As a result, these have the best support, with all of the interactive features of the command line. In addition the basic read and write operations, there are also
|
||||
commands to enable and disable the
|
||||
[Software Data protection (SDP)](../28C256-notes) features of 28C chips. There is also
|
||||
support for the fast block write mode of these chips, allowing a 32KB chip to be
|
||||
programmed in just a few seconds.
|
||||
|
||||
## 27C EPROM
|
||||
|
||||
The 27C EPROMs use a variety of programming algorithms. Code exists for some of these,
|
||||
but very few of the chips have been tested.
|
||||
|
||||
Most, if not all, 27C series chips are not 5V only and require a higher voltage to program
|
||||
them. Some need the voltage constantly applied while programming and others use high
|
||||
voltage pulses for each byte. For constant voltage chips, it is probably easiest to just
|
||||
add an external power supply and manually assert the voltage before starting a write. For
|
||||
those with switched voltages, some elements of the 8755 hardware may be leveraged to build
|
||||
a version of the programer that supports these chips.
|
||||
|
||||
## Atmel SST39FS Flash
|
||||
|
||||
TommyPROM has a driver for Atmel SST39FS flash chips. This driver replaces the 28C driver at compile time. See configure.h to enable a different driver.
|
||||
|
||||
The SST39FS chips use fixed 2KB sectors that must be manually erased before a new program
|
||||
operation, but the code manages this transparently. Whenever a write is started to a new
|
||||
segment, the driver first initiates an erase of that sector. A second write to the same
|
||||
sector will not cause an erase, so is is possible to write to a segment multiple times
|
||||
with no additional steps as long as the writes are to different parts of the sector. For
|
||||
example, 256 bytes could be written to the start of a sector from one file and then 512
|
||||
bytes could be written to the end of the sector from another file.
|
||||
|
||||
Writing data that spans multiple sectors also works with no additional steps. When
|
||||
a sector boundary is crossed, the new sector is erased and set as the current sector.
|
||||
|
||||
The SST39FS driver supports a manual erase from the command line using the E command.
|
||||
This is only needed if data will be rewritten to the same location after a previous write
|
||||
to that sector.
|
||||
|
||||
## Misc Flash
|
||||
|
||||
**29C Series**
|
||||
|
||||
The 29C series flash chips are similar to the 28C EEPROMs, except they must erase an
|
||||
entire sector before programming new data. The start of a block write operation causes
|
||||
the target sector to be erased before the block is written. If the entire sector is not
|
||||
written in one operation, there is no way to write additional data to the sector because
|
||||
a new block write will erase the sector again.
|
||||
|
||||
The write algorithm for the 29C chips is similar to 28C, so it is possible to use that
|
||||
code to write these chips as well with some restrictions. All 29C010 and 29C020 chips
|
||||
that have been encountered use a sector size of either 64 bytes or 128 bytes. A single
|
||||
XModem packet holds 128 bytes of data, so these chips will program without issue.
|
||||
|
||||
The 28C040 chips from some manufacturers use a 256 byte sector. This will not currently
|
||||
work with TommyPROM, because each of the 128 byte XModem packets received will do its own
|
||||
block write. The first write will erase 256 bytes and then write data into the first half
|
||||
of the sector. The second write will then erase the data just written and then write 128
|
||||
bytes into the second half of the sector. To fix this, the code would need to be modified
|
||||
to keep 256 bytes of data from two packets before initiating a block write.
|
||||
|
||||
**28F Series**
|
||||
|
||||
The 28F series flash do not have sectors. The entire chip must be erased before writing
|
||||
new data. Data is written a byte at a time using a command register to control the
|
||||
programming. **These chips require a 12V programming voltage that must be present during
|
||||
the programming or erase operations**. TommyPROM does not currently support 28F chips,
|
||||
but it would not be difficult to write a driver. The default 28C driver will read 28F
|
||||
chips.
|
||||
|
||||
**29F Series**
|
||||
|
||||
The 29F series flash do not have sectors that must be explicitly erased before writing new
|
||||
data. Data is written a byte at a time using a command register to control the
|
||||
programming. TommyPROM does not currently support 29F chips, but it would not be
|
||||
difficult to write a driver. The default 28C driver will read 29F chips.
|
||||
|
||||
|
||||
## Intel 8755/8355 EPROM
|
||||
|
||||
TommyPROM has a driver for Intel 8755 EPROMs. This driver replaces the 28C driver at
|
||||
compile time. See configure.h to enable a different driver. This driver will also read
|
||||
Intel 8355 OTP EPROMs. Also note that the TommyPROM hardware for the 8755 is drastically
|
||||
different from the other versions.
|
||||
|
||||
The Intel 8755 is a peripheral chip designed for 8085 systems. It is a 40 pin device that
|
||||
contains a 2KB EPROM plus two general-purpose I/O ports. The 8355 is a one-time
|
||||
programmable version of the 8755. The 8755 requires a 25V programming pulse for each byte
|
||||
to be written.
|
||||
|
||||
A new hardware build was created to support the 8755 chips. Because the 8755 has a multiplexed data and address bus, the usual shift registers are not used for addressing.
|
||||
The chip only needs 8 connects that are shared for address and data, plus three dedicated
|
||||
address lines. The Arduino has enough pins to drive all of these directly, without the
|
||||
need for shift registers to create address lines.
|
||||
|
||||
The 8755 build of TommyPROM also has a circuit to control the 25V programming pulses.
|
Loading…
Reference in New Issue
Block a user