Rename Numonyx and ST (SGS/Thomson) chips to Micron
Micron acquired Numonyx and asked us to change the vendor names to
"Micron". For the chips clearly emerging from the former
manufacturers we (will) use "Micron/Numonyx/ST" and the original
name for the rest. Resorting the chip entries makes the diff
unreadable, hence the stand-alone commit.
Corresponding to flashrom svn r1703.
Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
diff --git a/flashchips.c b/flashchips.c
index 1b6a22e..a693290 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -4079,44 +4079,6 @@
{
.vendor = "Eon",
- .name = "EN25QH256",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25QH256,
- .total_size = 32768,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 512B total; enter 0x3A */
- /* QPI enable 0x38, disable 0xFF */
- /* EN4B: 0xB7, EX4B: 0xE9 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_BAD_REW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 32768 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 32768 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
.name = "EN25S10",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -6599,6 +6561,1051 @@
},
{
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P05-A",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P05A,
+ .total_size = 64,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ /* 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
+ * only is successful if RDID does not work.
+ */
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P05",
+ .bustype = BUS_SPI,
+ .manufacture_id = 0, /* Not used. */
+ .model_id = ST_M25P05_RES,
+ .total_size = 64,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res1,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_1, /* 128 */
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P10-A",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P10A,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PRE,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ /* The ST M25P10 has the same problem as the M25P05. */
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P10",
+ .bustype = BUS_SPI,
+ .manufacture_id = 0, /* Not used. */
+ .model_id = ST_M25P10_RES,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res1,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_1, /* 128 */
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST", /* Numonyx */
+ .name = "M25P20",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P20,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp1,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P20-old",
+ .bustype = BUS_SPI,
+ .manufacture_id = 0, /* Not used. */
+ .model_id = ST_M25P20_RES,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_res1,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp1,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST", /* Numonyx */
+ .name = "M25P40",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P40,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P40-old",
+ .bustype = BUS_SPI,
+ .manufacture_id = 0, /* Not used. */
+ .model_id = ST_M25P40_RES,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res1,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P80",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P80,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P16",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P16,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PR,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P32",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P32,
+ .total_size = 4096,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P64",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P64,
+ .total_size = 8192,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P128",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P128,
+ .total_size = 16384,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PE10",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PE10,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 32} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 2} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PE20",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PE20,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PE40",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PE40,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PE80",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PE80,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PE16",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PE16,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PX80",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PX80,
+ .total_size = 1024,
+ .page_size = 256,
+ /* OTP: 64B total; read 0x4B, write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers = {
+ {
+ .eraseblocks = { { 4 * 1024, 256 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PX16",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PX16,
+ .total_size = 2048,
+ .page_size = 256,
+ /* OTP: 64B total; read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 512 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PX32",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PX32,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 64B total; read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PRE,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 1024 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PX64",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PX64,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 64B total; read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PRE,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 2048 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M45PE10",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M45PE10,
+ .total_size = 128,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers = {
+ {
+ .eraseblocks = { {256, 512} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .eraseblocks = { {64 * 1024, 2} },
+ .block_erase = spi_block_erase_d8,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M45PE20",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M45PE20,
+ .total_size = 256,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers = {
+ {
+ .eraseblocks = { {256, 1024} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M45PE40",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M45PE40,
+ .total_size = 512,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers = {
+ {
+ .eraseblocks = { {256, 2048} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M45PE80",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M45PE80,
+ .total_size = 1024,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers = {
+ {
+ .eraseblocks = { {256, 4096} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M45PE16",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M45PE16,
+ .total_size = 2048,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers = {
+ {
+ .eraseblocks = { {256, 8192} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "N25Q016",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_N25Q016__1E,
+ .total_size = 2048,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 64B total; read 0x4B, write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 64} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
+ .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256, /* Multi I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {1700, 2000},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "N25Q032..1E",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_N25Q032__1E,
+ .total_size = 4096,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 64B total; read 0x4B, write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
+ .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256, /* Multi I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {1700, 2000},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "N25Q032..3E",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_N25Q032__3E,
+ .total_size = 4096,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 64B total; read 0x4B, write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
+ .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256, /* Multi I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "N25Q064..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_N25Q064__1E,
+ .total_size = 8192,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 64B total; read 0x4B, write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 2048 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
+ .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256, /* Multi I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {1700, 2000},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "N25Q064..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_N25Q064__3E,
+ .total_size = 8192,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 64B total; read 0x4B, write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 2048 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
+ .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256, /* Multi I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "N25Q128..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_N25Q128__1E,
+ .total_size = 16384,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 64B total; read 0x4B, write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers = {
+ {
+ .eraseblocks = { {4 * 1024, 4096 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {16384 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
+ .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256, /* Multi I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {1700, 2000},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "N25Q128..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_N25Q128__3E,
+ .total_size = 16384,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 64B total; read 0x4B, write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers = {
+ {
+ .eraseblocks = { {4 * 1024, 4096 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {16384 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
+ .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
+ .write = spi_chip_write_256, /* Multi I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
.vendor = "MoselVitelic",
.name = "V29C51000B",
.bustype = BUS_PARALLEL,
@@ -6984,711 +7991,6 @@
},
{
- .vendor = "Numonyx",
- .name = "M25PE10",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PE10,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 32} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 2} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "M25PE20",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PE20,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "M25PE40",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PE40,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "M25PE80",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PE80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "M25PE16",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PE16,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "M45PE10",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M45PE10,
- .total_size = 128,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {256, 512} },
- .block_erase = spi_block_erase_db,
- }, {
- .eraseblocks = { {64 * 1024, 2} },
- .block_erase = spi_block_erase_d8,
- }
- },
- .printlock = spi_prettyprint_status_register_default_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
- .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "M45PE20",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M45PE20,
- .total_size = 256,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {256, 1024} },
- .block_erase = spi_block_erase_db,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }
- },
- .printlock = spi_prettyprint_status_register_default_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
- .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "M45PE40",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M45PE40,
- .total_size = 512,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {256, 2048} },
- .block_erase = spi_block_erase_db,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }
- },
- .printlock = spi_prettyprint_status_register_default_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
- .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "M45PE80",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M45PE80,
- .total_size = 1024,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {256, 4096} },
- .block_erase = spi_block_erase_db,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }
- },
- .printlock = spi_prettyprint_status_register_default_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
- .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "M45PE16",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M45PE16,
- .total_size = 2048,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {256, 8192} },
- .block_erase = spi_block_erase_db,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }
- },
- .printlock = spi_prettyprint_status_register_default_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
- .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q016",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q016__1E,
- .total_size = 2048,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 64} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1700, 2000},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q032..1E",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q032__1E,
- .total_size = 4096,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 1024} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1700, 2000},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q032..3E",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q032__3E,
- .total_size = 4096,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 1024} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q064..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q064__1E,
- .total_size = 8192,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 2048 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1700, 2000},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q064..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q064__3E,
- .total_size = 8192,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 2048 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q128..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q128__1E,
- .total_size = 16384,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 4096 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {16384 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1700, 2000},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q128..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q128__3E,
- .total_size = 16384,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 4096 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {16384 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q256..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q256__1E,
- .total_size = 32768,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_BAD_REW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 8192 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32768 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1700, 2000},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q256..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q256__3E,
- .total_size = 32768,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PROBE | TEST_BAD_REW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 8192 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32768 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q512..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q512__1E,
- .total_size = 65536,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_BAD_REW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 16384 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 1024 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32 * 1024 * 1024, 2 } },
- .block_erase = spi_block_erase_c4,
- }, { /* Some models have a bulk erase command too. */
- .eraseblocks = { {64 * 1024 * 1024, 1 } },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1700, 2000},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q512..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q512__3E,
- .total_size = 65536,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PROBE | TEST_BAD_REW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 16384 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 1024 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32 * 1024 * 1024, 2 } },
- .block_erase = spi_block_erase_c4,
- }, { /* Some models have a bulk erase command too. */
- .eraseblocks = { {64 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Numonyx",
- .name = "N25Q00A..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q00A__3E,
- .total_size = 131072,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_BAD_REW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 32768 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 2048 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32 * 1024 * 1024, 4 } },
- .block_erase = spi_block_erase_c4,
- }
- },
- .printlock = spi_prettyprint_status_register_n25q, /* TODO: config, lock, flag regs */
- .unlock = spi_disable_blockprotect_n25q, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
.vendor = "PMC",
.name = "Pm25LD256C",
.bustype = BUS_SPI,
@@ -8156,7 +8458,7 @@
.feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec,
- .probe_timing = TIMING_FIXME,
+ .probe_timing = TIMING_FIXME,
.block_erasers =
{
{
@@ -8864,76 +9166,6 @@
},
{
- .vendor = "Spansion",
- .name = "S25FL256S......0", /* uniform 256kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL256,
- .total_size = 32768,
- .page_size = 256,
- /* supports 4B addressing */
- /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PROBE | TEST_BAD_REW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {256 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 32768 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 32768 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL512S",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL512,
- .total_size = 65536,
- .page_size = 256,
- /* supports 4B addressing */
- /* supports SFDP */
- /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PROBE | TEST_BAD_REW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {256 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 65536 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 65536 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
.vendor = "SST",
.name = "SST25LF040A",
.bustype = BUS_SPI,
@@ -10217,517 +10449,6 @@
{
.vendor = "ST",
- .name = "M25P05-A",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P05A,
- .total_size = 64,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- /* 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
- * only is successful if RDID does not work.
- */
- {
- .vendor = "ST",
- .name = "M25P05",
- .bustype = BUS_SPI,
- .manufacture_id = 0, /* Not used. */
- .model_id = ST_M25P05_RES,
- .total_size = 64,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res1,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_1, /* 128 */
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25P10-A",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P10A,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PRE,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- /* The ST M25P10 has the same problem as the M25P05. */
- {
- .vendor = "ST",
- .name = "M25P10",
- .bustype = BUS_SPI,
- .manufacture_id = 0, /* Not used. */
- .model_id = ST_M25P10_RES,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res1,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_1, /* 128 */
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST", /* Numonyx */
- .name = "M25P20",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P20,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp1,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25P20-old",
- .bustype = BUS_SPI,
- .manufacture_id = 0, /* Not used. */
- .model_id = ST_M25P20_RES,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_res1,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp1,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST", /* Numonyx */
- .name = "M25P40",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P40,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25P40-old",
- .bustype = BUS_SPI,
- .manufacture_id = 0, /* Not used. */
- .model_id = ST_M25P40_RES,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res1,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- },
-
- {
- .vendor = "ST",
- .name = "M25P80",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25P16",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P16,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PR,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25P32",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P32,
- .total_size = 4096,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25P64",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P64,
- .total_size = 8192,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25P128",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P128,
- .total_size = 16384,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {256 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25PX80",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PX80,
- .total_size = 1024,
- .page_size = 256,
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { { 4 * 1024, 256 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25PX16",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PX16,
- .total_size = 2048,
- .page_size = 256,
- /* OTP: 64B total; read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 512 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- },
-
- {
- .vendor = "ST",
- .name = "M25PX32",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PX32,
- .total_size = 4096,
- .page_size = 256,
- /* OTP: 64B total; read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PRE,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 1024 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ST",
- .name = "M25PX64",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PX64,
- .total_size = 8192,
- .page_size = 256,
- /* OTP: 64B total; read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PRE,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 2048 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- },
-
- {
- .vendor = "ST",
.name = "M29F002B",
.bustype = BUS_PARALLEL,
.manufacture_id = ST_ID,