Bad Blocks and Sources
The NAND Flash particles of solid state drives are composed of small flash blocks, and there are good and bad flash blocks. There are two main sources of bad blocks for solid state drives:
Factory Original Bad Block
Wafers pass through many processes before they are packaged into NAND flash particles (NAND flash chips), including testing, cutting, packaging, etc.; bad blocks may be generated among the NAND flash particles during these processes. This type of bad block is unavoidable due to technical factors.
Later Bad Block
Based on how long solid state drives are used, some of the originally good blocksin the solid state drives will also become bad blocks due to wear and tear or other accidents, such as abnormal power outages, etc.
How to Identify Bad Blocks
ADATA has dedicated testing equipment, software and hardware to identify bad blocks in NAND flashes, and special marks are used for bad blocks:
1. If there are factory original bad blocks, ADATA will write a non-FFh data (such as 00h) to a specific address in the spare area (spare column) or data area (main array) of the bad block; usually, when the first byte of the first page (or second page or last page) of a block contains non-FFh data, the block is a bad block. This is how good blocks and bad blocks are identified when they come out of the factory, and this is the so-called bad or invalid block mark.
2. When erase and write failures occur or when UECC (Uncorrectable Error Correction Code, data could not be recovered through ECC error correction) was read during the usage of solid state drives, they are basically due to abnormal NAND flash blocks; these blocks need to be added to the bad block table so that they are no longer used.
Two Methods of Bad Block Management
Skip Block Method
When users write data to flash, bad blocks are skipped based on the bad block table created and data is written into the next block.
Reserved Block Area Method
Through the method that ADATA uses, when a bad block is discovered in certain areas, the controller will replace it with a reserved bad block, and the bad block will be written into the bad block table and no longer used; when users write data afterwards, the data will be written to the corresponding replaced block.