NAND存储结构
转载:https://blog.csdn.net/llzhang_fly/article/details/87479446
nand flash结构
nand flash存储结构为:一个flash由许多个block组成,一个block由很多个page组成,一个page又是由有效个数据区和spare area区(即obb区)---这个spare area就是冗余区域

如上图flash有1024个block,一个block有64个怕个,一个page有2kbytes的有效数据+64bytes的obb数据。
我们通常计算nand flash容量大小为:总数的block数一个block中的page数一个page中的有效数据区。
oob区为特殊数据,用作硬件纠错和坏块管理的。
擦操作最小单位为一个block,读写操作最小单位为一个page
坏块是指在nand flash中出现某些flash区域不能进行擦写操作,我们称这样的一个单位区域为一个坏块。而由于nand flash中的读和写操作是以page为单位,擦除是以block为单位,且写操作前必须要先进行擦除操作。,因此,一个最小的可操作单位即为一个block。而整个block中产生任何不可修复的位错误,我们认为这个块是坏块。
坏块的产生
由于nand flash的工艺不能保证nand的memory array在其生命周期中保持性能的可靠性,因此在生产和使用过程中会产生坏块,nand flash在出厂阶段就会有某些概率出现坏块的现象,我们称为固有坏块,一般都会在出厂时将每个坏块第一个page的spare area区第6个byte标记为不等于oxff的值用作标记。另外在使用过程中如果block erase或page program错误,就可以将这个块作为坏块处理,需要把坏块标记起来,标记方式和固有坏块标记位置和方式统一。
坏块的管理
每个块都会在一个page的oob区第6个字节标记这个块是否为坏块的信息,如果在擦除一个块之前,check到第一个page的oob区的第6个字节非oxff,就表示为坏块不能进行擦除操作,以免将坏块标记擦除。如果在操作过程中出现新的坏块,应及时标记坏块,更新坏块表。
ECC
ECC的全称是Error Checking and Correction, NAND Flash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page(例如512Bytes)中只有一个或几个bit出 错。一般使用一种比较专用的校验——ECC。ECC能纠正单比特错误和检测双比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,对2比特以上的 错误不保证能检测。
OOB
OOB(out of band),即通常所说的spare area区,nand flash中每个page后都有一个oob区域,用于存放硬件ecc校验码、坏块标记、和文件系统的组织信息,主要用于硬件纠错和坏块处理。一般page大小为512字节的nand 每页分配16字节的oob;如果为2k的page,则每个page分配64字节的oob.
oob区中用1或2个字节来标志一个block是否为坏块,如果这1或2个字节的内容是0xff,就说明这个block是好块,否则为坏块。对于small page(每页512字节)的芯片,坏块信息存储在每个block的第一个page的oob的第6个字节中,而big page(每页2k个字节)的芯片,坏块信息存储在每个block的第一个page的oob的第1和第2个字节中。

浙公网安备 33010602011771号