NAND FLASH OOB/Spare Area

关键字 :NAND FLASHOOB

NAND FLASH OOB/Spare Area

一.
Nand Flash数据存储单元的整体架构

Flash Memory即闪存,是一种长寿命的非易失性(Non-volatile Memory Device,在断电情况下仍能保持所存储的数据信息)的存储器。

常见的Nand Flash内部只有一个chip,每个chip只有一个plane。而目前有些复杂的容量更大的Nand Flash内部有多个chip,每个chip有多个plane。

概念上由大到小来说就是:Nand Flash Chip Plane Block Page oob


. Nand Flash OOB 

Nand Flash每一个Page对应一个空闲区域(spare area/OOB),这个区域是基于Nand Flash的硬件特性,数据在读写的时候容易出错,为了保证数据的正确性,就产生了这样一个检测和纠错的区域,用来放置数据的校验值。OOB的读写操作,一般都是随着page的操作一起完成,也就是在read/write page的时候,产生了对应的OOB,那么OOB有什么用途呢?

1). 标记是否存在坏块

2). 存储ECC校验

3). 存储一些和文件系统相关的数据。如jffs2就会用到这些空间存储一些特定信息,而yaffs2文件系统,会在oob中,存放很多和自己文件系统相关的信息。所以首先需要检查坏块,如果是则跳过,然后写入数据,最后写入OOB数据。

  1. ECC校验

ECC(Error Checking and Correction),是一种用于Nand Flash的差错检测和修正的算法。由于操作的时序和电路稳定性等原因,常常会出现一些bit出错,也就是原来的某个位,本来是0而变成了1,或者本来是1而变成0。但是如果恰好某个重要的文件的某一位发生了变化,那么可能会导致此时文件不能运行,如果这个文件是一个影响系统的程序,那么直接将导致系统会出现问题,所以对于Nand Flash就出现了这样一个机制。

   向NAND Flash写数据时,每256或512字节会生成一个校验码写在每个page的OOB区,当从NAND Flash读数据时,每读取256或512字节数据,也会生成一个ECC校验码,拿这个校验码与存放在OOB区的校验吗对比看看是否一致,就可以知道读取的数据是否正确。 

  1. 坏块处理  

  对于Nand Flash,比较严重的是坏块,也就是说一个块中包含有一个或者多个位是坏的,而现在对于坏块有两种分类

  • 出厂的时候就存在坏块:在出厂之前,就会做对应的标记,标记为坏块,一般芯片厂商会将每个坏块第一个page的spare erea的第6个byte标记为不等于0xff。

  2) 使用过程中产生的坏块,就需要将这个块作为坏块来处理,为了与固有的坏块信息保持一致,也需要将新发现的坏块的第一个page的spare eare的第6个Byte标记为非0xff的值。

  对于上面的处理方式,如果我们需要擦除一个块之前,必须先要检查下第一个page的spare eare的第6byte是否为0xff, 如果是就证明是一个好块,是可以擦除;如果不是,就证明这是一个坏块,那么就不能擦除。对于这种方法,难免会出现一些错误操作,所以Nand Flash专门设计了一个BBT(bad block table)的坏块表用来进行管理。各个Nand的坏块管理的方法还不尽一样,有的会将bbt放到block0,因为block0一定是好块,但是block0一般是用来作为boot,那么也将导致不能放bbt,也有的会将bbt放到最后一个分区。

  从上面可以看出,OOB是每一个页都会有的数据,里面存放的的有ECC,而BBT是一个flash才会有的,针对每个block的坏块识别是第一个page的spare erea的第六个字节。 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论