summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstefanct <stefanct@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2013-07-25 22:58:51 +0000
committerstefanct <stefanct@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2013-07-25 22:58:51 +0000
commitb7991ca725c6c4a88a091e32e1c339020aa37259 (patch)
tree4a642d9d6200c4ab16dbf917974bdb66f15dfc4c
parent1c33c5c0ef6fd99663e89c78ce3fc6bfd6539a6e (diff)
downloadflashrom-b7991ca725c6c4a88a091e32e1c339020aa37259.tar.gz
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. Signed-off-by: Stefan Tauner <stefan.tauner@student.tuwien.ac.at> Acked-by: Stefan Tauner <stefan.tauner@student.tuwien.ac.at> git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@1703 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--flashchips.c1631
1 files changed, 676 insertions, 955 deletions
diff --git a/flashchips.c b/flashchips.c
index 1b6a22e..a693290 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -4079,44 +4079,6 @@ const struct flashchip flashchips[] = {
{
.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,392 +6561,389 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "MoselVitelic",
- .name = "V29C51000B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SYNCMOS_MVC_ID,
- .model_id = MVC_V29C51000B,
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P05-A",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P05A,
.total_size = 64,
- .page_size = 512,
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {512, 128} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {64 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .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 = "MoselVitelic",
- .name = "V29C51000T",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SYNCMOS_MVC_ID,
- .model_id = MVC_V29C51000T,
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P05",
+ .bustype = BUS_SPI,
+ .manufacture_id = 0, /* Not used. */
+ .model_id = ST_M25P05_RES,
.total_size = 64,
- .page_size = 512,
- .feature_bits = FEATURE_EITHER_RESET,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_jedec,
+ .probe = probe_spi_res1,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {512, 128} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {64 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .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 = "MoselVitelic",
- .name = "V29C51400B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SYNCMOS_MVC_ID,
- .model_id = MVC_V29C51400B,
- .total_size = 512,
- .page_size = 1024,
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
+ .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 = { {1024, 512} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .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 = "MoselVitelic",
- .name = "V29C51400T",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SYNCMOS_MVC_ID,
- .model_id = MVC_V29C51400T,
- .total_size = 512,
- .page_size = 1024,
- .feature_bits = FEATURE_EITHER_RESET,
+ .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_jedec,
+ .probe = probe_spi_res1,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {1024, 512} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .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 = "MoselVitelic",
- .name = "V29LC51000",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SYNCMOS_MVC_ID,
- .model_id = MVC_V29LC51000,
- .total_size = 64,
- .page_size = 512,
- .feature_bits = FEATURE_EITHER_RESET,
+ .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_jedec,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {512, 128} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .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 = "MoselVitelic",
- .name = "V29LC51001",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SYNCMOS_MVC_ID,
- .model_id = MVC_V29LC51001,
- .total_size = 128,
- .page_size = 512,
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
+ .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 = { {512, 256} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .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 = "MoselVitelic",
- .name = "V29LC51002",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SYNCMOS_MVC_ID,
- .model_id = MVC_V29LC51002,
- .total_size = 256,
- .page_size = 512,
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
+ .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 = { {512, 512} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .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 = "Nantronics",
- .name = "N25S10",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P40-old",
.bustype = BUS_SPI,
- .manufacture_id = NANTRONICS_ID_NOPREFIX,
- .model_id = NANTRONICS_N25S10,
- .total_size = 128,
+ .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_rdid,
+ .probe = probe_spi_res1,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 32} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 32} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 2} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_60,
+ .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 = { {128 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_bp3,
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Nantronics",
- .name = "N25S20",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P16",
.bustype = BUS_SPI,
- .manufacture_id = NANTRONICS_ID_NOPREFIX,
- .model_id = NANTRONICS_N25S20,
- .total_size = 256,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P16,
+ .total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PR,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 8} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_bp3,
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Nantronics",
- .name = "N25S40",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P32",
.bustype = BUS_SPI,
- .manufacture_id = NANTRONICS_ID_NOPREFIX,
- .model_id = NANTRONICS_N25S40,
- .total_size = 512,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P32,
+ .total_size = 4096,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 16} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_bp3,
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Nantronics",
- .name = "N25S80",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P64",
.bustype = BUS_SPI,
- .manufacture_id = NANTRONICS_ID_NOPREFIX,
- .model_id = NANTRONICS_N25S80,
- .total_size = 1024,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P64,
+ .total_size = 8192,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
+ .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 = { {32 * 1024, 32} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_bp3,
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Nantronics",
- .name = "N25S16",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P128",
.bustype = BUS_SPI,
- .manufacture_id = NANTRONICS_ID_NOPREFIX,
- .model_id = NANTRONICS_N25S16,
- .total_size = 2048,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P128,
+ .total_size = 16384,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
+ .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} },
+ .eraseblocks = { {256 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_bp3,
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE10",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7016,7 +6975,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE20",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7048,7 +7007,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE40",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7080,7 +7039,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7112,7 +7071,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7144,7 +7103,136 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .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,
@@ -7171,7 +7259,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M45PE20",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7198,7 +7286,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M45PE40",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7225,7 +7313,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M45PE80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7252,7 +7340,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M45PE16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7279,7 +7367,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q016",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7316,7 +7404,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q032..1E",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7350,7 +7438,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q032..3E",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7384,7 +7472,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q064..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7418,7 +7506,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q064..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7452,7 +7540,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q128..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7485,7 +7573,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q128..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7518,173 +7606,387 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
- .name = "N25Q256..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
+ .vendor = "MoselVitelic",
+ .name = "V29C51000B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SYNCMOS_MVC_ID,
+ .model_id = MVC_V29C51000B,
+ .total_size = 64,
+ .page_size = 512,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {512, 128} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "MoselVitelic",
+ .name = "V29C51000T",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SYNCMOS_MVC_ID,
+ .model_id = MVC_V29C51000T,
+ .total_size = 64,
+ .page_size = 512,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {512, 128} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "MoselVitelic",
+ .name = "V29C51400B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SYNCMOS_MVC_ID,
+ .model_id = MVC_V29C51400B,
+ .total_size = 512,
+ .page_size = 1024,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1024, 512} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "MoselVitelic",
+ .name = "V29C51400T",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SYNCMOS_MVC_ID,
+ .model_id = MVC_V29C51400T,
+ .total_size = 512,
+ .page_size = 1024,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1024, 512} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "MoselVitelic",
+ .name = "V29LC51000",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SYNCMOS_MVC_ID,
+ .model_id = MVC_V29LC51000,
+ .total_size = 64,
+ .page_size = 512,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {512, 128} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "MoselVitelic",
+ .name = "V29LC51001",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SYNCMOS_MVC_ID,
+ .model_id = MVC_V29LC51001,
+ .total_size = 128,
+ .page_size = 512,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {512, 256} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "MoselVitelic",
+ .name = "V29LC51002",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SYNCMOS_MVC_ID,
+ .model_id = MVC_V29LC51002,
+ .total_size = 256,
+ .page_size = 512,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {512, 512} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "Nantronics",
+ .name = "N25S10",
.bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q256__1E,
- .total_size = 32768,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S10,
+ .total_size = 128,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_BAD_REW,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
- .eraseblocks = { {4 * 1024, 8192 } },
+ .eraseblocks = { {4 * 1024, 32} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 32} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 2} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32768 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {128 * 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},
+ .printlock = spi_prettyprint_status_register_default_bp3,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
+ .voltage = {2700, 3600},
},
{
- .vendor = "Numonyx",
- .name = "N25Q256..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
+ .vendor = "Nantronics",
+ .name = "N25S20",
.bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q256__3E,
- .total_size = 32768,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S20,
+ .total_size = 256,
.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,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
- .eraseblocks = { {4 * 1024, 8192 } },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 8} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32768 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {256 * 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 */
+ .printlock = spi_prettyprint_status_register_default_bp3,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "Numonyx",
- .name = "N25Q512..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
+ .vendor = "Nantronics",
+ .name = "N25S40",
.bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q512__1E,
- .total_size = 65536,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S40,
+ .total_size = 512,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_BAD_REW,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
- .eraseblocks = { {4 * 1024, 16384 } },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 1024 } },
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 16} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
.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 } },
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {512 * 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},
+ .printlock = spi_prettyprint_status_register_default_bp3,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
+ .voltage = {2700, 3600},
},
{
- .vendor = "Numonyx",
- .name = "N25Q512..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */
+ .vendor = "Nantronics",
+ .name = "N25S80",
.bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q512__3E,
- .total_size = 65536,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S80,
+ .total_size = 1024,
.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,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
- .eraseblocks = { {4 * 1024, 16384 } },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 1024 } },
+ .eraseblocks = { {32 * 1024, 32} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
.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} },
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {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 */
+ .printlock = spi_prettyprint_status_register_default_bp3,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "Numonyx",
- .name = "N25Q00A..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */
+ .vendor = "Nantronics",
+ .name = "N25S16",
.bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_N25Q00A__3E,
- .total_size = 131072,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S16,
+ .total_size = 2048,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_BAD_REW,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
- .eraseblocks = { {4 * 1024, 32768 } },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 2048 } },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32 * 1024 * 1024, 4 } },
- .block_erase = spi_block_erase_c4,
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2048 * 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 */
+ .printlock = spi_prettyprint_status_register_default_bp3,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
.voltage = {2700, 3600},
},
@@ -8156,7 +8458,7 @@ const struct flashchip flashchips[] = {
.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 @@ const struct flashchip flashchips[] = {
},
{
- .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 @@ const struct flashchip flashchips[] = {
{
.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,