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.