App note: Wear leveling in NAND flash memory

Application note/Technical note from Macronix on extending the maximum endurance limit of NAND flash memories by wear leveling. Link here (PDF)

NAND flash memory is widely used in today’s embedded systems for code and data storage applications. Some applications are required to perform numerous Program and Erase operations on the NAND flash memory after system boot-up. NAND flash memories are generally specified with a limited number of Program/Erase (P/E) cycles per block. If the P/E cycles are not evenly distributed across the memory, individual memory blocks can exceed their endurance specification limit. To prevent this scenario from happening, a technique known as “wear leveling” is widely used in NAND flash memory management. Essentially, wear leveling is a way to average out the number of P/E cycles across all usable blocks in a NAND flash device so that the number of bad blocks created over time as a result of frequent PE cycling is minimized. Today, wear leveling has become a critical part of NAND flash management in embedded systems that require frequent Program and Erase operations.

Join the Conversation


  1. Well that’s a bit crap, it doesn’t tell you how to do it. What about links to published algorithms that implement the required nasty?

    (my crappy RTOS has a simple filesystem that does COW for small configuration blocks and append-only (plus delete) for larger files. It’s super-crappy for a general-purpose filesystem but those two cases turn out to cover 95% of what you need in an embedded system, and it gives pretty good dynamic wear-leveling)

  2. Well, that cute little document reeks of someone lazily putting the bare minimum effort into just reaching one of his/her MBO goals…

Leave a comment

Your email address will not be published. Required fields are marked *

Notify me of followup comments via e-mail. You can also subscribe without commenting.