From 195f94f9a011f3336e14504cf7c195f6c0aef22e Mon Sep 17 00:00:00 2001 From: Tom Nisbet Date: Thu, 22 Dec 2022 13:11:10 -0500 Subject: [PATCH] Add W27C512 --- TommyPROM/PromDevice27.cpp | 11 +++++++++-- TommyPROM/TommyPROM.ino | 3 ++- docs/prom-families.md | 19 +++++++++++++------ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/TommyPROM/PromDevice27.cpp b/TommyPROM/PromDevice27.cpp index 0d638cd..ae10394 100644 --- a/TommyPROM/PromDevice27.cpp +++ b/TommyPROM/PromDevice27.cpp @@ -93,6 +93,7 @@ bool PromDevice27::burnByte(byte value, uint32_t address) // Burn a byte to the chip and verify that it was written. +// // This uses a dedicated WE or PGM chip that operates on TTL levels and is active LOW. // Overwrite burning is supported. bool PromDevice27::burnByteWE(byte value, uint32_t address) @@ -140,10 +141,16 @@ bool PromDevice27::burnByteWE(byte value, uint32_t address) // Burn a byte to the chip and verify that it was written. +// // This uses an active LOW program pulse on the CE line and a verify operation with CE // HIGH. Overwrite is not supported, but could be added is a chip is found that needs it. -// Chips that use this mode require a programming voltage on the PGM pin and possibly on -// other pins as well. +// Chips that use this mode require a programming voltage on the PGM or VPP pin and +// possibly on other pins as well The above applies to the W27C257 EEPROM. The W27C512 +// is a bit more difficult because it does not have a dedicated VPP or PGM pin. Instead, +// the programming voltage is applied to OE to put the chip in programming mode and OE is +// then switched LOW for the verify operation. Because the voltage switch would require +// additional hardware, this code does not support verify-after-write for the W27C512 chip +// and will instead just do a single write cycle. // // VCC may also have a non-standard voltage in program mode. Be sure to separate the // PROM's VCC line from system VCC if a non-standard voltage is used. diff --git a/TommyPROM/TommyPROM.ino b/TommyPROM/TommyPROM.ino index ba9c782..0c27101 100644 --- a/TommyPROM/TommyPROM.ino +++ b/TommyPROM/TommyPROM.ino @@ -49,7 +49,8 @@ PromDevice28C prom(32 * 1024L, 64, 10, true); //PromDevice27 prom(32 * 1024L, E27C_PGM_WE, 1000L, 25, 3); // 27C256 with SEEQ intelligent programming //PromDevice27 prom(2 * 1024L, E27C_PGM_WE, 50000L, 1, 0); // 2716 with single 50ms write //PromDevice27 prom(512 * 1024L, E27C_PGM_WE, 100L, 11, 0); // 27C040 with Atmel rapid programming -//PromDevice27 prom(32 * 1024L, E27C_PGM_CE, 100L, 25, 0); // 27C257/27E257 with 100uS program pulse on CE +//PromDevice27 prom(32 * 1024L, E27C_PGM_CE, 100L, 25, 0); // W27C257/W27E257 with 100uS program pulse on CE +//PromDevice27 prom(64 * 1024L, E27C_PGM_CE, 100L, 1, 0, false); // W27C512 with single 100uS program pulse on CE, no verify PromDevice27 prom(256 * 1024L, E27C_PGM_WE, 20L, 1, 0, false); // SST27SF020 with single 20us write, no verify #elif defined(PROM_IS_SST39SF) diff --git a/docs/prom-families.md b/docs/prom-families.md index d52a63f..099f90d 100644 --- a/docs/prom-families.md +++ b/docs/prom-families.md @@ -163,7 +163,7 @@ The 8755 build of TommyPROM also has a circuit to control the 25V programming pu |SST39SF040|Microchip |Flash |SST39SF|All SST39SF0x0 supported| |SST28SF040|SST |Flash |SST39SF|All SST28SF0x0 supported| |SST27SF020|SST |Flash |27 |12V continuous for pgm/erase| -|WE27C257 |Winbond |EEPROM |27 |Continual 12V or 14V for program/erase| +|W27C257 |Winbond |EEPROM |27 |Continual 12V or 14V for program/erase| |AT29C010 |Atmel |Flash |28C |Only with 128 byte or less sector size| |8755A |Intel |EPROM |8755A |Requires 25V pulses to program| @@ -208,21 +208,27 @@ the newer 28C EEPROMs, these chips do not automatically erase before writing to location. Instead, the entire chip is erased by applying 12V to _VPP_ and _A9_ and then pulsing _WE_. -#### 27C257 +#### W27C257 and W27C512 -The Winbond WE27C257 and WE27E257 appear to be identical 32Kx8 EEPROMs. The 27C version -has been tested. +The Winbond W27C257 and W27E257 appear to be identical 32Kx8 EEPROMs. The 27C version +has been tested. The Winbond W27C512 is a 64Kx8 EEPROM with no dedicated _VPP_ pin. -These EEPROMs have a _VPP_ pin that needs a constant 12V during programming. Unlike the +The 257 EEPROMs have a _VPP_ pin that needs a constant 12V during programming. Unlike the newer 28C EEPROMs, these chips do not automatically erase before writing to a location. Instead, the entire chip is erased by applying 14V to _VPP_ and _A9_ and then pulsing _CE_. +Unlike the 257 chips, the W27C512 does not have a dedicated pin for the programming +voltage and instead uses the OE pin to place the chip in programming mode. The verify +operation requires that the OE pin be switched to _LOW_ and there is no hardware support +for this, so the current code supports the 512 chip by doing a single write cycle with no +verify. + Because the chips use a constant high voltage for programming instead of a pulse, an external power supply and two diodes can be used to supply either 5V or 12V to the pins for programming and erasing. -Note that the WE27x257 chip are almost a drop-in replacement for the 28C256. The _WE_, +Note that the W27x257 chip are almost a drop-in replacement for the 28C256. The _WE_, _VPP_, and _A14_ pins are the only differences. For reading, the _VPP_ pin should be connected to 5V. @@ -241,3 +247,4 @@ for chips with the 256 byte buffer. |Model |Manufacturer |Type |Module |Notes| |:--- |:--- |:--- |:--- |:--- | |M27C4001 |ST Micro |EEPROM | |VCC=6.5V, VPP=12.75V to pgm| +|W27C512 |Winbond |EEPROM |27 |Continual 12V or 14V for program/erase,VPP on OE|