flashchips: Add some 25LC series EEPROMs
Change-Id: Iff02282cc1b9e76ce681467fb4b228a7f078b06f
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/316
Reviewed-by: ftr4 ftr4 <ftr4@sharklasers.com>
diff --git a/flashchips.c b/flashchips.c
index 8bbee16..76e32b5 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -12237,6 +12237,222 @@
.finish_access = spi_finish_io,
},
+ {
+ .vendor = "Microchip",
+ .name = "25LC080",
+ .bustype = BUS_SPI,
+ .total_size = 1,
+ .page_size = 16,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_NO_ERASE | FEATURE_ERASED_ZERO,
+ .tested = TEST_UNTESTED,
+ .spi_cmd_set = SPI25_EEPROM,
+ .probe = probe_noop,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 1024, 1} },
+ .block_erase = spi_block_erase_emulation,
+ }
+ },
+
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .gran = write_gran_1bit,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2500, 5500},
+ },
+
+ {
+ .vendor = "Microchip",
+ .name = "25LC016",
+ .bustype = BUS_SPI,
+ .total_size = 2,
+ .page_size = 16,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_NO_ERASE | FEATURE_ERASED_ZERO,
+ .tested = TEST_UNTESTED,
+ .spi_cmd_set = SPI25_EEPROM,
+ .probe = probe_noop,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {2 * 1024, 1} },
+ .block_erase = spi_block_erase_emulation,
+ }
+ },
+
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .gran = write_gran_1bit,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2500, 5500},
+ },
+
+ {
+ .vendor = "Microchip",
+ .name = "25LC032",
+ .bustype = BUS_SPI,
+ .total_size = 4,
+ .page_size = 32,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_NO_ERASE | FEATURE_ERASED_ZERO,
+ .tested = TEST_UNTESTED,
+ .spi_cmd_set = SPI25_EEPROM,
+ .probe = probe_noop,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 1} },
+ .block_erase = spi_block_erase_emulation,
+ }
+ },
+
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .gran = write_gran_1bit,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2500, 5500},
+ },
+
+ {
+ .vendor = "Microchip",
+ .name = "25LC064",
+ .bustype = BUS_SPI,
+ .total_size = 8,
+ .page_size = 32,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_NO_ERASE | FEATURE_ERASED_ZERO,
+ .tested = TEST_UNTESTED,
+ .spi_cmd_set = SPI25_EEPROM,
+ .probe = probe_noop,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {8 * 1024, 1} },
+ .block_erase = spi_block_erase_emulation,
+ }
+ },
+
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .gran = write_gran_1bit,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2500, 5500},
+ },
+
+ {
+ .vendor = "Microchip",
+ .name = "25LC128",
+ .bustype = BUS_SPI,
+ .total_size = 16,
+ .page_size = 64,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_NO_ERASE | FEATURE_ERASED_ZERO,
+ .tested = TEST_UNTESTED,
+ .spi_cmd_set = SPI25_EEPROM,
+ .probe = probe_noop,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {16 * 1024, 1} },
+ .block_erase = spi_block_erase_emulation,
+ }
+ },
+
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .gran = write_gran_1bit,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2500, 5500},
+ },
+
+ {
+ .vendor = "Microchip",
+ .name = "25LC256",
+ .bustype = BUS_SPI,
+ .total_size = 32,
+ .page_size = 64,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_NO_ERASE | FEATURE_ERASED_ZERO,
+ .tested = TEST_UNTESTED,
+ .spi_cmd_set = SPI25_EEPROM,
+ .probe = probe_noop,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {32 * 1024, 1} },
+ .block_erase = spi_block_erase_emulation,
+ }
+ },
+
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .gran = write_gran_1bit,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2500, 5500},
+ },
+
+ {
+ .vendor = "Microchip",
+ .name = "25LC512",
+ .bustype = BUS_SPI,
+ .total_size = 64,
+ .page_size = 128,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_NO_ERASE | FEATURE_ERASED_ZERO,
+ .tested = TEST_UNTESTED,
+ .spi_cmd_set = SPI25_EEPROM,
+ .probe = probe_noop,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_emulation,
+ }
+ },
+
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .gran = write_gran_1bit,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2500, 5500},
+ },
+
+ {
+ .vendor = "Microchip",
+ .name = "25LC1024",
+ .bustype = BUS_SPI,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_NO_ERASE | FEATURE_ERASED_ZERO,
+ .tested = TEST_UNTESTED,
+ .spi_cmd_set = SPI25_EEPROM,
+ .probe = probe_noop,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_emulation,
+ }
+ },
+
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .gran = write_gran_1bit,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2500, 5500},
+ },
+
/* The ST M25P05 is a bit of a problem. It has the same ID as the
* ST M25P05-A in RES mode, but supports only 128 byte writes instead
* of 256 byte writes. We rely heavily on the fact that probe_spi_res1