Yaffs is a filesystem designed specifically for the characteristics of NAND flash. Its well-proven primary features are:
- Fast - typically much faster than alternatives
- Easily ported (currently ported to GNU/Linux, WinCE, eCOS, pSOS, VxWorks, and various bare-metal systems)
- Log structured, providing wear-levelling and making it very robust
- Supports many flash geometries including 2K-Byte and 512-Byte page NAND flash chips
- Supports MLC and SLC flash
- Very fast mount - almost immediate startup
- Typically uses less RAM than comparable File Systems
- Flexible Licensing suitable for most circumstances
There is a great deal of information about Yaffs available on this site. This page indexes that information and provides an overview of the product.
Yaffs is currently at version 2. Yaffs2 supports 2K-byte page flash as well as 512-byte page flash. (Yaffs1 only supports the original 512-byte page flash and is now in maintenance mode.) There is a minimal subset of the filesystem called Yaffs/Direct or the Yaffs Direct Interface which is intended to be used in embedded systems, and can be licensed for use in proprietary systems. Yaffs is available to all under the GPL for use or evaluation; full details of Git access are available
Yaffs 1 and 2 have both been deployed in numerous commercial applications, some in high volume. abd with large Flash arrays. It has been used in phones, most notably Android phones, GPS receivers, train controllers, speech synthesisers, VOIP chip development kits and other applications.
We have a number of documents and papers describing how to use Yaffs, how to customise it for your particular hardware/system, and the original considerations and filesystem design of the two versions.
The best overview information is currently this 28-slide presentation What it Does and How it Does it
A useful historical Timeline on development is here
Yaffs Direct Interface - User Guide, describing how to port Yaffs to an embedded environment or RTOS using the YDI ‘personality’ module’.
Brief notes on How to use it on GNU/Linux
A memory footprint analysis putting some numbers on ‘low memory footprint’.
- The starting state of NAND MTD which caused the Yaffs filesystem to be designed.
- The Specifications are available
- Development Notes describing the filesystem design decisions and data structures for Yaffs1
- Yaffs2 Filesystem design, covering changes from Yaffs1
- Efficient Initialization and Crash Recovery for Log-based File Systems over Flash Memory, describing a mechanism for avoiding full flash scans, even when not properly shut down. This is a likely future development.
There is a Yaffs mailing list for the development and discussion of Yaffs. It’s a fairly low-traffic list. You will be emailed and asked to confirm your subscription request. You can also browse and search the Yaffs mailing list archives.