Linux explorations: flash memory (2) Continuing yesterday's work on learning about flash memories and how they work in Linux. 1. More wikipedia 2. MTD documentation == 1. More wikipedia https://en.wikipedia.org/wiki/Flash_memory Lots of informtation, of which I'm summing up what I found most significative: * EEPROM: The whole device needs to be erased before rerites * NOR: Random access reads, random access writes on erased words, block erase. Erase block size: 64/128/256 KiB. Suitable for configuration data and firmware. Suitable for XIP - Execute In Place, firmware directly executed from flash. More reliable than NAND (less likely to have bit flips). Mnemonic: NOeRror :) * NAND: Block devices. Blocks are composed of Pages. The typical page size is 512/2048/4096 B. Reads and writes are per-page, erasures are per block. Less expensive than NOR. More likely to have errors (each page has its ECC - Error Correcting Codes). Faster erase. Best suited for large size -> common for storage, e.g. USB drives, [e]MMC... * Common: Reset of a block turns every bit into 1. Programming turns selected bits into 0. It is feasible (not necessarily implemented) to update words as long as done by turning further 1 bits into 0. * Serial Flash (e.g. via SPI bus): Common as it makes the PCB design simpler. A RAM buffer might be placed between the SPI bus and the flash, to increase the speed of data modifications. A RAM buffer might be placed between the SPI bus and the CPU, to improve speed (code shadowing). == 2. MTD documentation http://www.linux-mtd.infradead.org/doc/general.html I found this one interesting: http://www.linux-mtd.infradead.org/doc/nand.html