本文针对nand flash坏块部分进行简单的记录
什么是坏块
我们先来看一下nand flash的存储结构
nand flash的存储结构为:一个flash由许多个block组成,一个block又是有许多个page组成,一个page又是由有效的数据区和spare area区(即oob区)。
如上图flash有1024个block,一个block有64个page,一个page有2Kbytes的有效数据+64bytes的oob数据。
我们通常计算nand flash容量大小为:总共的block数 * 一个block中的page数 * 一个page中的有效数据区。oob区为特殊数据,用作硬件纠错和坏块管理的。
注:按照读、写、擦除的操作,擦操作最小单位为一个block,读写操作最小单位为一个page
Nand Flash有坏块是它的天然缺点,无法避免。有的坏块多,有的少,纯属几率。
Nand Flash专用的YAFFS文件系统可以识别、管理坏块, 可以避免坏块对系统产生影响。
在u-boot中,可以执行 " nand bad " 命令查看有哪些坏块,
Nand Flash怎么标记某一个BLOCK是坏的?
它使用该BLOCK中第1个扇区的OOB数据中某一个字节来标记: 其值为0xff表示该BLOCK是好的, 其值为非0xff表示该BLOCK是坏的。
有时候我们会误写这个OOB区的值导致有些BLOCK被误认为是"坏块",
可以在u-boot中执行"nand scrub"后, 根据提示信息输入小写字母'y'并回车,
它会强制擦除整个Nand Flash(包括把OOB擦除为0xff), 这样就可以恢复被误标为坏块的区域了