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(a)student.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner(a)student.tuwien.ac.at>
---
flashchips.c | 3752 +++++++++++++++++++++++++++++-----------------------------
1 file changed, 1876 insertions(+), 1876 deletions(-)
diff --git a/flashchips.c b/flashchips.c
index d9b708d..b79e14a 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -6599,392 +6599,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,
- },
- },
- .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,
- },
+ .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 = "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,
+ .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 = "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",
+ .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 = { {512, 128} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 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 = "V29LC51001",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SYNCMOS_MVC_ID,
- .model_id = MVC_V29LC51001,
- .total_size = 128,
- .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, 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,
+ .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 = 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_res1,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {512, 512} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {256 * 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_bp1,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
},
{
- .vendor = "Nantronics",
- .name = "N25S10",
+ .vendor = "Micron/Numonyx/ST", /* Numonyx */
+ .name = "M25P40",
.bustype = BUS_SPI,
- .manufacture_id = NANTRONICS_ID_NOPREFIX,
- .model_id = NANTRONICS_N25S10,
- .total_size = 128,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P40,
+ .total_size = 512,
.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, 32} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 32} },
- .block_erase = spi_block_erase_d7,
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 2} },
+ .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 = { {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 +7013,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE20",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7048,7 +7045,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE40",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7080,7 +7077,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7112,7 +7109,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7144,68 +7141,197 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
- .name = "M45PE10",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PX80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M45PE10,
- .total_size = 128,
+ .model_id = ST_M25PX80,
+ .total_size = 1024,
.page_size = 256,
- .tested = TEST_UNTESTED,
+ /* 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 = { {256, 512} },
- .block_erase = spi_block_erase_db,
+ .eraseblocks = { { 4 * 1024, 256 } },
+ .block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 2} },
+ .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_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 */
+ .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 = "Numonyx",
- .name = "M45PE20",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PX16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M45PE20,
- .total_size = 256,
+ .model_id = ST_M25PX16,
+ .total_size = 2048,
.page_size = 256,
- .tested = TEST_UNTESTED,
+ /* 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 = {
+ .block_erasers =
+ {
{
- .eraseblocks = { {256, 1024} },
- .block_erase = spi_block_erase_db,
+ .eraseblocks = { { 4 * 1024, 512 } },
+ .block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 4} },
+ .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_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},
+ .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 = "Numonyx",
- .name = "M45PE40",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25PX32",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M45PE40,
- .total_size = 512,
+ .model_id = ST_M25PX32,
+ .total_size = 4096,
.page_size = 256,
- .tested = TEST_UNTESTED,
+ /* 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 = {
@@ -7225,7 +7351,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M45PE80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7252,7 +7378,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "M45PE16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7279,7 +7405,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q016",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7316,7 +7442,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q032..1E",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7350,7 +7476,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q032..3E",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7384,7 +7510,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 +7544,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 +7578,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 +7611,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,7 +7644,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q256..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7551,7 +7677,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q256..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7584,7 +7710,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q512..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7620,7 +7746,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q512..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7656,7 +7782,7 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Numonyx",
+ .vendor = "Micron/Numonyx/ST",
.name = "N25Q00A..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -7689,296 +7815,241 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "PMC",
- .name = "Pm25LD256C",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LD256C,
- .total_size = 32,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .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_spi_rdid,
+ .probe = probe_jedec,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 8} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 8} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 1} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32 * 1024, 1} },
- .block_erase = spi_block_erase_60,
+ .eraseblocks = { {512, 128} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {32 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_default_bp2,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
- .voltage = {2700, 3600},
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
},
+
{
- .vendor = "PMC",
- .name = "Pm25LD512(C)",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LD512,
+ .vendor = "MoselVitelic",
+ .name = "V29C51000T",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SYNCMOS_MVC_ID,
+ .model_id = MVC_V29C51000T,
.total_size = 64,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
+ .page_size = 512,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 16} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_60,
+ .eraseblocks = { {512, 128} },
+ .block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_default_bp2,
- .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
- .voltage = {2300, 3600},
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
},
{
- .vendor = "PMC",
- .name = "Pm25LD010(C)",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LD010,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .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_spi_rdid,
+ .probe = probe_jedec,
.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_d8,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_60,
+ .eraseblocks = { {1024, 512} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_default_bp2,
- .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
- .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD010 */
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
},
{
- .vendor = "PMC",
- .name = "Pm25LD020(C)",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LD020,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .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 = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_60,
+ .eraseblocks = { {1024, 512} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_default_bp2,
- .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
- .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD020 */
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
},
{
- .vendor = "PMC",
- .name = "Pm25LD040(C)",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV040,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .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_spi_rdid,
+ .probe = probe_jedec,
.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 = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
+ .eraseblocks = { {512, 128} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_default_bp2,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
- .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD040 */
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
},
-{
- .vendor = "PMC",
- .name = "Pm25LV512(A)",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV512,
- .total_size = 64,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ {
+ .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_spi_res3,
+ .probe = probe_jedec,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = { {512, 256} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .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},
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
},
{
- .vendor = "PMC",
- .name = "Pm25LV010",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV010,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .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_spi_res3,
+ .probe = probe_jedec,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 32} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = { {512, 512} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .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},
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
},
{
- .vendor = "PMC",
- .name = "Pm25LV010A",
+ .vendor = "Nantronics",
+ .name = "N25S10",
.bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV010,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S10,
.total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.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} },
.block_erase = spi_block_erase_d8,
}, {
.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_default_bp1,
- .unlock = spi_disable_blockprotect,
+ .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) supported */
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "PMC",
- .name = "Pm25LV020",
+ .vendor = "Nantronics",
+ .name = "N25S20",
.bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV020,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S20,
.total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
@@ -7989,60 +8060,78 @@ const struct flashchip flashchips[] = {
{
{
.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} },
.block_erase = spi_block_erase_d8,
}, {
.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_default_bp2,
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_default_bp3,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "PMC",
- .name = "Pm25LV040",
+ .vendor = "Nantronics",
+ .name = "N25S40",
.bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV040,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S40,
.total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.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} },
.block_erase = spi_block_erase_d8,
}, {
.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_default_bp2,
- .unlock = spi_disable_blockprotect,
+ .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) supported */
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "PMC",
- .name = "Pm25LV080B",
+ .vendor = "Nantronics",
+ .name = "N25S80",
.bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV080B,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S80,
.total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
@@ -8053,11 +8142,11 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
+ .eraseblocks = { {32 * 1024, 32} },
+ .block_erase = spi_block_erase_52,
+ }, {
.eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
@@ -8068,19 +8157,19 @@ const struct flashchip flashchips[] = {
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_bp2,
- .unlock = spi_disable_blockprotect,
+ .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) supported */
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "PMC",
- .name = "Pm25LV016B",
+ .vendor = "Nantronics",
+ .name = "N25S16",
.bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV016B,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S16,
.total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
@@ -8091,1052 +8180,1055 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_d7,
- }, {
- .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} },
+ .eraseblocks = { {2048 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {2048 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_bp2,
- .unlock = spi_disable_blockprotect,
+ .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) supported */
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "PMC",
- .name = "Pm29F002T",
- .bustype = BUS_PARALLEL,
- .manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM29F002T,
- .total_size = 256,
- .page_size = 8 * 1024,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = TIMING_FIXME,
+ .name = "Pm25LD256C",
+ .bustype = BUS_SPI,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LD256C,
+ .total_size = 32,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {128 * 1024, 1},
- {96 * 1024, 1},
- {8 * 1024, 2},
- {16 * 1024, 1},
- },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {4 * 1024, 8} },
+ .block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .eraseblocks = { {4 * 1024, 8} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 1} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {32 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {32 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .printlock = spi_prettyprint_status_register_default_bp2,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
+ .voltage = {2700, 3600},
},
-
{
.vendor = "PMC",
- .name = "Pm29F002B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM29F002B,
- .total_size = 256,
- .page_size = 8 * 1024,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = TIMING_FIXME,
+ .name = "Pm25LD512(C)",
+ .bustype = BUS_SPI,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LD512,
+ .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 = {
- {16 * 1024, 1},
- {8 * 1024, 2},
- {96 * 1024, 1},
- {128 * 1024, 1},
- },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {4 * 1024, 16} },
+ .block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .eraseblocks = { {4 * 1024, 16} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .printlock = spi_prettyprint_status_register_default_bp2,
+ .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
+ .voltage = {2300, 3600},
},
{
.vendor = "PMC",
- .name = "Pm39LV010",
- .bustype = BUS_PARALLEL,
- .manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
+ .name = "Pm25LD010(C)",
+ .bustype = BUS_SPI,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LD010,
.total_size = 128,
- .page_size = 4096,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .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 = erase_sector_jedec,
+ .block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 2} },
- .block_erase = erase_block_jedec,
+ .eraseblocks = { {4 * 1024, 32} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
}
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
+ .printlock = spi_prettyprint_status_register_default_bp2,
+ .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
+ .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD010 */
},
{
.vendor = "PMC",
- .name = "Pm39LV020",
- .bustype = BUS_PARALLEL,
- .manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM39LV020,
+ .name = "Pm25LD020(C)",
+ .bustype = BUS_SPI,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LD020,
.total_size = 256,
- .page_size = 4096,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
{
{
.eraseblocks = { {4 * 1024, 64} },
- .block_erase = erase_sector_jedec,
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_d7,
}, {
.eraseblocks = { {64 * 1024, 4} },
- .block_erase = erase_block_jedec,
+ .block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
}
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
+ .printlock = spi_prettyprint_status_register_default_bp2,
+ .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
+ .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD020 */
},
{
.vendor = "PMC",
- .name = "Pm39LV040",
- .bustype = BUS_PARALLEL,
- .manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM39LV040,
+ .name = "Pm25LD040(C)",
+ .bustype = BUS_SPI,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LV040,
.total_size = 512,
- .page_size = 4096,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PR,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
+ .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 = erase_sector_jedec,
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_d7,
}, {
.eraseblocks = { {64 * 1024, 8} },
- .block_erase = erase_block_jedec,
+ .block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {512 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
}
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
+ .printlock = spi_prettyprint_status_register_default_bp2,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
+ .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD040 */
},
- {
+{
.vendor = "PMC",
- .name = "Pm39LV512",
- .bustype = BUS_PARALLEL,
- .manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM39LV512,
+ .name = "Pm25LV512(A)",
+ .bustype = BUS_SPI,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LV512,
.total_size = 64,
- .page_size = 4096,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res3,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {4 * 1024, 16} },
- .block_erase = erase_sector_jedec,
+ .block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = erase_block_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,
+ .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 = "PMC",
- .name = "Pm49FL002",
- .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
- .manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM49FL002,
- .total_size = 256,
- .page_size = 16 * 1024,
- .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
+ .name = "Pm25LV010",
+ .bustype = BUS_SPI,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LV010,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res3,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {4 * 1024, 32} },
+ .block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {16 * 1024, 16} },
- .block_erase = erase_block_jedec,
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
}
},
- .unlock = unlock_49fl00x,
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {3000, 3600},
+ .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 = "PMC",
- .name = "Pm49FL004",
- .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
- .manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM49FL004,
- .total_size = 512,
- .page_size = 64 * 1024,
- .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = erase_block_jedec,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .unlock = unlock_49fl00x,
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {3000, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW203A",
+ .name = "Pm25LV010A",
.bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW203A,
- .total_size = 256,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LV010,
+ .total_size = 128,
.page_size = 256,
- .tested = TEST_UNTESTED,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {256, 1024} },
- .block_erase = spi_block_erase_db,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {4 * 1024, 32} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 4} },
.block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .printlock = spi_prettyprint_status_register_default_bp1,
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "Sanyo",
- .name = "LE25FW403A",
+ .vendor = "PMC",
+ .name = "Pm25LV020",
.bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW403A,
- .total_size = 512,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LV020,
+ .total_size = 256,
.page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
- .eraseblocks = { {256, 2 * 1024} },
- .block_erase = spi_block_erase_db,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .printlock = spi_prettyprint_status_register_default_bp2,
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Sanyo",
- .name = "LE25FW418A",
+ .vendor = "PMC",
+ .name = "Pm25LV040",
.bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW418A,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LV040,
.total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
.eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_d7,
- }, {
+ }, {
.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_bp2,
- .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* some quad-read supported ("HD_READ mode") */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "Sanyo",
- .name = "LE25FW806",
+ .vendor = "PMC",
+ .name = "Pm25LV080B",
.bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW806,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LV080B,
.total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
.eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_d7,
- }, {
+ }, {
+ .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_60,
+ }, {
.eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_default_bp2,
- .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "Sanyo",
- .name = "LE25FW808",
+ .vendor = "PMC",
+ .name = "Pm25LV016B",
.bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW808,
- .total_size = 1024,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LV016B,
+ .total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
- .eraseblocks = { {8 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
+ }, {
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_default_bp2,
- .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* some quad-read supported ("HD_READ mode") */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "Sharp",
- .name = "LH28F008BJT-BTLZ1",
+ .vendor = "PMC",
+ .name = "Pm29F002T",
.bustype = BUS_PARALLEL,
- .manufacture_id = SHARP_ID,
- .model_id = SHARP_LH28F008BJ__PB,
- .total_size = 1024,
- .page_size = 64 * 1024,
- .tested = TEST_OK_PREW,
- .probe = probe_82802ab,
- .probe_timing = TIMING_ZERO,
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM29F002T,
+ .total_size = 256,
+ .page_size = 8 * 1024,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_FIXME,
.block_erasers =
{
{
.eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 15}
- },
- .block_erase = erase_block_82802ab,
+ {128 * 1024, 1},
+ {96 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
+ },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = erase_sector_49lfxxxc,
- }
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .unlock = unlock_lh28f008bjt,
- .write = write_82802ab,
+ .write = write_jedec_1,
.read = read_memmapped,
- .voltage = {2700, 3600},
+ .voltage = {4500, 5500},
},
{
- .vendor = "Sharp",
- .name = "LHF00L04",
- .bustype = BUS_FWH, /* A/A Mux */
- .manufacture_id = SHARP_ID,
- .model_id = SHARP_LHF00L04,
- .total_size = 1024,
- .page_size = 64 * 1024,
- .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
+ .vendor = "PMC",
+ .name = "Pm29F002B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM29F002B,
+ .total_size = 256,
+ .page_size = 8 * 1024,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
.tested = TEST_UNTESTED,
- .probe = probe_82802ab,
- .probe_timing = TIMING_ZERO,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_FIXME,
.block_erasers =
{
{
.eraseblocks = {
- {64 * 1024, 15},
- {8 * 1024, 8}
- },
- .block_erase = erase_block_82802ab,
- }, {
- .eraseblocks = {
- {1024 * 1024, 1}
+ {16 * 1024, 1},
+ {8 * 1024, 2},
+ {96 * 1024, 1},
+ {128 * 1024, 1},
},
- .block_erase = NULL, /* 30 D0, only in A/A mux mode */
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
},
},
- .unlock = unlock_82802ab,
- .write = write_82802ab,
+ .write = write_jedec_1,
.read = read_memmapped,
- .voltage = {3000, 3600},
+ .voltage = {4500, 5500},
},
{
- .vendor = "Spansion",
- .name = "S25FL004A",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL004A,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
+ .vendor = "PMC",
+ .name = "Pm39LV010",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
+ .total_size = 128,
+ .page_size = 4096,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = { {4 * 1024, 32} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
+ .eraseblocks = { {64 * 1024, 2} },
+ .block_erase = erase_block_jedec,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
}
},
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
+ .write = write_jedec_1,
+ .read = read_memmapped,
.voltage = {2700, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL008A",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL008A,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PRE,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
+ .vendor = "PMC",
+ .name = "Pm39LV020",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM39LV020,
+ .total_size = 256,
+ .page_size = 4096,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = erase_block_jedec,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
}
},
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
+ .write = write_jedec_1,
+ .read = read_memmapped,
.voltage = {2700, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL016A",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL016A,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .vendor = "PMC",
+ .name = "Pm39LV040",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM39LV040,
+ .total_size = 512,
+ .page_size = 4096,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
.tested = TEST_OK_PR,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = erase_block_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
}
},
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
+ .write = write_jedec_1,
+ .read = read_memmapped,
.voltage = {2700, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL032A/P",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL032A,
- .total_size = 4096,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .vendor = "PMC",
+ .name = "Pm39LV512",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM39LV512,
+ .total_size = 64,
+ .page_size = 4096,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
.tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = { {4 * 1024, 16} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_block_jedec,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
}
},
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
+ .write = write_jedec_1,
+ .read = read_memmapped,
.voltage = {2700, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL064A/P",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL064A,
- .total_size = 8192,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .vendor = "PMC",
+ .name = "Pm49FL002",
+ .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM49FL002,
+ .total_size = 256,
+ .page_size = 16 * 1024,
+ .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
.tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {8 * 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},
+ .eraseblocks = { {16 * 1024, 16} },
+ .block_erase = erase_block_jedec,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .unlock = unlock_49fl00x,
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {3000, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL204K",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL204,
+ .vendor = "PMC",
+ .name = "Pm49FL004",
+ .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM49FL004,
.total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .page_size = 64 * 1024,
+ .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
+ .block_erasers =
+ {
{
.eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
+ .block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
+ .block_erase = erase_block_jedec,
}, {
- .eraseblocks = { { 512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
}
},
- .printlock = spi_prettyprint_status_register_default_bp3,
- .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */
- .voltage = {2700, 3600},
+ .unlock = unlock_49fl00x,
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {3000, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL208K",
+ .vendor = "Sanyo",
+ .name = "LE25FW203A",
.bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL208,
- .total_size = 1024,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW203A,
+ .total_size = 256,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers = {
+ .block_erasers =
+ {
{
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {256, 1024} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 1024 * 1024, 1} },
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_bp3,
- .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .printlock = spi_prettyprint_status_register_default_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL116K/S25FL216K",
+ .vendor = "Sanyo",
+ .name = "LE25FW403A",
.bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL216,
- .total_size = 2048,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW403A,
+ .total_size = 512,
.page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (S25FL116K only) */
- .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 = { {64 * 1024, 32} },
+ .eraseblocks = { {256, 2 * 1024} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 2048 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 2048 * 1024, 1} },
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_default_bp3,
- .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .printlock = spi_prettyprint_status_register_default_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL128S......0", /* uniform 256kB sectors */
+ .vendor = "Sanyo",
+ .name = "LE25FW418A",
.bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW418A,
+ .total_size = 512,
.page_size = 256,
- /* supports 4B addressing */
- /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .probe = probe_spi_res2,
.probe_timing = TIMING_ZERO,
.block_erasers = {
{
- .eraseblocks = { {4 * 1024, 4096} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {256 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
+ }, {
+ .eraseblocks = { {512 * 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 */
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_bp2,
+ .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* some quad-read supported ("HD_READ mode") */
.voltage = {2700, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL256S......0", /* uniform 256kB sectors */
+ .vendor = "Sanyo",
+ .name = "LE25FW806",
.bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL256,
- .total_size = 32768,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW806,
+ .total_size = 1024,
.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,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
.probe_timing = TIMING_ZERO,
.block_erasers = {
{
- .eraseblocks = { {4 * 1024, 8192} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {256 * 1024, 128} },
+ }, {
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 32768 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 32768 * 1024, 1} },
+ }, {
+ .eraseblocks = { {1024 * 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 */
+ .printlock = spi_prettyprint_status_register_default_bp2,
+ .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Spansion",
- .name = "S25FL512S",
+ .vendor = "Sanyo",
+ .name = "LE25FW808",
.bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL512,
- .total_size = 65536,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW808,
+ .total_size = 1024,
.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,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
.probe_timing = TIMING_ZERO,
.block_erasers = {
{
- .eraseblocks = { {256 * 1024, 256} },
+ .eraseblocks = { {8 * 1024, 128} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 65536 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 65536 * 1024, 1} },
+ }, {
+ .eraseblocks = { {1024 * 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 */
+ .printlock = spi_prettyprint_status_register_default_bp2,
+ .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* some quad-read supported ("HD_READ mode") */
.voltage = {2700, 3600},
},
{
- .vendor = "SST",
- .name = "SST25LF040A",
- .bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF040_REMS,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
+ .vendor = "Sharp",
+ .name = "LH28F008BJT-BTLZ1",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SHARP_ID,
+ .model_id = SHARP_LH28F008BJ__PB,
+ .total_size = 1024,
+ .page_size = 64 * 1024,
.tested = TEST_OK_PREW,
- .probe = probe_spi_res2,
+ .probe = probe_82802ab,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
+ .eraseblocks = {
+ {8 * 1024, 8},
+ {64 * 1024, 15}
+ },
+ .block_erase = erase_block_82802ab,
}, {
- .eraseblocks = { {32 * 1024, 16} },
- .block_erase = spi_block_erase_52,
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = erase_sector_49lfxxxc,
+ }
+ },
+ .unlock = unlock_lh28f008bjt,
+ .write = write_82802ab,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sharp",
+ .name = "LHF00L04",
+ .bustype = BUS_FWH, /* A/A Mux */
+ .manufacture_id = SHARP_ID,
+ .model_id = SHARP_LHF00L04,
+ .total_size = 1024,
+ .page_size = 64 * 1024,
+ .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {64 * 1024, 15},
+ {8 * 1024, 8}
+ },
+ .block_erase = erase_block_82802ab,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
+ .eraseblocks = {
+ {1024 * 1024, 1}
+ },
+ .block_erase = NULL, /* 30 D0, only in A/A mux mode */
},
},
- .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
- .read = spi_chip_read,
+ .unlock = unlock_82802ab,
+ .write = write_82802ab,
+ .read = read_memmapped,
.voltage = {3000, 3600},
},
{
- .vendor = "SST",
- .name = "SST25LF080(A)",
+ .vendor = "Spansion",
+ .name = "S25FL004A",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF080_REMS,
- .total_size = 1024,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL004A,
+ .total_size = 512,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EITHER,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
+ .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, 8} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- },
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
- .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
+ .write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {3000, 3600},
+ .voltage = {2700, 3600},
},
{
- .vendor = "SST",
- .name = "SST25VF010",
+ .vendor = "Spansion",
+ .name = "S25FL008A",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF010_REMS,
- .total_size = 128,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL008A,
+ .total_size = 1024,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rems,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PRE,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 32} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_52,
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- },
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
},
- .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
- .write = spi_chip_write_1,
+ .write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "SST",
- .name = "SST25VF016B",
+ .vendor = "Spansion",
+ .name = "S25FL016A",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF016B,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL016A,
.total_size = 2048,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EITHER,
- .tested = TEST_OK_PREW,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PR,
.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_60,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- },
+ }
},
- .printlock = spi_prettyprint_status_register_sst25vf016,
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
- .write = spi_aai_write,
+ .write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "SST",
- .name = "SST25VF032B",
+ .vendor = "Spansion",
+ .name = "S25FL032A/P",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF032B,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL032A,
.total_size = 4096,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
+ .feature_bits = FEATURE_WRSR_WREN,
.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 = { {32 * 1024, 128} },
- .block_erase = spi_block_erase_52,
- }, {
.eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- },
+ }
},
- .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
- .write = spi_aai_write,
+ .write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "SST",
- .name = "SST25VF064C",
+ .vendor = "Spansion",
+ .name = "S25FL064A/P",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF064C,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL064A,
.total_size = 8192,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
+ .feature_bits = FEATURE_WRSR_WREN,
.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 = { {32 * 1024, 256} },
- .block_erase = spi_block_erase_52,
- }, {
.eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- },
+ }
},
- .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
@@ -9144,196 +9236,289 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "SST",
- .name = "SST25VF040",
+ .vendor = "Spansion",
+ .name = "S25FL204K",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF040_REMS,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL204,
.total_size = 512,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
- .tested = TEST_OK_PR,
- .probe = probe_spi_rems,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers =
- {
+ .block_erasers = {
{
.eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 16} },
- .block_erase = spi_block_erase_52,
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 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_sst25, /* TODO: check */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
- .read = spi_chip_read,
+ .printlock = spi_prettyprint_status_register_default_bp3,
+ .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "SST",
- .name = "SST25VF040B",
+ .vendor = "Spansion",
+ .name = "S25FL208K",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF040B,
- .total_size = 512,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL208,
+ .total_size = 1024,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
- .tested = TEST_OK_PREW,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers =
- {
+ .block_erasers = {
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 16} },
- .block_erase = spi_block_erase_52,
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .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_default_bp3,
+ .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL116K/S25FL216K",
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL216,
+ .total_size = 2048,
+ .page_size = 256,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (S25FL116K only) */
+ .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 = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { { 2048 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { { 2048 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- },
+ }
},
- .printlock = spi_prettyprint_status_register_sst25vf040b,
- .unlock = spi_disable_blockprotect,
- .write = spi_aai_write,
- .read = spi_chip_read,
+ .printlock = spi_prettyprint_status_register_default_bp3,
+ .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */
.voltage = {2700, 3600},
},
{
- .vendor = "SST",
- .name = "SST25VF040B.REMS",
+ .vendor = "Spansion",
+ .name = "S25FL128S......0", /* uniform 256kB sectors */
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF040B_REMS,
- .total_size = 512,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rems,
+ /* supports 4B addressing */
+ /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers =
- {
+ .block_erasers = {
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 16} },
- .block_erase = spi_block_erase_52,
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { { 16384 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 16384 * 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 = "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 = { {512 * 1024, 1} },
+ .eraseblocks = { { 32768 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { { 32768 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- },
+ }
},
- .printlock = spi_prettyprint_status_register_sst25vf040b,
- .unlock = spi_disable_blockprotect,
- .write = spi_aai_write,
- .read = spi_chip_read,
+ .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 = "SST25VF080B",
+ .name = "SST25LF040A",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25VF080B,
- .total_size = 1024,
+ .model_id = SST_SST25VF040_REMS,
+ .total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_EWSR,
.tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
+ .probe = probe_spi_res2,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 32} },
+ .eraseblocks = { {32 * 1024, 16} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
},
},
.printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
.unlock = spi_disable_blockprotect,
- .write = spi_aai_write,
+ .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
.read = spi_chip_read,
- .voltage = {2700, 3600},
+ .voltage = {3000, 3600},
},
{
.vendor = "SST",
- .name = "SST25WF512",
+ .name = "SST25LF080(A)",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25WF512,
- .total_size = 64,
+ .model_id = SST_SST25VF080_REMS,
+ .total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_EITHER,
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .probe = probe_spi_res2,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {32 * 1024, 32} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {1024 * 64, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {1024 * 64, 1} },
- .block_erase = spi_block_erase_c7,
},
},
+ .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
.unlock = spi_disable_blockprotect,
- .write = spi_aai_write,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
+ .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
+ .read = spi_chip_read,
+ .voltage = {3000, 3600},
},
{
.vendor = "SST",
- .name = "SST25WF010",
+ .name = "SST25VF010",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25WF010,
+ .model_id = SST_SST25VF010_REMS,
.total_size = 128,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EITHER,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .feature_bits = FEATURE_WRSR_EWSR,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rems,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
@@ -9344,331 +9529,549 @@ const struct flashchip flashchips[] = {
.eraseblocks = { {32 * 1024, 4} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {1024 * 128, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {1024 * 128, 1} },
- .block_erase = spi_block_erase_c7,
},
},
+ .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
.unlock = spi_disable_blockprotect,
- .write = spi_aai_write,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
+ .write = spi_chip_write_1,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST25WF020",
+ .name = "SST25VF016B",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25WF020,
- .total_size = 256,
+ .model_id = SST_SST25VF016B,
+ .total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_EITHER,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 8} },
+ .eraseblocks = { {32 * 1024, 64} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 256, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 256, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
},
},
+ .printlock = spi_prettyprint_status_register_sst25vf016,
.unlock = spi_disable_blockprotect,
.write = spi_aai_write,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
- },
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
{
.vendor = "SST",
- .name = "SST25WF040",
+ .name = "SST25VF032B",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25WF040,
- .total_size = 512,
+ .model_id = SST_SST25VF032B,
+ .total_size = 4096,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EITHER,
- .tested = TEST_UNTESTED,
+ .feature_bits = FEATURE_WRSR_EWSR,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 16} },
+ .eraseblocks = { {32 * 1024, 128} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 512, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 512, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
},
},
+ .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
.unlock = spi_disable_blockprotect,
.write = spi_aai_write,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST28SF040A",
- .bustype = BUS_PARALLEL,
+ .name = "SST25VF064C",
+ .bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST28SF040,
- .total_size = 512,
+ .model_id = SST_SST25VF064C,
+ .total_size = 8192,
.page_size = 256,
- .feature_bits = 0,
- .tested = TEST_UNTESTED,
- .probe = probe_82802ab,
- .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */
+ .feature_bits = FEATURE_WRSR_EWSR,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {128, 4096} },
- .block_erase = erase_sector_28sf040,
+ .eraseblocks = { {4 * 1024, 2048} },
+ .block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = erase_chip_28sf040,
- }
+ .eraseblocks = { {32 * 1024, 256} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
},
- .unlock = unprotect_28sf040,
- .write = write_28sf040,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST29EE010",
- .bustype = BUS_PARALLEL,
+ .name = "SST25VF040",
+ .bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST29EE010,
- .total_size = 128,
- .page_size = 128,
- .feature_bits = FEATURE_LONG_RESET,
+ .model_id = SST_SST25VF040_REMS,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EWSR,
.tested = TEST_OK_PR,
- .probe = probe_jedec,
- .probe_timing = 10,
+ .probe = probe_spi_rems,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 16} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ },
},
- .write = write_jedec,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST29LE010",
- .bustype = BUS_PARALLEL,
+ .name = "SST25VF040B",
+ .bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST29LE010,
- .total_size = 128,
- .page_size = 128,
- .feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = 10,
+ .model_id = SST_SST25VF040B,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EWSR,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 16} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
},
- .write = write_jedec,
- .read = read_memmapped,
- .voltage = {3000, 3600},
+ .printlock = spi_prettyprint_status_register_sst25vf040b,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST29EE020A",
- .bustype = BUS_PARALLEL,
+ .name = "SST25VF040B.REMS",
+ .bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST29EE020A,
- .total_size = 256,
- .page_size = 128,
- .feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_OK_PRE,
- .probe = probe_jedec,
- .probe_timing = 10,
+ .model_id = SST_SST25VF040B_REMS,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EWSR,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rems,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 16} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
},
- .write = write_jedec,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .printlock = spi_prettyprint_status_register_sst25vf040b,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST29LE020",
- .bustype = BUS_PARALLEL,
+ .name = "SST25VF080B",
+ .bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST29LE020,
- .total_size = 256,
- .page_size = 128,
- .feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_OK_PRE,
- .probe = probe_jedec,
- .probe_timing = 10,
+ .model_id = SST_SST25VF080B,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EWSR,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 32} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
},
- .write = write_jedec,
- .read = read_memmapped,
- .voltage = {3000, 3600},
+ .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST39SF512",
- .bustype = BUS_PARALLEL,
+ .name = "SST25WF512",
+ .bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST39SF512,
+ .model_id = SST_SST25WF512,
.total_size = 64,
- .page_size = 4096,
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = 1, /* 150 ns */
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EITHER,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {4 * 1024, 16} },
- .block_erase = erase_sector_jedec,
+ .block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {1024 * 64, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {1024 * 64, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST25WF010",
+ .bustype = BUS_SPI,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25WF010,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EITHER,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 32} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {1024 * 128, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {1024 * 128, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST25WF020",
+ .bustype = BUS_SPI,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25WF020,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EITHER,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 8} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 256, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {1024 * 256, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST25WF040",
+ .bustype = BUS_SPI,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25WF040,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EITHER,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 16} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 512, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {1024 * 512, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST28SF040A",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST28SF040,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = 0,
+ .tested = TEST_UNTESTED,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {128, 4096} },
+ .block_erase = erase_sector_28sf040,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_28sf040,
}
},
- .write = write_jedec_1,
+ .unlock = unprotect_28sf040,
+ .write = write_28sf040,
.read = read_memmapped,
.voltage = {4500, 5500},
},
{
.vendor = "SST",
- .name = "SST39SF010A",
+ .name = "SST29EE010",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
- .model_id = SST_SST39SF010,
+ .model_id = SST_SST29EE010,
.total_size = 128,
- .page_size = 4096,
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
+ .page_size = 128,
+ .feature_bits = FEATURE_LONG_RESET,
+ .tested = TEST_OK_PR,
.probe = probe_jedec,
- .probe_timing = 1, /* 150 ns */
+ .probe_timing = 10,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 32} },
- .block_erase = erase_sector_jedec,
- }, {
.eraseblocks = { {128 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
},
- .write = write_jedec_1,
+ .write = write_jedec,
.read = read_memmapped,
.voltage = {4500, 5500},
},
{
.vendor = "SST",
- .name = "SST39SF020A",
+ .name = "SST29LE010",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
- .model_id = SST_SST39SF020,
+ .model_id = SST_SST29LE010,
+ .total_size = 128,
+ .page_size = 128,
+ .feature_bits = FEATURE_LONG_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = 10,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec,
+ .read = read_memmapped,
+ .voltage = {3000, 3600},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST29EE020A",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST29EE020A,
.total_size = 256,
- .page_size = 4096,
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
+ .page_size = 128,
+ .feature_bits = FEATURE_LONG_RESET,
+ .tested = TEST_OK_PRE,
.probe = probe_jedec,
- .probe_timing = 1, /* 150 ns */
+ .probe_timing = 10,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = erase_sector_jedec,
- }, {
.eraseblocks = { {256 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
},
- .write = write_jedec_1,
+ .write = write_jedec,
.read = read_memmapped,
.voltage = {4500, 5500},
},
{
.vendor = "SST",
- .name = "SST39SF040",
+ .name = "SST29LE020",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
- .model_id = SST_SST39SF040,
- .total_size = 512,
- .page_size = 4096,
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
+ .model_id = SST_SST29LE020,
+ .total_size = 256,
+ .page_size = 128,
+ .feature_bits = FEATURE_LONG_RESET,
+ .tested = TEST_OK_PRE,
.probe = probe_jedec,
- .probe_timing = 1, /* 150 ns */
+ .probe_timing = 10,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
},
- .write = write_jedec_1,
+ .write = write_jedec,
.read = read_memmapped,
- .voltage = {4500, 5500},
+ .voltage = {3000, 3600},
},
{
.vendor = "SST",
- .name = "SST39VF512",
+ .name = "SST39SF512",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
- .model_id = SST_SST39VF512,
+ .model_id = SST_SST39SF512,
.total_size = 64,
.page_size = 4096,
.feature_bits = FEATURE_EITHER_RESET,
@@ -9687,15 +10090,15 @@ const struct flashchip flashchips[] = {
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {2700, 3600},
+ .voltage = {4500, 5500},
},
{
.vendor = "SST",
- .name = "SST39VF010",
+ .name = "SST39SF010A",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
- .model_id = SST_SST39VF010,
+ .model_id = SST_SST39SF010,
.total_size = 128,
.page_size = 4096,
.feature_bits = FEATURE_EITHER_RESET,
@@ -9714,19 +10117,19 @@ const struct flashchip flashchips[] = {
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {2700, 3600},
+ .voltage = {4500, 5500},
},
{
.vendor = "SST",
- .name = "SST39VF020",
+ .name = "SST39SF020A",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
- .model_id = SST_SST39VF020,
+ .model_id = SST_SST39SF020,
.total_size = 256,
.page_size = 4096,
.feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_jedec,
.probe_timing = 1, /* 150 ns */
.block_erasers =
@@ -9741,15 +10144,123 @@ const struct flashchip flashchips[] = {
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {2700, 3600},
+ .voltage = {4500, 5500},
},
{
.vendor = "SST",
- .name = "SST39VF040",
+ .name = "SST39SF040",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
- .model_id = SST_SST39VF040,
+ .model_id = SST_SST39SF040,
+ .total_size = 512,
+ .page_size = 4096,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = 1, /* 150 ns */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .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 = "SST",
+ .name = "SST39VF512",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST39VF512,
+ .total_size = 64,
+ .page_size = 4096,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = 1, /* 150 ns */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 16} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST39VF010",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST39VF010,
+ .total_size = 128,
+ .page_size = 4096,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = 1, /* 150 ns */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 32} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST39VF020",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST39VF020,
+ .total_size = 256,
+ .page_size = 4096,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = 1, /* 150 ns */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST39VF040",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST39VF040,
.total_size = 512,
.page_size = 4096,
.feature_bits = FEATURE_EITHER_RESET,
@@ -10217,517 +10728,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,
--
Kind regards, Stefan Tauner