Author: stefanct Date: Fri Jun 28 23:28:43 2013 New Revision: 1683 URL: http://flashrom.org/trac/flashrom/changeset/1683
Log: Add support for Nantronics N25 series.
Add... - N25S10 - N25S20 - N25S40 - N25S80 - N25S16
Signed-off-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at Acked-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Modified: trunk/flashchips.c trunk/flashchips.h trunk/spi25_statusreg.c
Modified: trunk/flashchips.c ============================================================================== --- trunk/flashchips.c Fri Jun 28 23:28:37 2013 (r1682) +++ trunk/flashchips.c Fri Jun 28 23:28:43 2013 (r1683) @@ -6234,6 +6234,202 @@ },
{ + .vendor = "Nantronics", + .name = "N25S10", + .bustype = BUS_SPI, + .manufacture_id = NANTRONICS_ID_NOPREFIX, + .model_id = NANTRONICS_N25S10, + .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 = { {4 * 1024, 32} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {32 * 1024, 4} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 2} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Nantronics", + .name = "N25S20", + .bustype = BUS_SPI, + .manufacture_id = NANTRONICS_ID_NOPREFIX, + .model_id = NANTRONICS_N25S20, + .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 = { {4 * 1024, 64} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {32 * 1024, 8} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 4} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Nantronics", + .name = "N25S40", + .bustype = BUS_SPI, + .manufacture_id = NANTRONICS_ID_NOPREFIX, + .model_id = NANTRONICS_N25S40, + .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 = { {4 * 1024, 128} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {32 * 1024, 16} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 8} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Nantronics", + .name = "N25S80", + .bustype = BUS_SPI, + .manufacture_id = NANTRONICS_ID_NOPREFIX, + .model_id = NANTRONICS_N25S80, + .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 = { {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_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "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_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .voltage = {2700, 3600}, + }, + + { .vendor = "Numonyx", .name = "M25PE10", .bustype = BUS_SPI,
Modified: trunk/flashchips.h ============================================================================== --- trunk/flashchips.h Fri Jun 28 23:28:37 2013 (r1682) +++ trunk/flashchips.h Fri Jun 28 23:28:43 2013 (r1683) @@ -449,6 +449,16 @@ #define MACRONIX_MX29SL800CB 0x6B /* Same as MX29SL802CB */ #define MACRONIX_MX29SL800CT 0xEA /* Same as MX29SL802CT */
+/* Nantronics Semiconductors is listed in JEP106AJ in bank 7, so it should have 6 continuation codes in front + * of the manufacturer ID of 0xD5. http://www.nantronicssemi.com */ +#define NANTRONICS_ID 0x7F7F7F7F7F7FD5 /* Nantronics */ +#define NANTRONICS_ID_NOPREFIX 0xD5 /* Nantronics, missing prefix */ +#define NANTRONICS_N25S10 0x3011 +#define NANTRONICS_N25S20 0x3012 +#define NANTRONICS_N25S40 0x3013 +#define NANTRONICS_N25S80 0x3014 +#define NANTRONICS_N25S16 0x3015 + /* * Programmable Micro Corp is listed in JEP106W in bank 2, so it should * have a 0x7F continuation code prefix.
Modified: trunk/spi25_statusreg.c ============================================================================== --- trunk/spi25_statusreg.c Fri Jun 28 23:28:37 2013 (r1682) +++ trunk/spi25_statusreg.c Fri Jun 28 23:28:43 2013 (r1683) @@ -223,10 +223,10 @@ msg_cdbg("Chip status register is 0x%02x.\n", status); }
-/* Common highest bit: Status Register Write Disable (SRWD). */ +/* Common highest bit: Status Register Write Disable (SRWD) or Status Register Protect (SRP). */ static void spi_prettyprint_status_register_srwd(uint8_t status) { - msg_cdbg("Chip status register: Status Register Write Disable (SRWD) is %sset\n", + msg_cdbg("Chip status register: Status Register Write Disable (SRWD, SRP, ...) is %sset\n", (status & (1 << 7)) ? "" : "not "); }