nandflash的oob及坏块管理_第1页
nandflash的oob及坏块管理_第2页
nandflash的oob及坏块管理_第3页
nandflash的oob及坏块管理_第4页
nandflash的oob及坏块管理_第5页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、nand flash 的 oob 及坏块管理0.NAND 的操作管理方式NANDFLASH 的管理方式:以三星 FLASH 为例,一片 Nand flash为一个设备 (device) ,1 (Device) = xxxx (Blocks) ,1 (Block) = xxxx (Pages) ,1(Page) =528 (Bytes) = 数 据块大小 (512Bytes) + OOB块大小(16Bytes,除OOB第六字节外,通常至少把OOB 的前 3 个字节存放 Nand Flash 硬件 ECC 码)。于 OOB 区,是每个 Page 都有的。 Page 大小是 512 字节的NAND

2、每页分配 16 字节的 OOB ;如果 NAND 物理上是 2K的Page,则每个Page分配64字节的OOB。如下图:HYNIX 为例,图中黑体的是实际探测到的 NAND ,是个 2G bit (256M )的 NAND 。 PgSize 是 2K 字节, PgsPBlk 表示每 个 BLOCK 包含 64 页,那么每个 BLOCK 占用的字节数是64X2K=128K 字节;该 NAND 包好 2048 个 BLOCK ,那么 可以算出 NAND 占用的字节数是 2048X128K=256M ,与实 际相符。需要注 意的是 SprSize 就是 OOB 大小,也恰好是 2K 页所用的 64字

3、节。 1.为什么会出现坏块由于 NAND Flash 的工艺不能保证 NAND 的 MemoryArray 在其生命周期中保持性能的可靠,因此,在 NAND 的 生产中及使用过程中会产生坏块。坏块的特性是:当编程 /擦除这个块时,会造成 PageProgram 和 Block Erase 操作时的错误,相应地反映到 StatusRegister 的相应位。 2.坏块的分类总体上,坏块可以分为两大类: ( 1)固有坏块:这是生产过程中产生的坏块,一般芯片原厂都会在出厂时都会将每 个坏块第一个 Page的spare area的第6个byte标记为不等于 0xff 的 值。(2)使用坏块: 这是在

4、NAND Flash 使用过程中, 如果 Block Erase 或者 Page Program 错误,就可以简单地将 这个块作为坏块来处理,这个时候需要把坏块标记起来。为page了和固有坏块信息保持一致, 将新发现的坏块的第一个的spare area的第6个Byte标记为非Oxff的值。3.坏块管根据上面的这些叙述,可以了解 NAND Flash 出厂时在spare area中已经反映出了坏块信息,因此,如果在擦除一个块之前,一定要先 check 一下第一页的 spare area的第6个 byte 是否是 0xff ,如果是就证明这是一个好块, 可以擦除;如果是非 0xff ,那么就不能擦

5、除, 以免将坏块标记擦掉。然,这样处理可能会犯一个错误错杀伪坏块”,因为在芯片操作过程中可能由于 电压不稳定等偶然因素会造成 NAND 操作的错误。 但是,为了数据的可靠性及软件设计 的简单化,还是需要遵照这个标准。可以用 BBT : bad block table,即坏块表来进行管理。各家对nand的坏块管理方法都有差异。比如专门用 nand 做存储的,会把 bbt 放到 block0 , 因为第 0 块一定是好 的块。但是如果nand本身被用来boot,那么第0块就要存放程序,不能放 bbt 了。 有的把 bbt 放到最后一块,当然,这一块坚决不能为坏块。bbt 的大小跟 nand 大小有

6、关, nand越大,需要的 bbt 也就越大。需要注意的是: OOB每个页都有的数据,里面存的有ECC (当然不仅仅);而BBT 是一个 FLASH 才有一个;针对每个 BLOCK 的坏块识别则是该块第一页sp are area的第六个字节。4.坏块纠正ECC: NANDFlash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page (例如512Bytes)中只有个或几个 bit 出错。一般使用一种比较专用的校验ECC。 ECC 能纠正单比特错误和检测双比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,对 2比特以上的错误不保证能检测。ECC 般每25

7、6字节原始数据生成 3字节ECC校验数据,这三字节共 24 比特分成两部分: 6 比特的列校验和16 比特的行校验,多余的两个比特置 1(。512 生成两组 ECC, 共 6 字节)当往 NAND Flash 的 page 中写入数据的时候,每 256字节我们生成一个 ECC 校验和,称之为原 ECC 校验和,保 存到 PAGE 的 OOBout-of-band )数据区中。其位置就是eccpos 。校验的时候,根据上述 ECC 生成原理不难推断:将从 OOB 区中读出的原ECC 校验和新 ECC 校验 和按位异或,若结果为 0,则表示不存在错 (或是出现了 ECC无法检测的错误) ;若 3

8、个字节异或结果中存在 11个比特位为 1 ,表示存在一个比特错误,且可纠 正;若 3 个字节异或结果中只存在 1 个比特位为 1,表示 OOB区出错;其他情况均表示出现了无法纠正的错误。5.补充1)需要对前面由于 PageProgram 错误发现的坏块进行一下特别说明。如果在对一个 块的某个 page 进行编程的时候发生了错误就要把这个块标 记为坏块,首先就要把块里其他好的 面的内容备份到另外一个空的好块里面,然后,把这个块标记为坏块0当然,这可能会犯“错杀”之误,一个补救的办 法,就是在进行完块备份之后,再将这个坏块 擦除一遍, 如果 Block Erase 发生错误, 那就证明这个块是个

9、真正的坏块,那就毫不犹豫地将它打个“戳”吧!2)可能有人会问, 为什么要使用每个块第一页的 sparearea 的第六个 byte 作为坏块标记。这是 NAND Flash 生产商的默认约定, 你可以看到 Samsung,Toshiba,STMicroelectronics都是使用这个 Byte 作为坏块标记的。3)为什么好块用Oxff来标记?因为Nand Flash的擦除即是将相应块的位全部变为 1,写操作时只能把芯片每一位(bit) 只能从 1 变为 0,而不能从0变为10 0XFF这个值就是标识擦除成功,是好块。view plaincopy to clipboardprint?bbt 坏

10、块管理 日月 发表于 - 2010-3-2 9:59:00 2 推荐 前面看到在nand_scan ()函数的最后将会跳至scan_bbt ()函数,这个 函数在 nand_scan 里面有定义: 2415 if (!this->scan_bbt)2416 this->scan_bbt = nand_default_bbt; nand_default_bbt)位于 Nand_bbt.c 文件中。1047 /*table for the devicenand_default_bbt - NAND Interface Select a default bad block* mtd: M

11、TD device structure* support for thedevice and calls the nand_scan_bbt*/int* This selects the default bad block tablestructnand_default_bbt (struct mtd_info *mtd) nand_chip *this = mtd->priv; 这个函数的作用是建立默 认的坏块表。 1059 /* Default for AG-AND. We must use a flash based * bad block table as the devices

12、 have factory marked * _good_ blocks. Erasing those blocks leads to loss* of the good / bad information, so we _must_ store * thisinformation in a good / bad table during * startup*/if(this->options & NAND_IS_AND) /* Use thedefault pattern deors */if (!this->bbt_td)this->bbt_td = &b

13、bt_main_descr;this->bbt_md = &bbt_mirror_descr;this->options |= NAND_USE_FLASH_BBT;returnnand_scan_bbt (mtd, &agand_flashbased);如果Flash的类型是AG-AND (这种Flash类型比较特殊,既不是MLC 又不是 SLC ,因此不去深究了,而且好像瑞萨要把它淘汰掉),需要使用默认的模式描述符,最后再进入nand_scan_bbt ()函数。 1078 /* Is a flash based bad blocktable requested

14、 ? */if (this->options &NAND_USE_FLASH_BBT) /* Use the default patterndeors */if (!this->bbt_td) this->bbt_td =&bbt_main_descr;this->bbt_md =&bbt_mirror_descr;if(!this->badblock_pattern) this->badblock_pattern= (mtd->oobblock > 512) ?&largepage_flashbased : else&smallpage_flashbased;smallpage_memorybased = .options = NAND_BBthis->bbt_td = NULL;this->bbt_md =NULL;if (!this->badblock_pattern)this->badblock_pat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论