<div dir="ltr">This patch adds support for Atmel AT25DL161, 2Mbytes SPI flash which look like the low voltage version of Atmel AT25DQ161. It has no pre test for now.<br><div><br><br><br><br>Index: flashchips.c<br>===================================================================<br>
--- flashchips.c (Revision 1766)<br>+++ flashchips.c (Arbeitskopie)<br>@@ -1671,77 +1671,114 @@<br> <br> {<br> .vendor = "Atmel",<br> .name = "AT25DF641(A)",<br>
.bustype = BUS_SPI,<br> .manufacture_id = ATMEL_ID,<br> .model_id = ATMEL_AT25DF641,<br> .total_size = 8192,<br> .page_size = 256,<br> .feature_bits = FEATURE_WRSR_WREN,<br>
.tested = TEST_OK_PREW,<br> .probe = probe_spi_rdid,<br> .probe_timing = TIMING_ZERO,<br> .block_erasers =<br> {<br> {<br> .eraseblocks = { {4 * 1024, 2048} },<br>
.block_erase = spi_block_erase_20,<br> }, {<br> .eraseblocks = { {32 * 1024, 256} },<br> .block_erase = spi_block_erase_52,<br> }, {<br> .eraseblocks = { {64 * 1024, 128} },<br>
.block_erase = spi_block_erase_d8,<br> }, {<br> .eraseblocks = { {8 * 1024 * 1024, 1} },<br> .block_erase = spi_block_erase_60,<br> }, {<br> .eraseblocks = { {8 * 1024 * 1024, 1} },<br>
.block_erase = spi_block_erase_c7,<br> }<br> },<br> .printlock = spi_prettyprint_status_register_at25df_sec,<br> .unlock = spi_disable_blockprotect_at2x_global_unprotect_sec,<br>
.write = spi_chip_write_256,<br> .read = spi_chip_read,<br> .voltage = {2700, 3600},<br> },<br>-<br>+ {<br>+ .vendor = "Atmel",<br>+ .name = "AT25DL161",<br>
+ .bustype = BUS_SPI,<br>+ .manufacture_id = ATMEL_ID,<br>+ .model_id = ATMEL_AT25DL161,<br>+ .total_size = 2048,<br>+ .page_size = 256,<br>+ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */<br>
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,<br>+ .tested = TEST_UNTESTED,<br>+ .probe = probe_spi_rdid,<br>+ .probe_timing = TIMING_ZERO,<br>+ .block_erasers =<br>+ {<br>
+ {<br>+ .eraseblocks = { {4 * 1024, 512} },<br>+ .block_erase = spi_block_erase_20,<br>+ }, {<br>+ .eraseblocks = { {32 * 1024, 64} },<br>+ .block_erase = spi_block_erase_52,<br>
+ }, {<br>+ .eraseblocks = { {64 * 1024, 32} },<br>+ .block_erase = spi_block_erase_d8,<br>+ }, {<br>+ .eraseblocks = { {2 * 1024 * 1024, 1} },<br>+ .block_erase = spi_block_erase_60,<br>
+ }, {<br>+ .eraseblocks = { {2 * 1024 * 1024, 1} },<br>+ .block_erase = spi_block_erase_c7,<br>+ }<br>+ },<br>+ .printlock = spi_prettyprint_status_register_at25df_sec,<br>
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect_sec,<br>+ .write = spi_chip_write_256,<br>+ .read = spi_chip_read,<br>+ .voltage = {1650, 1950},<br>+ },<br> {<br> .vendor = "Atmel",<br>
.name = "AT25DQ161",<br> .bustype = BUS_SPI,<br> .manufacture_id = ATMEL_ID,<br> .model_id = ATMEL_AT25DQ161,<br> .total_size = 2048,<br> .page_size = 256,<br>
/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */<br> .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,<br> .tested = TEST_UNTESTED,<br> .probe = probe_spi_rdid,<br>
.probe_timing = TIMING_ZERO,<br> .block_erasers =<br> {<br> {<br> .eraseblocks = { {4 * 1024, 512} },<br> .block_erase = spi_block_erase_20,<br> }, {<br>
.eraseblocks = { {32 * 1024, 64} },<br> .block_erase = spi_block_erase_52,<br> }, {<br> .eraseblocks = { {64 * 1024, 32} },<br> .block_erase = spi_block_erase_d8,<br>
}, {<br> .eraseblocks = { {2 * 1024 * 1024, 1} },<br> .block_erase = spi_block_erase_60,<br> }, {<br> .eraseblocks = { {2 * 1024 * 1024, 1} },<br> .block_erase = spi_block_erase_c7,<br>
}<br> },<br> .printlock = spi_prettyprint_status_register_at25df_sec,<br> .unlock = spi_disable_blockprotect_at2x_global_unprotect_sec,<br> .write = spi_chip_write_256,<br>
.read = spi_chip_read,<br> .voltage = {2700, 3600},<br> },<br></div></div>