flashchips.c: Sort file by vendor and model
For self-consistency, and to allow tools to assist with merging the
chromium fork of flashrom, sort the entries of flashchips.c. The file is
already largely sorted, though deviations have crept in over time.
This is a non-clever mostly ASCII-order sorting. It is not intended to
be permanent.
Change-Id: I75a99583592526f60ba5264e92391bf8b1213b20
Reviewed-on: https://review.coreboot.org/c/flashrom/+/33931
Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/flashchips.c b/flashchips.c
index 0906b1f..4dd9d77 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -25,8 +25,11 @@
/**
* List of supported flash chips.
*
- * Please keep the list sorted by vendor name and chip family, so that the output of 'flashrom -L' is roughly
- * alphabetically sorted. Within families keep them in order of density.
+ * Temporarily, this file is sorted alphabetically by vendor and name to
+ * assist with merging the Chromium fork of flashrom.
+ *
+ * The usual intention is that that this list is sorted by vendor, then chip
+ * family and chip density, which is useful for the output of 'flashrom -L'.
*/
const struct flashchip flashchips[] = {
@@ -55,60 +58,6 @@
{
.vendor = "AMD",
- .name = "Am29F010",
- .bustype = BUS_PARALLEL,
- .manufacture_id = AMD_ID,
- .model_id = AMD_AM29F010,
- .total_size = 128,
- .page_size = 16 * 1024,
- .feature_bits = FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {16 * 1024, 8} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "AMD",
- .name = "Am29F010A/B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = AMD_ID,
- .model_id = AMD_AM29F010,
- .total_size = 128,
- .page_size = 16 * 1024,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {16 * 1024, 8} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "AMD",
.name = "Am29F002(N)BB",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID,
@@ -173,6 +122,60 @@
{
.vendor = "AMD",
+ .name = "Am29F010",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = AMD_ID,
+ .model_id = AMD_AM29F010,
+ .total_size = 128,
+ .page_size = 16 * 1024,
+ .feature_bits = FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {16 * 1024, 8} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "AMD",
+ .name = "Am29F010A/B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = AMD_ID,
+ .model_id = AMD_AM29F010,
+ .total_size = 128,
+ .page_size = 16 * 1024,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {16 * 1024, 8} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "AMD",
.name = "Am29F016D",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID,
@@ -616,6 +619,173 @@
{
.vendor = "AMIC",
+ .name = "A25L010",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L010,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 32 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 2 } },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 128 * 1024, 1 } },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
+ .name = "A25L016",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L016,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 512 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 32 } },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 2048 * 1024, 1 } },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
+ .name = "A25L020",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L020,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 64 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 4 } },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 256 * 1024, 1 } },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
+ .name = "A25L032",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L032,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 1024 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 64 } },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { { 64 * 1024, 64 } },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 4096 * 1024, 1 } },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 4096 * 1024, 1 } },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_amic_a25l032, /* bit5: T/B, bit6: prot size */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
+ .name = "A25L040",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L040,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 128 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 8 } },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 512 * 1024, 1 } },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
.name = "A25L05PT",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID,
@@ -684,6 +854,38 @@
{
.vendor = "AMIC",
+ .name = "A25L080",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L080,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .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_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
.name = "A25L10PT",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID,
@@ -754,6 +956,82 @@
{
.vendor = "AMIC",
+ .name = "A25L16PT",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID,
+ .model_id = AMIC_A25L16PT,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid4,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {64 * 1024, 31},
+ {32 * 1024, 1},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
+ .name = "A25L16PU",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID,
+ .model_id = AMIC_A25L16PU,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PR,
+ .probe = probe_spi_rdid4,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 31},
+ },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
.name = "A25L20PT",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID,
@@ -899,6 +1177,38 @@
{
.vendor = "AMIC",
+ .name = "A25L512",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L512,
+ .total_size = 64,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 16 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 1 } },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 64 * 1024, 1 } },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
.name = "A25L80P",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID,
@@ -934,283 +1244,16 @@
{
.vendor = "AMIC",
- .name = "A25L16PT",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L16PT,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid4,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {64 * 1024, 31},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
- {4 * 1024, 2},
- },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
- .name = "A25L16PU",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L16PU,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PR,
- .probe = probe_spi_rdid4,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
- {32 * 1024, 1},
- {64 * 1024, 31},
- },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
- .name = "A25L512",
+ .name = "A25LQ032/A25LQ32A",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L512,
- .total_size = 64,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 16 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 1 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 64 * 1024, 1 } },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
- .name = "A25L010",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L010,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 32 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 2 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 128 * 1024, 1 } },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
- .name = "A25L020",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L020,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 64 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 4 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 256 * 1024, 1 } },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
- .name = "A25L040",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L040,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 128 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 8 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 512 * 1024, 1 } },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
- .name = "A25L080",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L080,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .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_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
- .name = "A25L016",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L016,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 512 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 32 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 2048 * 1024, 1 } },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
- .name = "A25L032",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L032,
+ .model_id = AMIC_A25LQ032,
.total_size = 4096,
.page_size = 256,
+ /* A25LQ32A supports SFDP */
/* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
@@ -1281,46 +1324,6 @@
{
.vendor = "AMIC",
- .name = "A25LQ032/A25LQ32A",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25LQ032,
- .total_size = 4096,
- .page_size = 256,
- /* A25LQ32A supports SFDP */
- /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 1024 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 64 } },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { { 64 * 1024, 64 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 4096 * 1024, 1 } },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 4096 * 1024, 1 } },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_amic_a25l032, /* bit5: T/B, bit6: prot size */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
.name = "A25LQ64",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID_NOPREFIX,
@@ -1944,6 +1947,96 @@
{
.vendor = "Atmel",
+ /* The A suffix indicates 33MHz instead of 20MHz clock rate.
+ * All other properties seem to be the same.*/
+ .name = "AT25F1024(A)",
+ .bustype = BUS_SPI,
+ .manufacture_id = ATMEL_ID,
+ .model_id = ATMEL_AT25F1024,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_at25f,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_62,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_at25f,
+ .unlock = spi_disable_blockprotect_at25f,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Atmel",
+ .name = "AT25F2048",
+ .bustype = BUS_SPI,
+ .manufacture_id = ATMEL_ID,
+ .model_id = ATMEL_AT25F2048,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_at25f,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_62,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_at25f,
+ .unlock = spi_disable_blockprotect_at25f,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Atmel",
+ .name = "AT25F4096",
+ .bustype = BUS_SPI,
+ .manufacture_id = ATMEL_ID,
+ .model_id = ATMEL_AT25F4096,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_at25f,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_62,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_at25f4096,
+ /* "Bits 5-6 are 0s when device is not in an internal write cycle." Better leave them alone: */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Atmel",
.name = "AT25F512",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
@@ -2045,96 +2138,6 @@
{
.vendor = "Atmel",
- /* The A suffix indicates 33MHz instead of 20MHz clock rate.
- * All other properties seem to be the same.*/
- .name = "AT25F1024(A)",
- .bustype = BUS_SPI,
- .manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT25F1024,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_at25f,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_62,
- }
- },
- .printlock = spi_prettyprint_status_register_at25f,
- .unlock = spi_disable_blockprotect_at25f,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Atmel",
- .name = "AT25F2048",
- .bustype = BUS_SPI,
- .manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT25F2048,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_at25f,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_62,
- }
- },
- .printlock = spi_prettyprint_status_register_at25f,
- .unlock = spi_disable_blockprotect_at25f,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Atmel",
- .name = "AT25F4096",
- .bustype = BUS_SPI,
- .manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT25F4096,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_at25f,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_62,
- }
- },
- .printlock = spi_prettyprint_status_register_at25f4096,
- /* "Bits 5-6 are 0s when device is not in an internal write cycle." Better leave them alone: */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Atmel",
.name = "AT25FS010",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
@@ -2550,30 +2553,6 @@
{
.vendor = "Atmel",
- .name = "AT29C512",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT29C512,
- .total_size = 64,
- .page_size = 128,
- .feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = 10000, /* 10mS, Enter=Exec */
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .write = write_jedec,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "Atmel",
.name = "AT29C010A",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
@@ -2646,6 +2625,30 @@
{
.vendor = "Atmel",
+ .name = "AT29C512",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ATMEL_ID,
+ .model_id = ATMEL_AT29C512,
+ .total_size = 64,
+ .page_size = 128,
+ .feature_bits = FEATURE_LONG_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = 10000, /* 10mS, Enter=Exec */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "Atmel",
.name = "AT45CS1282",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
@@ -3057,6 +3060,31 @@
{
.vendor = "Atmel",
+ .name = "AT49(H)F010",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ATMEL_ID,
+ .model_id = ATMEL_AT49F010,
+ .total_size = 128,
+ .page_size = 0, /* unused */
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .printlock = printlock_at49f,
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "Atmel",
.name = "AT49BV512",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
@@ -3145,31 +3173,6 @@
{
.vendor = "Atmel",
- .name = "AT49(H)F010",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT49F010,
- .total_size = 128,
- .page_size = 0, /* unused */
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .printlock = printlock_at49f,
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "Atmel",
.name = "AT49F020",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
@@ -3331,42 +3334,6 @@
{
.vendor = "Atmel",
- .name = "AT49LH00B4",
- .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
- .manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT49LH00B4,
- .total_size = 512,
- .page_size = 0, /* unused */
- .feature_bits = FEATURE_REGISTERMAP,
- .tested = TEST_UNTESTED,
- .probe = probe_82802ab,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {8 * 1024, 2},
- {16 * 1024, 1},
- {32 * 1024, 1},
- {64 * 1024, 7},
- },
- .block_erase = NULL, /* TODO: Implement. */
- }, {
- .eraseblocks = {
- {64 * 1024, 8},
- },
- .block_erase = erase_block_82802ab,
- },
- },
- .printlock = printlock_regspace2_block_eraser_0,
- .unlock = unlock_regspace2_block_eraser_0,
- .write = write_82802ab,
- .read = read_memmapped,
- .voltage = {3000, 3600},
- },
-
- {
- .vendor = "Atmel",
.name = "AT49LH004",
.bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
.manufacture_id = ATMEL_ID,
@@ -3402,27 +3369,39 @@
},
{
- .vendor = "Catalyst",
- .name = "CAT28F512",
- .bustype = BUS_PARALLEL,
- .manufacture_id = CATALYST_ID,
- .model_id = CATALYST_CAT28F512,
- .total_size = 64,
+ .vendor = "Atmel",
+ .name = "AT49LH00B4",
+ .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
+ .manufacture_id = ATMEL_ID,
+ .model_id = ATMEL_AT49LH00B4,
+ .total_size = 512,
.page_size = 0, /* unused */
- .feature_bits = 0,
- .tested = {.probe = OK, .read = OK, .erase = BAD, .write = BAD },
- .probe = probe_jedec, /* FIXME! */
+ .feature_bits = FEATURE_REGISTERMAP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_82802ab,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = NULL, /* TODO */
+ .eraseblocks = {
+ {8 * 1024, 2},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 7},
+ },
+ .block_erase = NULL, /* TODO: Implement. */
+ }, {
+ .eraseblocks = {
+ {64 * 1024, 8},
+ },
+ .block_erase = erase_block_82802ab,
},
},
- .write = NULL, /* TODO */
+ .printlock = printlock_regspace2_block_eraser_0,
+ .unlock = unlock_regspace2_block_eraser_0,
+ .write = write_82802ab,
.read = read_memmapped,
- .voltage = {4500, 5500},
+ .voltage = {3000, 3600},
},
{
@@ -3453,6 +3432,30 @@
},
{
+ .vendor = "Catalyst",
+ .name = "CAT28F512",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = CATALYST_ID,
+ .model_id = CATALYST_CAT28F512,
+ .total_size = 64,
+ .page_size = 0, /* unused */
+ .feature_bits = 0,
+ .tested = {.probe = OK, .read = OK, .erase = BAD, .write = BAD },
+ .probe = probe_jedec, /* FIXME! */
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = NULL, /* TODO */
+ },
+ },
+ .write = NULL, /* TODO */
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
.vendor = "ENE",
.name = "KB9012 (EDI)",
.bustype = BUS_SPI,
@@ -3477,35 +3480,96 @@
},
{
- .vendor = "ESMT",
- .name = "F49B002UA",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ESMT_ID,
- .model_id = ESMT_F49B002UA,
- .total_size = 256,
- .page_size = 4096,
- .feature_bits = FEATURE_EITHER_RESET,
+ .vendor = "ESI",
+ .name = "ES25P16",
+ .bustype = BUS_SPI,
+ .manufacture_id = EXCEL_ID_NOPREFIX,
+ .model_id = EXCEL_ES25P16,
+ .total_size = 2 * 1024,
+ .page_size = 256,
+ /* 256-byte parameter page separate from memory array:
+ * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .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 = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
}
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast Read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "ESI",
+ .name = "ES25P40",
+ .bustype = BUS_SPI,
+ .manufacture_id = EXCEL_ID_NOPREFIX,
+ .model_id = EXCEL_ES25P40,
+ .total_size = 512,
+ .page_size = 256,
+ /* 256-byte parameter page separate from memory array:
+ * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .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_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast Read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "ESI",
+ .name = "ES25P80",
+ .bustype = BUS_SPI,
+ .manufacture_id = EXCEL_ID_NOPREFIX,
+ .model_id = EXCEL_ES25P80,
+ .total_size = 1024,
+ .page_size = 256,
+ /* 256-byte parameter page separate from memory array:
+ * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .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_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast Read (0x0B) supported */
+ .voltage = {2700, 3600},
},
{
@@ -3579,6 +3643,38 @@
},
{
+ .vendor = "ESMT",
+ .name = "F49B002UA",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ESMT_ID,
+ .model_id = ESMT_F49B002UA,
+ .total_size = 256,
+ .page_size = 4096,
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {128 * 1024, 1},
+ {96 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
+ },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
.vendor = "Eon",
.name = "EN25B05",
.bustype = BUS_SPI,
@@ -3648,36 +3744,6 @@
{
.vendor = "Eon",
- .name = "EN25P05",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B05,
- .total_size = 64,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
.name = "EN25B10",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -3746,332 +3812,6 @@
{
.vendor = "Eon",
- .name = "EN25P10",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B10,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25B20",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B20,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
- {32 * 1024, 1},
- {64 * 1024, 3}
- },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25B20T",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B20,
- .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, 3},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
- {4 * 1024, 2},
- },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25P20",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B20,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25B40",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B40,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
- {32 * 1024, 1},
- {64 * 1024, 7}
- },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25B40T",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B40,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {64 * 1024, 7},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
- {4 * 1024, 2},
- },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25P40",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B40,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25B80",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
- {32 * 1024, 1},
- {64 * 1024, 15}
- },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25B80T",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {64 * 1024, 15},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
- {4 * 1024, 2},
- },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25P80",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
.name = "EN25B16",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -4142,11 +3882,11 @@
{
.vendor = "Eon",
- .name = "EN25P16",
+ .name = "EN25B20",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B16,
- .total_size = 2048,
+ .model_id = EON_EN25B20,
+ .total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -4155,10 +3895,51 @@
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = {
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 3}
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25B20T",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B20,
+ .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, 3},
+ {32 * 1024, 1},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4243,24 +4024,64 @@
{
.vendor = "Eon",
- .name = "EN25P32", /* Uniform version of EN25B32 */
+ .name = "EN25B40",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B32,
- .total_size = 4096,
+ .model_id = EON_EN25B40,
+ .total_size = 512,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = {
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 7}
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25B40T",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B40,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {64 * 1024, 7},
+ {32 * 1024, 1},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4345,24 +4166,64 @@
{
.vendor = "Eon",
- .name = "EN25P64",
+ .name = "EN25B80",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B64,
- .total_size = 8192,
+ .model_id = EON_EN25B80,
+ .total_size = 1024,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = {
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 15}
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25B80T",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B80,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {64 * 1024, 15},
+ {32 * 1024, 1},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4451,6 +4312,41 @@
{
.vendor = "Eon",
+ .name = "EN25F16",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25F16,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 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_60,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
.name = "EN25F20",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -4489,111 +4385,6 @@
{
.vendor = "Eon",
- .name = "EN25F40",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F40,
- .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 = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- },
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25F80",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25F16",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F16,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 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_60,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
.name = "EN25F32",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -4629,6 +4420,41 @@
{
.vendor = "Eon",
+ .name = "EN25F40",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25F40,
+ .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 = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
.name = "EN25F64",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -4664,51 +4490,14 @@
{
.vendor = "Eon",
- .name = "EN25Q40",
+ .name = "EN25F80",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25Q40,
- .total_size = 512,
- .page_size = 256,
- /* OTP: 256B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25Q80(A)",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25Q80,
+ .model_id = EON_EN25F80,
.total_size = 1024,
.page_size = 256,
- /* OTP: 256B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
@@ -4735,6 +4524,276 @@
},
{
+ .vendor = "Eon",
+ .name = "EN25P05",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B05,
+ .total_size = 64,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25P10",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B10,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25P16",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B16,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25P20",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B20,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25P32", /* Uniform version of EN25B32 */
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B32,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25P40",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B40,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25P64",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B64,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25P80",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25B80,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25Q128",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25Q128,
+ .total_size = 16384,
+ .page_size = 256,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 4096} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {16 * 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,
+ },
+
+ {
/* Note: EN25D16 is an evil twin which shares the model ID
but has different write protection capabilities */
.vendor = "Eon",
@@ -4814,6 +4873,42 @@
{
.vendor = "Eon",
+ .name = "EN25Q40",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25Q40,
+ .total_size = 512,
+ .page_size = 256,
+ /* OTP: 256B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
.name = "EN25Q64",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -4850,15 +4945,53 @@
{
.vendor = "Eon",
- .name = "EN25Q128",
+ .name = "EN25Q80(A)",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25Q128,
+ .model_id = EON_EN25Q80,
+ .total_size = 1024,
+ .page_size = 256,
+ /* OTP: 256B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .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_60,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
+ .name = "EN25QH128",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25QH128,
.total_size = 16384,
.page_size = 256,
+ /* supports SFDP */
/* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ /* QPI enable 0x38, disable 0xFF */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
@@ -4870,17 +5003,18 @@
.eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { { 16384 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { { 16384 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
@@ -4999,44 +5133,6 @@
{
.vendor = "Eon",
- .name = "EN25QH128",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25QH128,
- .total_size = 16384,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 512B total; enter 0x3A */
- /* QPI enable 0x38, disable 0xFF */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 4096} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Eon",
.name = "EN25S10",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -5073,114 +5169,6 @@
{
.vendor = "Eon",
- .name = "EN25S20",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S20,
- .total_size = 256,
- .page_size = 256,
- /* OTP: 256B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25S40",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S40,
- .total_size = 512,
- .page_size = 256,
- /* OTP: 256B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .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 = { {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_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "Eon",
- .name = "EN25S80",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S80,
- .total_size = 1024,
- .page_size = 256,
- /* OTP: 256B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .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_60,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "Eon",
.name = "EN25S16",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -5220,6 +5208,42 @@
{
.vendor = "Eon",
+ .name = "EN25S20",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25S20,
+ .total_size = 256,
+ .page_size = 256,
+ /* OTP: 256B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "Eon",
.name = "EN25S32",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -5259,6 +5283,42 @@
{
.vendor = "Eon",
+ .name = "EN25S40",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25S40,
+ .total_size = 512,
+ .page_size = 256,
+ /* OTP: 256B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .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 = { {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_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "Eon",
.name = "EN25S64",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -5295,30 +5355,38 @@
{
.vendor = "Eon",
- .name = "EN29F010",
- .bustype = BUS_PARALLEL,
- .manufacture_id = EON_ID,
- .model_id = EON_EN29F010,
- .total_size = 128,
- .page_size = 128,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PRE,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .name = "EN25S80",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25S80,
+ .total_size = 1024,
+ .page_size = 256,
+ /* OTP: 256B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {16 * 1024, 8} },
- .block_erase = erase_sector_jedec,
- },
- {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
+ .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,
+ }
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {1650, 1950},
},
{
@@ -5387,59 +5455,30 @@
{
.vendor = "Eon",
- .name = "EN29LV040(A)",
+ .name = "EN29F010",
.bustype = BUS_PARALLEL,
.manufacture_id = EON_ID,
- .model_id = EON_EN29LV040,
- .total_size = 512,
- .page_size = 4 * 1024,
- .tested = TEST_OK_PREW,
+ .model_id = EON_EN29F010,
+ .total_size = 128,
+ .page_size = 128,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PRE,
.probe = probe_jedec,
- .probe_timing = TIMING_ZERO,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {16 * 1024, 8} },
.block_erase = erase_sector_jedec,
},
{
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {3000, 3600}, /* 3.0-3.6V for type -45R and 55R, others 2.7-3.6V */
- },
-
- {
- .vendor = "Eon",
- .name = "EN29LV640B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = EON_ID,
- .model_id = EON_EN29LV640B,
- .total_size = 8192,
- .page_size = 8192,
- .feature_bits = FEATURE_ADDR_SHIFTED,
- .tested = TEST_OK_PREW,
- .probe = probe_en29lv640b,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 127},
- },
- .block_erase = erase_block_jedec,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_en29lv640b,
- .read = read_memmapped,
- .voltage = {2700, 3600},
+ .voltage = {4500, 5500},
},
{
@@ -5557,95 +5596,59 @@
},
{
- .vendor = "ESI",
- .name = "ES25P40",
- .bustype = BUS_SPI,
- .manufacture_id = EXCEL_ID_NOPREFIX,
- .model_id = EXCEL_ES25P40,
+ .vendor = "Eon",
+ .name = "EN29LV040(A)",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = EON_ID,
+ .model_id = EON_EN29LV040,
.total_size = 512,
- .page_size = 256,
- /* 256-byte parameter page separate from memory array:
- * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .page_size = 4 * 1024,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
+ .block_erase = erase_sector_jedec,
+ },
+ {
.eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast Read (0x0B) supported */
- .voltage = {2700, 3600},
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {3000, 3600}, /* 3.0-3.6V for type -45R and 55R, others 2.7-3.6V */
},
{
- .vendor = "ESI",
- .name = "ES25P80",
- .bustype = BUS_SPI,
- .manufacture_id = EXCEL_ID_NOPREFIX,
- .model_id = EXCEL_ES25P80,
- .total_size = 1024,
- .page_size = 256,
- /* 256-byte parameter page separate from memory array:
- * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
+ .vendor = "Eon",
+ .name = "EN29LV640B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = EON_ID,
+ .model_id = EON_EN29LV640B,
+ .total_size = 8192,
+ .page_size = 8192,
+ .feature_bits = FEATURE_ADDR_SHIFTED,
+ .tested = TEST_OK_PREW,
+ .probe = probe_en29lv640b,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = {
+ {8 * 1024, 8},
+ {64 * 1024, 127},
+ },
+ .block_erase = erase_block_jedec,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast Read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ESI",
- .name = "ES25P16",
- .bustype = BUS_SPI,
- .manufacture_id = EXCEL_ID_NOPREFIX,
- .model_id = EXCEL_ES25P16,
- .total_size = 2 * 1024,
- .page_size = 256,
- /* 256-byte parameter page separate from memory array:
- * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .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_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast Read (0x0B) supported */
+ .write = write_en29lv640b,
+ .read = read_memmapped,
.voltage = {2700, 3600},
},
@@ -5844,33 +5847,33 @@
{
.vendor = "GigaDevice",
- .name = "GD25LQ40",
+ .name = "GD25B128B/GD25Q128B",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25LQ40,
- .total_size = 512,
+ .model_id = GIGADEVICE_GD25Q128,
+ .total_size = 16384,
.page_size = 256,
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 16} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -5878,16 +5881,16 @@
.unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1695, 1950},
+ .voltage = {2700, 3600},
},
{
.vendor = "GigaDevice",
- .name = "GD25LQ80",
+ .name = "GD25LQ128",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25LQ80,
- .total_size = 1024,
+ .model_id = GIGADEVICE_GD25LQ128,
+ .total_size = 16384,
.page_size = 256,
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
@@ -5897,19 +5900,19 @@
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 32} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6000,6 +6003,45 @@
{
.vendor = "GigaDevice",
+ .name = "GD25LQ40",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25LQ40,
+ .total_size = 512,
+ .page_size = 256,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .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 = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {1695, 1950},
+ },
+
+ {
+ .vendor = "GigaDevice",
.name = "GD25LQ64(B)",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
@@ -6039,11 +6081,11 @@
{
.vendor = "GigaDevice",
- .name = "GD25LQ128",
+ .name = "GD25LQ80",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25LQ128,
- .total_size = 16384,
+ .model_id = GIGADEVICE_GD25LQ80,
+ .total_size = 1024,
.page_size = 256,
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
@@ -6053,19 +6095,19 @@
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {32 * 1024, 32} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6078,41 +6120,6 @@
{
.vendor = "GigaDevice",
- .name = "GD25Q512",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q512,
- .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 = { {4 * 1024, 16} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "GigaDevice",
.name = "GD25Q10",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
@@ -6151,277 +6158,6 @@
{
.vendor = "GigaDevice",
- .name = "GD25Q20(B)",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q20,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 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 = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "GigaDevice",
- .name = "GD25Q40(B)",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q40,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {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_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "GigaDevice",
- .name = "GD25Q80(B)",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q80,
- .total_size = 1024,
- .page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
- .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 = { {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,
- }
- },
- .printlock = spi_prettyprint_status_register_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "GigaDevice",
- .name = "GD25Q16(B)",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q16,
- .total_size = 2048,
- .page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
- .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 = { {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_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "GigaDevice",
- .name = "GD25Q32(B)",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q32,
- .total_size = 4096,
- .page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 1024} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {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_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "GigaDevice",
- .name = "GD25Q64(B)",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q64,
- .total_size = 8192,
- .page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 2048} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {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_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "GigaDevice",
- .name = "GD25B128B/GD25Q128B",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q128,
- .total_size = 16384,
- .page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 4096} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 512} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "GigaDevice",
.name = "GD25Q128C",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
@@ -6463,6 +6199,273 @@
{
.vendor = "GigaDevice",
+ .name = "GD25Q16(B)",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25Q16,
+ .total_size = 2048,
+ .page_size = 256,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
+ .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 = { {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_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "GigaDevice",
+ .name = "GD25Q20(B)",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25Q20,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 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 = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "GigaDevice",
+ .name = "GD25Q32(B)",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25Q32,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {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_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "GigaDevice",
+ .name = "GD25Q40(B)",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25Q40,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {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_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "GigaDevice",
+ .name = "GD25Q512",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25Q512,
+ .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 = { {4 * 1024, 16} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "GigaDevice",
+ .name = "GD25Q64(B)",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25Q64,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 2048} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {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_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "GigaDevice",
+ .name = "GD25Q80(B)",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25Q80,
+ .total_size = 1024,
+ .page_size = 256,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
+ .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 = { {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,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "GigaDevice",
.name = "GD25T80",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
@@ -6502,6 +6505,46 @@
{
.vendor = "GigaDevice",
+ .name = "GD25VQ16C",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25VQ16C,
+ .total_size = 2 * 1024,
+ .page_size = 256,
+ /* Supports SFDP */
+ /* OTP: 1024B total; read 0x48, write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 32 * 1024, 64} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { { 64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "GigaDevice",
.name = "GD25VQ21B",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
@@ -6659,43 +6702,35 @@
},
{
- .vendor = "GigaDevice",
- .name = "GD25VQ16C",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25VQ16C,
- .total_size = 2 * 1024,
- .page_size = 256,
- /* Supports SFDP */
- /* OTP: 1024B total; read 0x48, write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .vendor = "Hyundai",
+ .name = "HY29F002B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = HYUNDAI_ID,
+ .model_id = HYUNDAI_HY29F002B,
+ .total_size = 256,
+ .page_size = 256 * 1024,
+ .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
+ .eraseblocks = {
+ {16 * 1024, 1},
+ {8 * 1024, 2},
+ {32 * 1024, 1},
+ {64 * 1024, 3},
+ },
+ .block_erase = erase_sector_jedec,
}, {
- .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,
- }
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2300, 3600},
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
},
{
@@ -6732,38 +6767,6 @@
{
.vendor = "Hyundai",
- .name = "HY29F002B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = HYUNDAI_ID,
- .model_id = HYUNDAI_HY29F002B,
- .total_size = 256,
- .page_size = 256 * 1024,
- .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {16 * 1024, 1},
- {8 * 1024, 2},
- {32 * 1024, 1},
- {64 * 1024, 3},
- },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
- },
-
- {
- .vendor = "Hyundai",
.name = "HY29F040A",
.bustype = BUS_PARALLEL,
.manufacture_id = HYUNDAI_ID,
@@ -6790,504 +6793,6 @@
},
{
- .vendor = "Intel",
- .name = "25F160S33B8",
- .bustype = BUS_SPI,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_25F160S33B8,
- .total_size = 2048,
- .page_size = 256,
- /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 8 so-called "parameter blocks" with
- * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 31} // inaccessible
- },
- .block_erase = spi_block_erase_40,
- }, { */
- .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_bp2_ep_srwd,
- .unlock = spi_disable_blockprotect_bp2_ep_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* also fast read 0x0B */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Intel",
- .name = "25F160S33T8",
- .bustype = BUS_SPI,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_25F160S33T8,
- .total_size = 2048,
- .page_size = 256,
- /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 8 so-called "parameter blocks" with
- * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {64 * 1024, 31}, // inaccessible
- {8 * 1024, 8}
- },
- .block_erase = spi_block_erase_40,
- }, { */
- .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_bp2_ep_srwd,
- .unlock = spi_disable_blockprotect_bp2_ep_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* also fast read 0x0B */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Intel",
- .name = "25F320S33B8",
- .bustype = BUS_SPI,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_25F320S33B8,
- .total_size = 4096,
- .page_size = 256,
- /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 8 so-called "parameter blocks" with
- * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 63} // inaccessible
- },
- .block_erase = spi_block_erase_40,
- }, { */
- .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_bp2_ep_srwd,
- .unlock = spi_disable_blockprotect_bp2_ep_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* also fast read 0x0B */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Intel",
- .name = "25F320S33T8",
- .bustype = BUS_SPI,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_25F320S33T8,
- .total_size = 4096,
- .page_size = 256,
- /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 8 so-called "parameter blocks" with
- * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {64 * 1024, 63}, // inaccessible
- {8 * 1024, 8}
- },
- .block_erase = spi_block_erase_40,
- }, { */
- .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_bp2_ep_srwd,
- .unlock = spi_disable_blockprotect_bp2_ep_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* also fast read 0x0B */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Intel",
- .name = "25F640S33B8",
- .bustype = BUS_SPI,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_25F640S33B8,
- .total_size = 8192,
- .page_size = 256,
- /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 8 so-called "parameter blocks" with
- * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 127} // inaccessible
- },
- .block_erase = spi_block_erase_40,
- }, { */
- .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_bp2_ep_srwd,
- .unlock = spi_disable_blockprotect_bp2_ep_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* also fast read 0x0B */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Intel",
- .name = "25F640S33T8",
- .bustype = BUS_SPI,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_25F640S33T8,
- .total_size = 8192,
- .page_size = 256,
- /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 8 so-called "parameter blocks" with
- * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {64 * 1024, 127}, // inaccessible
- {8 * 1024, 8}
- },
- .block_erase = spi_block_erase_40,
- }, { */
- .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_bp2_ep_srwd,
- .unlock = spi_disable_blockprotect_bp2_ep_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* also fast read 0x0B */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Intel",
- .name = "28F001BN/BX-B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_28F001B,
- .total_size = 128,
- .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {8 * 1024, 1},
- {4 * 1024, 2},
- {112 * 1024, 1},
- },
- .block_erase = erase_block_82802ab,
- },
- },
- .write = write_82802ab,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "Intel",
- .name = "28F001BN/BX-T",
- .bustype = BUS_PARALLEL,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_28F001T,
- .total_size = 128,
- .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {112 * 1024, 1},
- {4 * 1024, 2},
- {8 * 1024, 1},
- },
- .block_erase = erase_block_82802ab,
- },
- },
- .write = write_82802ab,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "Intel",
- .name = "28F002BC/BL/BV/BX-T",
- .bustype = BUS_PARALLEL,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_28F002T,
- .total_size = 256,
- .page_size = 256 * 1024,
- .tested = TEST_OK_PRE,
- .probe = probe_82802ab,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {128 * 1024, 1},
- {96 * 1024, 1},
- {8 * 1024, 2},
- {16 * 1024, 1},
- },
- .block_erase = erase_block_82802ab,
- },
- },
- .write = write_82802ab,
- .read = read_memmapped,
- },
-
- {
- .vendor = "Intel",
- .name = "28F008S3/S5/SC",
- .bustype = BUS_PARALLEL,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_28F004S3,
- .total_size = 512,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_82802ab,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = erase_block_82802ab,
- },
- },
- .unlock = unlock_28f004s5,
- .write = write_82802ab,
- .read = read_memmapped,
- },
-
- {
- .vendor = "Intel",
- .name = "28F004B5/BE/BV/BX-B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_28F004B,
- .total_size = 512,
- .page_size = 128 * 1024, /* maximal block size */
- .tested = TEST_UNTESTED,
- .probe = probe_82802ab,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {16 * 1024, 1},
- {8 * 1024, 2},
- {96 * 1024, 1},
- {128 * 1024, 3},
- },
- .block_erase = erase_block_82802ab,
- },
- },
- .write = write_82802ab,
- .read = read_memmapped,
- },
-
- {
- .vendor = "Intel",
- .name = "28F004B5/BE/BV/BX-T",
- .bustype = BUS_PARALLEL,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_28F004T,
- .total_size = 512,
- .page_size = 128 * 1024, /* maximal block size */
- .tested = TEST_UNTESTED,
- .probe = probe_82802ab,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {128 * 1024, 3},
- {96 * 1024, 1},
- {8 * 1024, 2},
- {16 * 1024, 1},
- },
- .block_erase = erase_block_82802ab,
- },
- },
- .write = write_82802ab,
- .read = read_memmapped,
- },
-
- {
- .vendor = "Intel",
- .name = "28F400BV/BX/CE/CV-B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_28F400B,
- .total_size = 512,
- .page_size = 128 * 1024, /* maximal block size */
- .feature_bits = FEATURE_ADDR_SHIFTED,
- .tested = TEST_UNTESTED,
- .probe = probe_82802ab,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {16 * 1024, 1},
- {8 * 1024, 2},
- {96 * 1024, 1},
- {128 * 1024, 3},
- },
- .block_erase = erase_block_82802ab,
- },
- },
- .write = write_82802ab,
- .read = read_memmapped,
- },
-
- {
- .vendor = "Intel",
- .name = "28F400BV/BX/CE/CV-T",
- .bustype = BUS_PARALLEL,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_28F400T,
- .total_size = 512,
- .page_size = 128 * 1024, /* maximal block size */
- .feature_bits = FEATURE_ADDR_SHIFTED,
- .tested = TEST_UNTESTED,
- .probe = probe_82802ab,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {128 * 1024, 3},
- {96 * 1024, 1},
- {8 * 1024, 2},
- {16 * 1024, 1},
- },
- .block_erase = erase_block_82802ab,
- },
- },
- .write = write_82802ab,
- .read = read_memmapped,
- },
-
- {
- .vendor = "Intel",
- .name = "82802AB",
- .bustype = BUS_FWH,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_82802AB,
- .total_size = 512,
- .page_size = 64 * 1024,
- .feature_bits = FEATURE_REGISTERMAP,
- .tested = TEST_OK_PR,
- .probe = probe_82802ab,
- .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = erase_block_82802ab,
- },
- },
- .unlock = unlock_regspace2_uniform_64k,
- .write = write_82802ab,
- .read = read_memmapped,
- .voltage = {3000, 3600},
- },
-
- {
- .vendor = "Intel",
- .name = "82802AC",
- .bustype = BUS_FWH,
- .manufacture_id = INTEL_ID,
- .model_id = INTEL_82802AC,
- .total_size = 1024,
- .page_size = 64 * 1024,
- .feature_bits = FEATURE_REGISTERMAP,
- .tested = TEST_OK_PR,
- .probe = probe_82802ab,
- .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = erase_block_82802ab,
- },
- },
- .unlock = unlock_regspace2_uniform_64k,
- .write = write_82802ab,
- .read = read_memmapped,
- .voltage = {3000, 3600},
- },
-
- {
.vendor = "ISSI",
.name = "IS25LP064",
.bustype = BUS_SPI,
@@ -7627,6 +7132,33 @@
{
.vendor = "ISSI",
+ .name = "IS29GL064H/L",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ISSI_ID,
+ .model_id = ISSI_PMC_IS29GL064HL,
+ .total_size = 8192,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "ISSI",
.name = "IS29GL064T",
.bustype = BUS_PARALLEL,
.manufacture_id = ISSI_ID,
@@ -7657,33 +7189,6 @@
{
.vendor = "ISSI",
- .name = "IS29GL064H/L",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ISSI_ID,
- .model_id = ISSI_PMC_IS29GL064HL,
- .total_size = 8192,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ISSI",
.name = "IS29GL128H/L",
.bustype = BUS_PARALLEL,
.manufacture_id = ISSI_ID,
@@ -7710,6 +7215,520 @@
},
{
+ .vendor = "Intel",
+ .name = "25F160S33B8",
+ .bustype = BUS_SPI,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_25F160S33B8,
+ .total_size = 2048,
+ .page_size = 256,
+ /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 8 so-called "parameter blocks" with
+ * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {8 * 1024, 8},
+ {64 * 1024, 31} // inaccessible
+ },
+ .block_erase = spi_block_erase_40,
+ }, { */
+ .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_bp2_ep_srwd,
+ .unlock = spi_disable_blockprotect_bp2_ep_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* also fast read 0x0B */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "25F160S33T8",
+ .bustype = BUS_SPI,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_25F160S33T8,
+ .total_size = 2048,
+ .page_size = 256,
+ /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 8 so-called "parameter blocks" with
+ * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {64 * 1024, 31}, // inaccessible
+ {8 * 1024, 8}
+ },
+ .block_erase = spi_block_erase_40,
+ }, { */
+ .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_bp2_ep_srwd,
+ .unlock = spi_disable_blockprotect_bp2_ep_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* also fast read 0x0B */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "25F320S33B8",
+ .bustype = BUS_SPI,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_25F320S33B8,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 8 so-called "parameter blocks" with
+ * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {8 * 1024, 8},
+ {64 * 1024, 63} // inaccessible
+ },
+ .block_erase = spi_block_erase_40,
+ }, { */
+ .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_bp2_ep_srwd,
+ .unlock = spi_disable_blockprotect_bp2_ep_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* also fast read 0x0B */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "25F320S33T8",
+ .bustype = BUS_SPI,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_25F320S33T8,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 8 so-called "parameter blocks" with
+ * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {64 * 1024, 63}, // inaccessible
+ {8 * 1024, 8}
+ },
+ .block_erase = spi_block_erase_40,
+ }, { */
+ .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_bp2_ep_srwd,
+ .unlock = spi_disable_blockprotect_bp2_ep_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* also fast read 0x0B */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "25F640S33B8",
+ .bustype = BUS_SPI,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_25F640S33B8,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 8 so-called "parameter blocks" with
+ * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {8 * 1024, 8},
+ {64 * 1024, 127} // inaccessible
+ },
+ .block_erase = spi_block_erase_40,
+ }, { */
+ .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_bp2_ep_srwd,
+ .unlock = spi_disable_blockprotect_bp2_ep_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* also fast read 0x0B */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "25F640S33T8",
+ .bustype = BUS_SPI,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_25F640S33T8,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 8 so-called "parameter blocks" with
+ * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {64 * 1024, 127}, // inaccessible
+ {8 * 1024, 8}
+ },
+ .block_erase = spi_block_erase_40,
+ }, { */
+ .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_bp2_ep_srwd,
+ .unlock = spi_disable_blockprotect_bp2_ep_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* also fast read 0x0B */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "28F001BN/BX-B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_28F001B,
+ .total_size = 128,
+ .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ {112 * 1024, 1},
+ },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .write = write_82802ab,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "28F001BN/BX-T",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_28F001T,
+ .total_size = 128,
+ .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {112 * 1024, 1},
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .write = write_82802ab,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "28F002BC/BL/BV/BX-T",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_28F002T,
+ .total_size = 256,
+ .page_size = 256 * 1024,
+ .tested = TEST_OK_PRE,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {128 * 1024, 1},
+ {96 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
+ },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .write = write_82802ab,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "28F004B5/BE/BV/BX-B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_28F004B,
+ .total_size = 512,
+ .page_size = 128 * 1024, /* maximal block size */
+ .tested = TEST_UNTESTED,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {16 * 1024, 1},
+ {8 * 1024, 2},
+ {96 * 1024, 1},
+ {128 * 1024, 3},
+ },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .write = write_82802ab,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "28F004B5/BE/BV/BX-T",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_28F004T,
+ .total_size = 512,
+ .page_size = 128 * 1024, /* maximal block size */
+ .tested = TEST_UNTESTED,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {128 * 1024, 3},
+ {96 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
+ },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .write = write_82802ab,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "28F008S3/S5/SC",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_28F004S3,
+ .total_size = 512,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .unlock = unlock_28f004s5,
+ .write = write_82802ab,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "28F400BV/BX/CE/CV-B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_28F400B,
+ .total_size = 512,
+ .page_size = 128 * 1024, /* maximal block size */
+ .feature_bits = FEATURE_ADDR_SHIFTED,
+ .tested = TEST_UNTESTED,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {16 * 1024, 1},
+ {8 * 1024, 2},
+ {96 * 1024, 1},
+ {128 * 1024, 3},
+ },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .write = write_82802ab,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "28F400BV/BX/CE/CV-T",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_28F400T,
+ .total_size = 512,
+ .page_size = 128 * 1024, /* maximal block size */
+ .feature_bits = FEATURE_ADDR_SHIFTED,
+ .tested = TEST_UNTESTED,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {128 * 1024, 3},
+ {96 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
+ },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .write = write_82802ab,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "82802AB",
+ .bustype = BUS_FWH,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_82802AB,
+ .total_size = 512,
+ .page_size = 64 * 1024,
+ .feature_bits = FEATURE_REGISTERMAP,
+ .tested = TEST_OK_PR,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .unlock = unlock_regspace2_uniform_64k,
+ .write = write_82802ab,
+ .read = read_memmapped,
+ .voltage = {3000, 3600},
+ },
+
+ {
+ .vendor = "Intel",
+ .name = "82802AC",
+ .bustype = BUS_FWH,
+ .manufacture_id = INTEL_ID,
+ .model_id = INTEL_82802AC,
+ .total_size = 1024,
+ .page_size = 64 * 1024,
+ .feature_bits = FEATURE_REGISTERMAP,
+ .tested = TEST_OK_PR,
+ .probe = probe_82802ab,
+ .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = erase_block_82802ab,
+ },
+ },
+ .unlock = unlock_regspace2_uniform_64k,
+ .write = write_82802ab,
+ .read = read_memmapped,
+ .voltage = {3000, 3600},
+ },
+
+ {
+ .vendor = "Macronix",
+ .name = "MX23L12854",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX23L12854,
+ .total_size = 16384,
+ .page_size = 256,
+ .tested = {.probe = NT, .read = NT, .erase = NA, .write = NA},
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .write = NULL, /* MX23L12854 is a mask ROM, so it is read-only */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {3000, 3600},
+ },
+
+ {
.vendor = "Macronix",
.name = "MX23L1654",
.bustype = BUS_SPI,
@@ -7759,61 +7778,6 @@
{
.vendor = "Macronix",
- .name = "MX23L12854",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX23L12854,
- .total_size = 16384,
- .page_size = 256,
- .tested = {.probe = NT, .read = NT, .erase = NA, .write = NA},
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .write = NULL, /* MX23L12854 is a mask ROM, so it is read-only */
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {3000, 3600},
- },
-
- {
- .vendor = "Macronix",
- .name = "MX25L512(E)/MX25V512(C)",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L512,
- .total_size = 64,
- .page_size = 256,
- /* MX25L512E supports SFDP */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 16} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .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,
- },
- },
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported, MX25L512E supports dual I/O */
- .voltage = {2700, 3600}, /* 2.35-3.6V for MX25V512(C) */
- },
-
- {
- .vendor = "Macronix",
.name = "MX25L1005(C)/MX25L1006E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
@@ -7850,37 +7814,35 @@
{
.vendor = "Macronix",
- .name = "MX25L2005(C)/MX25L2006E",
+ .name = "MX25L12805D",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L2005,
- .total_size = 256,
+ .model_id = MACRONIX_MX25L12805D,
+ .total_size = 16384,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 64B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- },
+ }
},
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
@@ -7888,37 +7850,39 @@
{
.vendor = "Macronix",
- .name = "MX25L4005(A/C)/MX25L4006E",
+ .name = "MX25L12835F/MX25L12845E/MX25L12865E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L4005,
- .total_size = 512,
+ .model_id = MACRONIX_MX25L12805D,
+ .total_size = 16384,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- },
+ }
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
+ /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
@@ -7926,46 +7890,6 @@
{
.vendor = "Macronix",
- .name = "MX25L8005/MX25L8006E/MX25L8008E/MX25V8005",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L8005,
- .total_size = 1024,
- .page_size = 256,
- /* MX25L8006E, MX25L8008E support SFDP */
- /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L8006E, MX25L8008E only) */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_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,
- },
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600}, /* 2.35-3.6V for MX25V8005 */
- },
-
- {
- .vendor = "Macronix",
.name = "MX25L1605",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
@@ -8147,6 +8071,93 @@
{
.vendor = "Macronix",
+ .name = "MX25L2005(C)/MX25L2006E",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX25L2005,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .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_bp1_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Macronix",
+ .name = "MX25L25635F",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX25L25635F,
+ .total_size = 32768,
+ .page_size = 256,
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 8192} },
+ .block_erase = spi_block_erase_21,
+ }, {
+ .eraseblocks = { {4 * 1024, 8192} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 1024} },
+ .block_erase = spi_block_erase_5c,
+ }, {
+ .eraseblocks = { {32 * 1024, 1024} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 512} },
+ .block_erase = spi_block_erase_dc,
+ }, {
+ .eraseblocks = { {64 * 1024, 512} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Macronix",
.name = "MX25L3205(A)",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
@@ -8257,6 +8268,42 @@
{
.vendor = "Macronix",
+ .name = "MX25L3235D",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX25L3235D,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 256B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Macronix",
.name = "MX25L3273E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
@@ -8296,42 +8343,83 @@
{
.vendor = "Macronix",
- .name = "MX25L3235D",
+ .name = "MX25L4005(A/C)/MX25L4006E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L3235D,
- .total_size = 4096,
+ .model_id = MACRONIX_MX25L4005,
+ .total_size = 512,
.page_size = 256,
- /* OTP: 256B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- }
+ },
},
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .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 = "Macronix",
+ .name = "MX25L512(E)/MX25V512(C)",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX25L512,
+ .total_size = 64,
+ .page_size = 256,
+ /* MX25L512E supports SFDP */
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 16} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .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,
+ },
+ },
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported, MX25L512E supports dual I/O */
+ .voltage = {2700, 3600}, /* 2.35-3.6V for MX25V512(C) */
+ },
+
+ {
+ .vendor = "Macronix",
.name = "MX25L6405",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
@@ -8484,13 +8572,13 @@
{
.vendor = "Macronix",
- .name = "MX25L12805D",
+ .name = "MX25L6495F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L12805D,
- .total_size = 16384,
+ .model_id = MACRONIX_MX25L6495F,
+ .total_size = 8192,
.page_size = 256,
- /* OTP: 64B total; enter 0xB1, exit 0xC1 */
+ /* OTP: 1024B total; enter 0xB1, exit 0xC1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
@@ -8498,36 +8586,117 @@
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {32 * 1024, 256} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
- .name = "MX25L12835F/MX25L12845E/MX25L12865E",
+ .name = "MX25L8005/MX25L8006E/MX25L8008E/MX25V8005",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L12805D,
+ .model_id = MACRONIX_MX25L8005,
+ .total_size = 1024,
+ .page_size = 256,
+ /* MX25L8006E, MX25L8008E support SFDP */
+ /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L8006E, MX25L8008E only) */
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_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,
+ },
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600}, /* 2.35-3.6V for MX25V8005 */
+ },
+
+ {
+ .vendor = "Macronix",
+ .name = "MX25R6435F",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX25R6435F,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 1024B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 2048} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {32 * 1024, 256} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .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_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {1650, 3600},
+ },
+
+ {
+ .vendor = "Macronix",
+ .name = "MX25U12835F",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX25U12835E,
.total_size = 16384,
.page_size = 256,
/* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
@@ -8550,148 +8719,10 @@
.block_erase = spi_block_erase_c7,
}
},
- /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Macronix",
- .name = "MX25L25635F",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L25635F,
- .total_size = 32768,
- .page_size = 256,
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_21,
- }, {
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 1024} },
- .block_erase = spi_block_erase_5c,
- }, {
- .eraseblocks = { {32 * 1024, 1024} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_dc,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Macronix",
- .name = "MX66L51235F",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX66L51235F,
- .total_size = 65536,
- .page_size = 256,
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 16384} },
- .block_erase = spi_block_erase_21,
- }, {
- .eraseblocks = { {4 * 1024, 16384} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 2048} },
- .block_erase = spi_block_erase_5c,
- }, {
- .eraseblocks = { {32 * 1024, 2048} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 1024} },
- .block_erase = spi_block_erase_dc,
- }, {
- .eraseblocks = { {64 * 1024, 1024} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {64 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {64 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Macronix",
- .name = "MX25U8032E",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U8032E,
- .total_size = 1024,
- .page_size = 256,
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .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 = { {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,
- }
- },
/* TODO: security register */
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
+ .write = spi_chip_write_256, /* Multi I/O supported */
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
.voltage = {1650, 2000},
},
@@ -8739,130 +8770,6 @@
{
.vendor = "Macronix",
- .name = "MX25U3235E/F",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U3235E,
- .total_size = 4096,
- .page_size = 256,
- /* F model supports SFDP */
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .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,
- }
- },
- /* TODO: security register */
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1650, 2000},
- },
-
- {
- .vendor = "Macronix",
- .name = "MX25U6435E/F",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U6435E,
- .total_size = 8192,
- .page_size = 256,
- /* F model supports SFDP */
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .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,
- }
- },
- /* TODO: security register */
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1650, 2000},
- },
-
- {
- .vendor = "Macronix",
- .name = "MX25U12835F",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U12835E,
- .total_size = 16384,
- .page_size = 256,
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 4096} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 512} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- /* TODO: security register */
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1650, 2000},
- },
-
- {
- .vendor = "Macronix",
.name = "MX25U25635F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
@@ -8912,6 +8819,48 @@
{
.vendor = "Macronix",
+ .name = "MX25U3235E/F",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX25U3235E,
+ .total_size = 4096,
+ .page_size = 256,
+ /* F model supports SFDP */
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .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,
+ }
+ },
+ /* TODO: security register */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {1650, 2000},
+ },
+
+ {
+ .vendor = "Macronix",
.name = "MX25U51245G",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
@@ -8961,14 +8910,16 @@
{
.vendor = "Macronix",
- .name = "MX25L6495F",
+ .name = "MX25U6435E/F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L6495F,
+ .model_id = MACRONIX_MX25U6435E,
.total_size = 8192,
.page_size = 256,
- /* OTP: 1024B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ /* F model supports SFDP */
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
@@ -8978,12 +8929,12 @@
.eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
.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,
}, {
@@ -8991,49 +8942,52 @@
.block_erase = spi_block_erase_c7,
}
},
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Macronix",
- .name = "MX25R6435F",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25R6435F,
- .total_size = 8192,
- .page_size = 256,
- /* OTP: 1024B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 2048} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32 * 1024, 256} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
+ /* TODO: security register */
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1650, 3600},
+ .voltage = {1650, 2000},
+ },
+
+ {
+ .vendor = "Macronix",
+ .name = "MX25U8032E",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX25U8032E,
+ .total_size = 1024,
+ .page_size = 256,
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ .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 = { {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,
+ }
+ },
+ /* TODO: security register */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {1650, 2000},
},
{
@@ -9259,6 +9213,33 @@
{
.vendor = "Macronix",
+ .name = "MX29GL128F",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX29GL128F,
+ .total_size = 16384,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {128 * 1024, 128} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Macronix",
.name = "MX29GL320EB",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
@@ -9289,6 +9270,33 @@
{
.vendor = "Macronix",
+ .name = "MX29GL320EH/L",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX29GL320EHL,
+ .total_size = 4096,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Macronix",
.name = "MX29GL320ET",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
@@ -9319,33 +9327,6 @@
{
.vendor = "Macronix",
- .name = "MX29GL320EH/L",
- .bustype = BUS_PARALLEL,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX29GL320EHL,
- .total_size = 4096,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Macronix",
.name = "MX29GL640EB",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
@@ -9376,6 +9357,33 @@
{
.vendor = "Macronix",
+ .name = "MX29GL640EH/L",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX29GL640EHL,
+ .total_size = 8192,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Macronix",
.name = "MX29GL640ET",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
@@ -9406,60 +9414,6 @@
{
.vendor = "Macronix",
- .name = "MX29GL640EH/L",
- .bustype = BUS_PARALLEL,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX29GL640EHL,
- .total_size = 8192,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Macronix",
- .name = "MX29GL128F",
- .bustype = BUS_PARALLEL,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX29GL128F,
- .total_size = 16384,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {128 * 1024, 128} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Macronix",
.name = "MX29LV040",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
@@ -9486,31 +9440,51 @@
},
{
- .vendor = "Micron/Numonyx/ST",
- .name = "M25P05-A",
+ .vendor = "Macronix",
+ .name = "MX66L51235F",
.bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P05A,
- .total_size = 64,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX66L51235F,
+ .total_size = 65536,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {4 * 1024, 16384} },
+ .block_erase = spi_block_erase_21,
+ }, {
+ .eraseblocks = { {4 * 1024, 16384} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 2048} },
+ .block_erase = spi_block_erase_5c,
+ }, {
+ .eraseblocks = { {32 * 1024, 2048} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 1024} },
+ .block_erase = spi_block_erase_dc,
+ }, {
+ .eraseblocks = { {64 * 1024, 1024} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {64 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {64 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* TODO: check */
+ /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
@@ -9550,11 +9524,11 @@
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25P10-A",
+ .name = "M25P05-A",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25P10A,
- .total_size = 128,
+ .model_id = ST_M25P05A,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -9563,10 +9537,10 @@
.block_erasers =
{
{
- .eraseblocks = { {32 * 1024, 4} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9608,6 +9582,93 @@
},
{
+ .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_PREW,
+ .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_bp3_srwd, /* TODO: check */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P128",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P128,
+ .total_size = 16384,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* TODO: check */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P16",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P16,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .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_bp3_srwd, /* TODO: check */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
.vendor = "Micron/Numonyx/ST", /* Numonyx */
.name = "M25P20",
.bustype = BUS_SPI,
@@ -9666,6 +9727,35 @@
},
{
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P32",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25P32,
+ .total_size = 4096,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* TODO: check */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
.vendor = "Micron/Numonyx/ST", /* Numonyx */
.name = "M25P40",
.bustype = BUS_SPI,
@@ -9724,93 +9814,6 @@
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25P80",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* TODO: check */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Micron/Numonyx/ST",
- .name = "M25P16",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P16,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .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_bp3_srwd, /* TODO: check */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Micron/Numonyx/ST",
- .name = "M25P32",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P32,
- .total_size = 4096,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* TODO: check */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Micron/Numonyx/ST",
.name = "M25P64",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -9840,11 +9843,11 @@
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25P128",
+ .name = "M25P80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25P128,
- .total_size = 16384,
+ .model_id = ST_M25P80,
+ .total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -9853,10 +9856,10 @@
.block_erasers =
{
{
- .eraseblocks = { {256 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9901,6 +9904,38 @@
{
.vendor = "Micron/Numonyx/ST",
+ .name = "M25PE16",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PE16,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
.name = "M25PE20",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -9997,71 +10032,6 @@
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25PE16",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PE16,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Micron/Numonyx/ST",
- .name = "M25PX80",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25PX80,
- .total_size = 1024,
- .page_size = 256,
- /* OTP: 64B total; read 0x4B, write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 256 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd, /* bit5: T/B */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Micron/Numonyx/ST",
.name = "M25PX16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -10161,6 +10131,39 @@
{
.vendor = "Micron/Numonyx/ST",
+ .name = "M25PX80",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M25PX80,
+ .total_size = 1024,
+ .page_size = 256,
+ /* OTP: 64B total; read 0x4B, write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 256 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd, /* 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 = "M45PE10",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -10189,6 +10192,34 @@
{
.vendor = "Micron/Numonyx/ST",
+ .name = "M45PE16",
+ .bustype = BUS_SPI,
+ .manufacture_id = ST_ID,
+ .model_id = ST_M45PE16,
+ .total_size = 2048,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {256, 8192} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_default_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Micron/Numonyx/ST",
.name = "M45PE20",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -10273,34 +10304,6 @@
{
.vendor = "Micron/Numonyx/ST",
- .name = "M45PE16",
- .bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M45PE16,
- .total_size = 2048,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {256, 8192} },
- .block_erase = spi_block_erase_db,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }
- },
- .printlock = spi_prettyprint_status_register_default_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
- .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Micron/Numonyx/ST",
.name = "N25Q016",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
@@ -10852,6 +10855,41 @@
{
.vendor = "Nantronics",
+ .name = "N25S16",
+ .bustype = BUS_SPI,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S16,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Nantronics",
.name = "N25S20",
.bustype = BUS_SPI,
.manufacture_id = NANTRONICS_ID_NOPREFIX,
@@ -10971,117 +11009,6 @@
},
{
- .vendor = "Nantronics",
- .name = "N25S16",
- .bustype = BUS_SPI,
- .manufacture_id = NANTRONICS_ID_NOPREFIX,
- .model_id = NANTRONICS_N25S16,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "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,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .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 = { {32 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .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 = "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 = { {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 = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .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 = "Pm25LD010(C)",
.bustype = BUS_SPI,
@@ -11197,6 +11124,121 @@
{
.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,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .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 = { {32 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .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 = "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 = { {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 = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .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 = "Pm25LQ016",
+ .bustype = BUS_SPI,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LQ016,
+ .total_size = 2048,
+ .page_size = 256,
+ /* OTP: 256B total; read 0x4B, write 0xB1 */
+ .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 = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "PMC",
.name = "Pm25LQ020",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
@@ -11236,6 +11278,45 @@
{
.vendor = "PMC",
+ .name = "Pm25LQ032C",
+ .bustype = BUS_SPI,
+ .manufacture_id = PMC_ID,
+ .model_id = PMC_PM25LQ032C,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 64B total; read 0x4B, write 0xB1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {4096 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {4096 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "PMC",
.name = "Pm25LQ040",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
@@ -11314,116 +11395,6 @@
{
.vendor = "PMC",
- .name = "Pm25LQ016",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LQ016,
- .total_size = 2048,
- .page_size = 256,
- /* OTP: 256B total; read 0x4B, write 0xB1 */
- .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 = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "PMC",
- .name = "Pm25LQ032C",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LQ032C,
- .total_size = 4096,
- .page_size = 256,
- /* OTP: 64B total; read 0x4B, write 0xB1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 1024} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 1024} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {4096 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {4096 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "PMC",
- .name = "Pm25LV512(A)",
- .bustype = BUS_SPI,
- .manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM25LV512,
- .total_size = 64,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_res2, /* The continuation code is transferred as the 3rd byte m( */
- .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 = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "PMC",
.name = "Pm25LV010",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID_NOPREFIX,
@@ -11488,6 +11459,44 @@
{
.vendor = "PMC",
+ .name = "Pm25LV016B",
+ .bustype = BUS_SPI,
+ .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_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .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} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "PMC",
.name = "Pm25LV020",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
@@ -11590,36 +11599,30 @@
{
.vendor = "PMC",
- .name = "Pm25LV016B",
+ .name = "Pm25LV512(A)",
.bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV016B,
- .total_size = 2048,
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM25LV512,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_res2, /* The continuation code is transferred as the 3rd byte m( */
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 16} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) supported */
@@ -11628,38 +11631,6 @@
{
.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,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {128 * 1024, 1},
- {96 * 1024, 1},
- {8 * 1024, 2},
- {16 * 1024, 1},
- },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "PMC",
.name = "Pm29F002B",
.bustype = BUS_PARALLEL,
.manufacture_id = PMC_ID_NOPREFIX,
@@ -11692,6 +11663,38 @@
{
.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,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {128 * 1024, 1},
+ {96 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
+ },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "PMC",
.name = "Pm39LV010",
.bustype = BUS_PARALLEL,
.manufacture_id = PMC_ID_NOPREFIX,
@@ -11873,1138 +11876,6 @@
},
{
- .vendor = "Sanyo",
- .name = "LE25FW106",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW106,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {2 * 1024, 64} },
- .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_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp1_srwd, /* FIXME: Add ERSER error flag. */
- .unlock = spi_disable_blockprotect_bp1_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW406A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW406A,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .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_plain,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU106B",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU106B,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- /* FIXME: Is this correct?
- {
- .eraseblocks = { {2 * 1024, 64} },
- .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_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect_bp1_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU206",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU206,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .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_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect_bp1_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU206A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU206A,
- .total_size = 256,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .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 = { {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_bp2_srwd,
- .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU406B",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU406B,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .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_bp2_srwd,
- .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU406C/LE25U40CMC",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU406C,
- .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 = { {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 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual read (0x3B) and dual I/O (0xBB) supported */
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW203A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW203A,
- .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,
- }, {
- .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. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW403A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW403A,
- .total_size = 512,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {256, 2 * 1024} },
- .block_erase = spi_block_erase_db,
- }, {
- .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_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW418A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW418A,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .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_bp2_srwd,
- .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 = "Sanyo",
- .name = "LE25FW806",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW806,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_d7,
- }, {
- .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_bp2_srwd,
- .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW808",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW808,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {8 * 1024, 128} },
- .block_erase = spi_block_erase_d7,
- }, {
- .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_bp2_srwd,
- .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 = "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_82802ab,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 15}
- },
- .block_erase = erase_block_82802ab,
- }, {
- .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 = {
- {1024 * 1024, 1}
- },
- .block_erase = NULL, /* 30 D0, only in A/A mux mode */
- },
- },
- .unlock = unlock_regspace2_uniform_64k,
- .write = write_82802ab,
- .read = read_memmapped,
- .voltage = {3000, 3600},
- },
-
- {
- .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,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .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 =
- {
- {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "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,
- .tested = TEST_OK_PREW,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .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,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .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,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL204K",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL204,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PR,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL208K",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL208,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL116K/S25FL216K", /* FIXME: separate them */
- .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 = { { 2048 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 2048 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL132K",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL132K,
- .total_size = 4096,
- .page_size = 256,
- /* OTP: 768B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 1024} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 4096 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 4096 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd, /* TODO: improve */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL164K",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL164K,
- .total_size = 8192,
- .page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 2048} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 8192 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 8192 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd, /* TODO: improve */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL127S-64kB", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .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_PREW,
- /* FIXME: we should distinguish the configuration on probing time like we do for AT45DB chips */
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of 32 so-called "parameter sectors" with
- * opcode 0x20 which may be configured to be on top or bottom of the address
- * space. Trying to access an address outside these 4kB blocks does have no
- * effect on the memory contents, e.g.
- .eraseblocks = {
- {4 * 1024, 32},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_20,
- }, { */
- .eraseblocks = { { 64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
- .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 = "S25FL127S-256kB", /* uniform 256kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 512,
- /* 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 =
- {
- {
- .eraseblocks = { {256 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
- .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 = "S25FL128P......0", /* uniform 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .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 = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL128P......1", /* uniform 256kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {256 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL128S......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .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_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 32 so-called "parameter sectors" with
- * opcode 0x20. Trying to access an address outside these 4kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {4 * 1024, 32},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_20,
- }, { */
- .eraseblocks = { { 64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_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 = "S25FL128S......1", /* uniform 256 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 512,
- /* 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 =
- {
- {
- .eraseblocks = { {256 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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 = "S25FL129P......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 256,
- /* OTP: 506B total, 16B reserved; 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 =
- {
- {
- /* FIXME: This chip supports erasing of the 32 so-called "parameter sectors" with
- * opcode 0x20. Trying to access an address outside these 4kB blocks does have no
- * effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {4 * 1024, 32},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_20,
- }, { */
- /* FIXME: Additionally it also supports erase opcode 40h for the respective 2*4 kB pairs
- .eraseblocks = {
- {8 * 1024, 16},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_40,
- }, { */
- .eraseblocks = { { 64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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: Configuration register */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .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 = "S25FL129P......1", /* uniform 256 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 256,
- /* OTP: 506B total, 16B 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 =
- {
- {
- .eraseblocks = { {256 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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: Configuration register */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .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", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL256,
- .total_size = 32768,
- .page_size = 256,
- /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_EAR7,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 32 so-called "parameter sectors" with
- * opcode 0x20. Trying to access an address outside these 4kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {4 * 1024, 32},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_20,
- }, { */
- .eraseblocks = { { 64 * 1024, 512} },
- .block_erase = spi_block_erase_dc,
- }, {
- .eraseblocks = { { 64 * 1024, 512} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 32768 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 32768 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_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},
- .wrea_override = 0x17,
- },
-
- {
.vendor = "SST",
.name = "SST25LF020A",
.bustype = BUS_SPI,
@@ -13102,44 +11973,6 @@
{
.vendor = "SST",
- .name = "SST25VF512(A)",
- .bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF512_REMS,
- .total_size = 64,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rems,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 16} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_d8, /* Supported by SST25VF512A only */
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7, /* Supported by SST25VF512A only */
- },
- },
- .printlock = spi_prettyprint_status_register_sst25, /* FIXME: No BP2 & 3 */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
- .read = spi_chip_read, /* Fast read (0x0B) supported by SST25VF512A only */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "SST",
.name = "SST25VF010(A)",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
@@ -13178,6 +12011,44 @@
{
.vendor = "SST",
+ .name = "SST25VF016B",
+ .bustype = BUS_SPI,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25VF016B,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EITHER,
+ .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 = { {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,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "SST",
.name = "SST25VF020",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
@@ -13248,6 +12119,44 @@
{
.vendor = "SST",
+ .name = "SST25VF032B",
+ .bustype = BUS_SPI,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25VF032B,
+ .total_size = 4096,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EWSR,
+ .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 */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "SST",
.name = "SST25VF040",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
@@ -13356,107 +12265,40 @@
{
.vendor = "SST",
- .name = "SST25WF020A",
+ .name = "SST25VF064C",
.bustype = BUS_SPI,
- .manufacture_id = SANYO_ID, /* See flashchips.h */
- .model_id = SST_SST25WF020A,
- .total_size = 256,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25VF064C,
+ .total_size = 8192,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- },
- },
- .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "SST",
- .name = "SST25WF040B",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID, /* See flashchips.h */
- .model_id = SST_SST25WF040B,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- },
- },
- .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "SST",
- .name = "SST25WF080B",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID, /* See flashchips.h */
- .model_id = SST_SST25WF080B,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .feature_bits = FEATURE_WRSR_EWSR,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {32 * 1024, 256} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {8 * 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_bp2_tb_bpl,
- .unlock = spi_disable_blockprotect_bp2_srwd,
+ .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
- .voltage = {1650, 1950},
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
@@ -13499,11 +12341,230 @@
{
.vendor = "SST",
- .name = "SST25VF016B",
+ .name = "SST25VF512(A)",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25VF016B,
- .total_size = 2048,
+ .model_id = SST_SST25VF512_REMS,
+ .total_size = 64,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EWSR,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rems,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 16} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_d8, /* Supported by SST25VF512A only */
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_c7, /* Supported by SST25VF512A only */
+ },
+ },
+ .printlock = spi_prettyprint_status_register_sst25, /* FIXME: No BP2 & 3 */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
+ .read = spi_chip_read, /* Fast read (0x0B) supported by SST25VF512A only */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .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,
+ },
+ },
+ .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .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,
+ },
+ },
+ .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_aai_write,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST25WF020A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID, /* See flashchips.h */
+ .model_id = SST_SST25WF020A,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
+ .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .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,
+ },
+ },
+ .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_aai_write,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST25WF040B",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID, /* See flashchips.h */
+ .model_id = SST_SST25WF040B,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
+ .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST25WF080",
+ .bustype = BUS_SPI,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25WF080,
+ .total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_EITHER,
.tested = TEST_OK_PREW,
@@ -13512,103 +12573,97 @@
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 64} },
+ .eraseblocks = { {32 * 1024, 32} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_sst25vf016,
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_sst25, /* *does* have a BP3 but it is useless */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_aai_write,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
},
{
.vendor = "SST",
- .name = "SST25VF032B",
+ .name = "SST25WF080B",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF032B,
- .total_size = 4096,
+ .manufacture_id = SANYO_ID, /* See flashchips.h */
+ .model_id = SST_SST25WF080B,
+ .total_size = 1024,
.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} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 128} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .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,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "SST",
- .name = "SST25VF064C",
- .bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF064C,
- .total_size = 8192,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
- .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 */
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
+ .read = spi_chip_read, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "SST",
+ .name = "SST25WF512",
+ .bustype = BUS_SPI,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25WF512,
+ .total_size = 64,
+ .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 = spi_block_erase_20,
+ }, {
+ .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,
+ },
+ },
+ .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_aai_write,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
},
{
@@ -13727,190 +12782,6 @@
{
.vendor = "SST",
- .name = "SST25WF512",
- .bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25WF512,
- .total_size = 64,
- .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 = spi_block_erase_20,
- }, {
- .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,
- },
- },
- .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .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,
- },
- },
- .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .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,
- },
- },
- .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .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,
- },
- },
- .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_aai_write,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "SST",
- .name = "SST25WF080",
- .bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25WF080,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_EITHER,
- .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} },
- .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_sst25, /* *does* have a BP3 but it is useless */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .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,
@@ -13963,30 +12834,6 @@
{
.vendor = "SST",
- .name = "SST29LE010",
- .bustype = BUS_PARALLEL,
- .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,
- .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,
@@ -14011,6 +12858,30 @@
{
.vendor = "SST",
+ .name = "SST29LE010",
+ .bustype = BUS_PARALLEL,
+ .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,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec,
+ .read = read_memmapped,
+ .voltage = {3000, 3600},
+ },
+
+ {
+ .vendor = "SST",
.name = "SST29LE020",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
@@ -14035,33 +12906,6 @@
{
.vendor = "SST",
- .name = "SST39SF512",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SST_ID,
- .model_id = SST_SST39SF512,
- .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 = {4500, 5500},
- },
-
- {
- .vendor = "SST",
.name = "SST39SF010A",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
@@ -14143,10 +12987,10 @@
{
.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,
@@ -14165,7 +13009,7 @@
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {2700, 3600},
+ .voltage = {4500, 5500},
},
{
@@ -14281,6 +13125,33 @@
{
.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 = "SST49LF002A/B",
.bustype = BUS_FWH, /* A/A Mux */
.manufacture_id = SST_ID,
@@ -15233,6 +14104,1138 @@
},
{
+ .vendor = "Sanyo",
+ .name = "LE25FU106B",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU106B,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ /* FIXME: Is this correct?
+ {
+ .eraseblocks = { {2 * 1024, 64} },
+ .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_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FU206",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU206,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .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_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FU206A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU206A,
+ .total_size = 256,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .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 = { {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_bp2_srwd,
+ .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FU406B",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU406B,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .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_bp2_srwd,
+ .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FU406C/LE25U40CMC",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU406C,
+ .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 = { {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 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual read (0x3B) and dual I/O (0xBB) supported */
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW106",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW106,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {2 * 1024, 64} },
+ .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_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp1_srwd, /* FIXME: Add ERSER error flag. */
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW203A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW203A,
+ .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,
+ }, {
+ .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. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW403A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW403A,
+ .total_size = 512,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {256, 2 * 1024} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .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_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW406A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW406A,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .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_plain,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW418A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW418A,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .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_bp2_srwd,
+ .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 = "Sanyo",
+ .name = "LE25FW806",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW806,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .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_bp2_srwd,
+ .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW808",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW808,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {8 * 1024, 128} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .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_bp2_srwd,
+ .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 = "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_82802ab,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {8 * 1024, 8},
+ {64 * 1024, 15}
+ },
+ .block_erase = erase_block_82802ab,
+ }, {
+ .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 = {
+ {1024 * 1024, 1}
+ },
+ .block_erase = NULL, /* 30 D0, only in A/A mux mode */
+ },
+ },
+ .unlock = unlock_regspace2_uniform_64k,
+ .write = write_82802ab,
+ .read = read_memmapped,
+ .voltage = {3000, 3600},
+ },
+
+ {
+ .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,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .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 =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "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,
+ .tested = TEST_OK_PREW,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .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,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .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,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL116K/S25FL216K", /* FIXME: separate them */
+ .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 = { { 2048 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 2048 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL127S-256kB", /* uniform 256kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 512,
+ /* 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 =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
+ .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 = "S25FL127S-64kB", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .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_PREW,
+ /* FIXME: we should distinguish the configuration on probing time like we do for AT45DB chips */
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of 32 so-called "parameter sectors" with
+ * opcode 0x20 which may be configured to be on top or bottom of the address
+ * space. Trying to access an address outside these 4kB blocks does have no
+ * effect on the memory contents, e.g.
+ .eraseblocks = {
+ {4 * 1024, 32},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_20,
+ }, { */
+ .eraseblocks = { { 64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 16384 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 16384 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
+ .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 = "S25FL128P......0", /* uniform 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .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 = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 16384 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 16384 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL128P......1", /* uniform 256kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 16384 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL128S......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .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_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 32 so-called "parameter sectors" with
+ * opcode 0x20. Trying to access an address outside these 4kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {4 * 1024, 32},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_20,
+ }, { */
+ .eraseblocks = { { 64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 16384 * 1024, 1} },
+ .block_erase = spi_block_erase_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 = "S25FL128S......1", /* uniform 256 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 512,
+ /* 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 =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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 = "S25FL129P......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 256,
+ /* OTP: 506B total, 16B reserved; 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 =
+ {
+ {
+ /* FIXME: This chip supports erasing of the 32 so-called "parameter sectors" with
+ * opcode 0x20. Trying to access an address outside these 4kB blocks does have no
+ * effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {4 * 1024, 32},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_20,
+ }, { */
+ /* FIXME: Additionally it also supports erase opcode 40h for the respective 2*4 kB pairs
+ .eraseblocks = {
+ {8 * 1024, 16},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_40,
+ }, { */
+ .eraseblocks = { { 64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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: Configuration register */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .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 = "S25FL129P......1", /* uniform 256 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 256,
+ /* OTP: 506B total, 16B 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 =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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: Configuration register */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .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 = "S25FL132K",
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL132K,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 768B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 4096 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 4096 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd, /* TODO: improve */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL164K",
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL164K,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 2048} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 8192 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 8192 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd, /* TODO: improve */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL204K",
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL204,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PR,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL208K",
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL208,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL256S......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL256,
+ .total_size = 32768,
+ .page_size = 256,
+ /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_EAR7,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 32 so-called "parameter sectors" with
+ * opcode 0x20. Trying to access an address outside these 4kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {4 * 1024, 32},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_20,
+ }, { */
+ .eraseblocks = { { 64 * 1024, 512} },
+ .block_erase = spi_block_erase_dc,
+ }, {
+ .eraseblocks = { { 64 * 1024, 512} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 32768 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 32768 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_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},
+ .wrea_override = 0x17,
+ },
+
+ {
.vendor = "SyncMOS/MoselVitelic",
.name = "{F,S,V}29C51001B",
.bustype = BUS_PARALLEL,
@@ -15511,202 +15514,111 @@
},
{
+ .vendor = "Unknown",
+ .name = "SFDP-capable chip",
+ .bustype = BUS_SPI,
+ .manufacture_id = GENERIC_MANUF_ID,
+ .model_id = SFDP_DEVICE_ID,
+ .total_size = 0, /* set by probing function */
+ .page_size = 0, /* set by probing function */
+ .feature_bits = 0, /* set by probing function */
+ /* We present our own "report this" text hence we do not */
+ /* want the default "This flash part has status UNTESTED..." */
+ /* text to be printed. */
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_sfdp,
+ .block_erasers = {}, /* set by probing function */
+ .unlock = spi_disable_blockprotect, /* is this safe? */
+ .write = NULL, /* set by probing function */
+ .read = spi_chip_read,
+ /* FIXME: some vendor extensions define this */
+ .voltage = {0},
+ },
+
+ {
.vendor = "Winbond",
- .name = "W25Q40.V",
+ .name = "W25P16",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q40_V,
- .total_size = 512,
+ .model_id = WINBOND_NEX_W25P16,
+ .total_size = 2048,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 756B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 16} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 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_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Winbond",
- .name = "W25Q80.V",
+ .name = "W25P32",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q80_V,
- .total_size = 1024,
+ .model_id = WINBOND_NEX_W25P32,
+ .total_size = 4096,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32 * 1024, 32} },
- .block_erase = spi_block_erase_52,
- }, {
+ .eraseblocks = { {4096 * 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, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W25P80",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25P80,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .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_60,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
- .name = "W25Q16.V",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q16_V,
- .total_size = 2048,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .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 = { {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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
- .name = "W25Q32.V",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q32_V,
- .total_size = 4096,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 1024} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
- .name = "W25Q64.V",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q64_V,
- .total_size = 8192,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 2048} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
@@ -15789,6 +15701,165 @@
{
.vendor = "Winbond",
+ .name = "W25Q128.W",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25Q128_W,
+ .total_size = 16384,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 4096} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 512} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {16 * 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 = {1650, 1950},
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W25Q16.V",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25Q16_V,
+ .total_size = 2048,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .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 = { {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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W25Q16.W",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25Q16_W,
+ .total_size = 2048,
+ .page_size = 256,
+ /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ /* QPI enable 0x38, disable 0xFF */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 64} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W25Q20.W",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25Q20_W,
+ .total_size = 256,
+ .page_size = 256,
+ /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .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 = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
+ },
+
+ {
+ .vendor = "Winbond",
.name = "W25Q256.V",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
@@ -15878,33 +15949,74 @@
{
.vendor = "Winbond",
- .name = "W25Q20.W",
+ .name = "W25Q32.V",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q20_W,
- .total_size = 256,
+ .model_id = WINBOND_NEX_W25Q32_V,
+ .total_size = 4096,
.page_size = 256,
- /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ /* supports SFDP */
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 8} },
+ .eraseblocks = { {32 * 1024, 128} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W25Q32.W",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25Q32_W,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ /* QPI enable 0x38, disable 0xFF */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .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,
}
},
@@ -15917,6 +16029,46 @@
{
.vendor = "Winbond",
+ .name = "W25Q40.V",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25Q40_V,
+ .total_size = 512,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 756B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .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 = { {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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .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 = "Winbond",
.name = "W25Q40BW",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
@@ -15956,45 +16108,6 @@
{
.vendor = "Winbond",
- .name = "W25Q80BW",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q80BW,
- .total_size = 1024,
- .page_size = 256,
- /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .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 = { {32 * 1024, 32} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {1 * 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 = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
- },
-
- {
- .vendor = "Winbond",
.name = "W25Q40EW",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
@@ -16034,13 +16147,14 @@
{
.vendor = "Winbond",
- .name = "W25Q80EW",
+ .name = "W25Q64.V",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q80EW,
- .total_size = 1024,
+ .model_id = WINBOND_NEX_W25Q64_V,
+ .total_size = 8192,
.page_size = 256,
- /* OTP: 3*256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ /* supports SFDP */
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
@@ -16048,19 +16162,19 @@
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 32} },
+ .eraseblocks = { {32 * 1024, 256} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16068,87 +16182,7 @@
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {1650, 1950}, /* Fast read (0x0B) and multi I/O supported */
- },
-
- {
- .vendor = "Winbond",
- .name = "W25Q16.W",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q16_W,
- .total_size = 2048,
- .page_size = 256,
- /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- /* QPI enable 0x38, disable 0xFF */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 64} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
- },
-
- {
- .vendor = "Winbond",
- .name = "W25Q32.W",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q32_W,
- .total_size = 4096,
- .page_size = 256,
- /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- /* QPI enable 0x38, disable 0xFF */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
},
{
@@ -16193,34 +16227,34 @@
{
.vendor = "Winbond",
- .name = "W25Q128.W",
+ .name = "W25Q80.V",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q128_W,
- .total_size = 16384,
+ .model_id = WINBOND_NEX_W25Q80_V,
+ .total_size = 1024,
.page_size = 256,
/* supports SFDP */
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {32 * 1024, 32} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16228,7 +16262,85 @@
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {1650, 1950},
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W25Q80BW",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25Q80BW,
+ .total_size = 1024,
+ .page_size = 256,
+ /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .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 = { {32 * 1024, 32} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {1 * 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 = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W25Q80EW",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25Q80EW,
+ .total_size = 1024,
+ .page_size = 256,
+ /* OTP: 3*256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .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 = { {32 * 1024, 32} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {1 * 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 = {1650, 1950}, /* Fast read (0x0B) and multi I/O supported */
},
{
@@ -16265,102 +16377,6 @@
{
.vendor = "Winbond",
- .name = "W25X20",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25X20,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
- .name = "W25X40",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25X40,
- .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 = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
- .name = "W25X80",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25X80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
.name = "W25X16",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
@@ -16399,6 +16415,38 @@
{
.vendor = "Winbond",
+ .name = "W25X20",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25X20,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
.name = "W25X32",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
@@ -16437,6 +16485,38 @@
{
.vendor = "Winbond",
+ .name = "W25X40",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25X40,
+ .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 = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
.name = "W25X64",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
@@ -16475,19 +16555,22 @@
{
.vendor = "Winbond",
- .name = "W25P80",
+ .name = "W25X80",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25P80,
+ .model_id = WINBOND_NEX_W25X80,
.total_size = 1024,
.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 = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
@@ -16498,115 +16581,10 @@
.printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
- {
- .vendor = "Winbond",
- .name = "W25P16",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25P16,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2048 * 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, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
- .name = "W25P32",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25P32,
- .total_size = 4096,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {4096 * 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, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
- .name = "W29C512A/W29EE512",
- .bustype = BUS_PARALLEL,
- .manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W29C512A,
- .total_size = 64,
- .page_size = 128,
- .feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = 10,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .write = write_jedec,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "Winbond",
- .name = "W29C010(M)/W29C011A/W29EE011/W29EE012-old",
- .bustype = BUS_PARALLEL,
- .manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W29C010,
- .total_size = 128,
- .page_size = 128,
- .feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_w29ee011,
- .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */
- .block_erasers =
- {
- {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .write = write_jedec,
- .read = read_memmapped,
- },
-
/* W29EE011, W29EE012, W29C010M, W29C011A do not support probe_jedec according to the datasheet, but it works for newer(?) steppings. */
{
.vendor = "Winbond",
@@ -16633,6 +16611,29 @@
{
.vendor = "Winbond",
+ .name = "W29C010(M)/W29C011A/W29EE011/W29EE012-old",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = WINBOND_ID,
+ .model_id = WINBOND_W29C010,
+ .total_size = 128,
+ .page_size = 128,
+ .feature_bits = FEATURE_LONG_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_w29ee011,
+ .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Winbond",
.name = "W29C020(C)/W29C022",
.bustype = BUS_PARALLEL,
.manufacture_id = WINBOND_ID,
@@ -16681,6 +16682,30 @@
{
.vendor = "Winbond",
+ .name = "W29C512A/W29EE512",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = WINBOND_ID,
+ .model_id = WINBOND_W29C512A,
+ .total_size = 64,
+ .page_size = 128,
+ .feature_bits = FEATURE_LONG_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = 10,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "Winbond",
.name = "W29GL032CB",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
@@ -16711,6 +16736,33 @@
{
.vendor = "Winbond",
+ .name = "W29GL032CH/L",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
+ .model_id = WINBOND_W29GL032CHL,
+ .total_size = 4096,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
.name = "W29GL032CT",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
@@ -16741,33 +16793,6 @@
{
.vendor = "Winbond",
- .name = "W29GL032CH/L",
- .bustype = BUS_PARALLEL,
- .manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
- .model_id = WINBOND_W29GL032CHL,
- .total_size = 4096,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
.name = "W29GL064CB",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
@@ -16798,6 +16823,33 @@
{
.vendor = "Winbond",
+ .name = "W29GL064CH/L",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
+ .model_id = WINBOND_W29GL064CHL,
+ .total_size = 8192,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
.name = "W29GL064CT",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
@@ -16828,33 +16880,6 @@
{
.vendor = "Winbond",
- .name = "W29GL064CH/L",
- .bustype = BUS_PARALLEL,
- .manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
- .model_id = WINBOND_W29GL064CHL,
- .total_size = 8192,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
.name = "W29GL128C",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
@@ -17201,6 +17226,63 @@
{
.vendor = "Winbond",
+ .name = "W39V080FA",
+ .bustype = BUS_FWH,
+ .manufacture_id = WINBOND_ID,
+ .model_id = WINBOND_W39V080FA,
+ .total_size = 1024,
+ .page_size = 64 * 1024,
+ .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = 10,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .printlock = printlock_w39v080fa,
+ .unlock = unlock_regspace2_uniform_64k,
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {3000, 3600}, /* Also has 12V fast program */
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W39V080FA (dual mode)",
+ .bustype = BUS_FWH,
+ .manufacture_id = WINBOND_ID,
+ .model_id = WINBOND_W39V080FA_DM,
+ .total_size = 512,
+ .page_size = 64 * 1024,
+ .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = 10,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .printlock = printlock_w39v080fa_dual,
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {3000, 3600}, /* Also has 12V fast program */
+ },
+
+ {
+ .vendor = "Winbond",
.name = "W49F002U/N",
.bustype = BUS_PARALLEL,
.manufacture_id = WINBOND_ID,
@@ -17320,63 +17402,6 @@
},
{
- .vendor = "Winbond",
- .name = "W39V080FA",
- .bustype = BUS_FWH,
- .manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W39V080FA,
- .total_size = 1024,
- .page_size = 64 * 1024,
- .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = 10,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .printlock = printlock_w39v080fa,
- .unlock = unlock_regspace2_uniform_64k,
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {3000, 3600}, /* Also has 12V fast program */
- },
-
- {
- .vendor = "Winbond",
- .name = "W39V080FA (dual mode)",
- .bustype = BUS_FWH,
- .manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W39V080FA_DM,
- .total_size = 512,
- .page_size = 64 * 1024,
- .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = 10,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .printlock = printlock_w39v080fa_dual,
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {3000, 3600}, /* Also has 12V fast program */
- },
-
- {
.vendor = "Zetta Device",
.name = "ZD25D20",
.bustype = BUS_SPI,
@@ -17453,28 +17478,6 @@
},
{
- .vendor = "Unknown",
- .name = "SFDP-capable chip",
- .bustype = BUS_SPI,
- .manufacture_id = GENERIC_MANUF_ID,
- .model_id = SFDP_DEVICE_ID,
- .total_size = 0, /* set by probing function */
- .page_size = 0, /* set by probing function */
- .feature_bits = 0, /* set by probing function */
- /* We present our own "report this" text hence we do not */
- /* want the default "This flash part has status UNTESTED..." */
- /* text to be printed. */
- .tested = TEST_OK_PREW,
- .probe = probe_spi_sfdp,
- .block_erasers = {}, /* set by probing function */
- .unlock = spi_disable_blockprotect, /* is this safe? */
- .write = NULL, /* set by probing function */
- .read = spi_chip_read,
- /* FIXME: some vendor extensions define this */
- .voltage = {0},
- },
-
- {
.vendor = "Programmer",
.name = "Opaque flash chip",
.bustype = BUS_PROG,