## Documentation

Various pieces of documentation are available. Some of them are really out of date and have been moved to the Archive Section

Up to date documents available:

- General information on this page
- NAND Flashtechnical paper
- NAND Flash API documentation
- JFFS2documentation section
- JFFS3documentation section

## MTD User modules

These are the modules which provide interfaces that can be used directly from userspace. The user modules currently planned include:

- Raw character access:
  A character device which allows direct access to the underlying memory. Useful for creating filesystems on the devices, before using some of the translation drivers below, or for raw storage on infrequently-changed flash, or RAM devices.
- Raw block access
  A block device driver which allows you to pretend that the flash is a normal device with sensible sector size. It actually works by caching a whole flash erase block in RAM, modifying it as requested, then erasing the whole block and writing back the modified data.
  This allows you to use normal filesystems on flash parts. Obviously it's not particularly robust when you are writing to it - you lose a whole erase block's worth of data if your read/modify/erase/rewrite cycle actually goes read/modify/erase/poweroff. But for development, and for setting up filesystems which are actually going to be mounted read-only in production units, it should be fine.
  There is also a read-only version of this driver which doesn't have the capacity to do the caching and erase/writeback, mainly for use with uCLinux where the extra RAM requirement was considered too large.
- Flash Translation Layer (FTL)
- NFTL
  Block device drivers which implement an FTL/NFTL filesystem on the underlying memory device. FTL is fully functional. NFTL is currently working for both reading and writing, but could probably do with some more field testing before being used on production systems.
- Journalling Flash File System, v2
  This provides a filesystem directly on the flash, rather than emulating a block device. For more information, see sources.redhat.com.

## MTD hardware device drivers

These provide physical access to memory devices, and are not used directly - they are accessed through the user modules above.

- On-board memory
  Many PC chipsets are incapable of correctly caching system memory above 64M or 512M. A driver exists which allows you to use this memory with the linux-mtd system.
- PCMCIA devices
  PCMCIA flash (not CompactFlash but real flash) cards are now supported by the pcmciamtd driver in CVS.
- Common Flash Interface ( CFI) onboard NOR flash
  This is a common solution and is well-tested and supported, most often using JFFS2 or cramfs file systems.
- Onboard NAND flash
  NAND flash is rapidly overtaking NOR flash due to its larger size and lower cost; MTD support for NAND flash has production quality.
- M-Systems' DiskOnChip 2000 and Millennium
  The DiskOnChip 2000, Millennium and Millennium Plus devices should be fully supported, using their native NFTL and INFTL 'translation layers'. Support for JFFS2 on DiskOnChip 2000 and Millennium is also operational although lacking proper support for bad block handling.

CompactFlash - http://www.compactflash.org/
CompactFlash emulates an IDE disk, either through the PCMCIA-ATA standard, or by connecting directly to an IDE interface.
As such, it has no business being on this page, as to the best of my knowledge it doesn't have any alternative method of accessing the flash - you have to use the IDE emulation - I mention it here for completeness.