


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 字节的 NA
2、ND 每页分配 16 字节的 OOB ;如果 NAND 物理上是 2K的 Page,则每个 Page 分配 64 字节的 OOB 。如下图:以HYNIX为例,图中黑体的是实际探测到的NAND ,是个 2Gbit (256M )的 NAND 。PgSize 是 2K 字节, PgsPBlk 表示每个 BLOCK 包含 64 页,那么每个 BLOCK 占用的字节数是 64X2K=128K 字节;该 NAND 包好 2048 个 BLOCK ,那么可以算出 NAND 占用的字节数是 2048X128K=256M ,与实际相符。需要注意的是 SprSize 就是 OOB 大小,也恰好是2K 页所用的6
3、4字节。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 标记为非 0xff 的值。 3.坏块管理根据上面的这些叙述, 可以了解 NAND Flash 出厂时在spare area中已经反映出了坏块信息,因此,如果在擦除一个块之前,一定要先check一下第一页的spare area的第6个 byte 是否是 0xff ,如果是就证明这是一个好块,可以擦除;如果是非 0xff ,那么就
5、不能擦除,以免将坏块标记擦掉。当然,这样处理可能会犯一个错误“错杀伪坏块”,因为在芯片操作过程中可能由于电压不稳定等偶然因素会造成 NAND 操作的错误。 但是,为了数据的可靠性及软件设计的简单化,还是需要遵照这个标准。可以用 BBT : bad blocktable,即坏块表来进行管理。各家对 nand 的坏块管理方法都有差异。比如专门用nand 做存储的,会把bbt 放到 block0 ,因为第 0 块一定是好的块。但是如果nand 本身被用来boot,那么第0 块就要存放程序,不能放bbt 了。有的把 bbt 放到最后一块,当然,这一块坚决不能为坏块。bbt 的大小跟 nand 大小有关
6、, nand越大,需要的bbt 也就越大。需要注意的是:OOB是每个页都有的数据,里面存的有ECC(当然不仅仅) ;而BBT 是一个 FLASH 才有一个;针对每个BLOCK 的坏块识别则是该块第一页spare area的第六个字节。4.坏块纠正ECC:NANDFlash 出错的时候一般不会造成整个Block或是Page 不能读取或是全部出错,而是整个Page(例如 512Bytes)中只有一个或几个 bit 出错。一般使用一种比较专用的校验ECC。ECC 能纠正单比特错误和检测双比特错误,而且计算速度很快,但对1 比特以上的错误无法纠正,对2 比特以上的错误不保证能检测。ECC一般每256
7、字节原始数据生成3 字节ECC校验数据,这三字节共24 比特分成两部分:6 比特的列校验和16 比特的行校验, 多余的两个比特置 1(。 512 生成两组 ECC ,共6字节)当往 NAND Flash 的 page 中写入数据的时候,每 256 字节我们生成一个 ECC 校验和,称之为原 ECC 校验和,保存到 PAGE 的 OOB( out-of-band)数据区中。其位置就是eccpos 。校验的时候,根据上述 ECC 生成原理不难推断:将从OOB 区中读出的原ECC 校验和新ECC 校验和按位异或, 若结果为0,则表示不存在错 (或是出现了ECC无法检测的错误) ;若 3 个字节异或结
8、果中存在11 个比特位为 1,表示存在一个比特错误,且可纠正;若 3 个字节异或结果中只存在1 个比特位为1,表示 OOB区出错;其他情况均表示出现了无法纠正的错误。5.补充(1)需要对前面由于PageProgram 错误发现的坏块进行一下特别说明。如果在对一个块的某个 page 进行编程的时候发生了错误就要把这个块标记为坏块,首先就要把块里其他好的面的内容备份到另外一个空的好块里面,然后,把这个块标记为坏块。当然,这可能会犯“错杀”之误,一个补救的办法,就是在进行完块备份之后,再将这个坏块擦除一遍, 如果 Block Erase 发生错误, 那就证明这个块是个真正的坏块,那就毫不犹豫地将它打
9、个“戳”吧!(2)可能有人会问, 为什么要使用每个块第一页的sparearea 的第六个 byte 作为坏块标记。这是NAND Flash 生产商的默认约定,你可以看到Samsung,Toshiba,STMicroelectronics都是使用这个Byte 作为坏块标记的。( 3)为什么好块用 0xff 来标记?因为Nand Flash 的擦除即是将相应块的位全部变为 1,写操作时只能把芯片每一位 (bit) 只能从 1 变为 0,而不能从 0 变为 1。0XFF 这个值就是标识擦除成功, 是好块。=view plaincopy to clipboardprint?bbt 坏块管理日月 发表于
10、 - 2010-3-2 9:59:002推荐前面看到在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 /*nand_default_bbt - NAND Interface Select a default bad blocktable for the device* mtd: MTD device
11、 structure* This selects the default bad block table* support for thedevice and calls the nand_scan_bbt*/intnand_default_bbt (struct mtd_info *mtd)structnand_chip *this = mtd->priv; 这个函数的作用是建立默认的坏块表。 1059 /* Default for AG-AND. We must use aflash based* bad block table as the devices have fac
12、torymarked* _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 = &
13、amp;amp;bbt_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 b
14、ased bad blocktable requested ? */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 :&smallpage_flashbased; elsethis->bbt_td = NULL;this->bbt_md =NULL;if (!this->badblock_pattern)this->badblock_pattern = (mtd->oobblock >512) ?&larg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小餐饮技术加盟合同范本
- 挖掘机共同施工合同协议
- 临时洗碗工用工合同范本
- 专升本入学协议书模板
- 酒店劳务合同协议书模板
- 新闻策划合同协议书模板
- 雇主与保姆双方合同范本
- 租赁融资租赁类合同范本
- 攀枝花吊车租用合同协议
- 不履行合同义务协议书
- 仓库出租合同范文
- 安全教育教程(高职)全套教学课件
- 智能建造施工技术应用实施方案
- 郑州市第四中学初一新生分班(摸底)数学模拟考试(含答案)【6套试卷】
- 2023年内蒙古化工职业学院单招笔试职业技能考试题库及答案解析
- GB/T 2423.7-1995电工电子产品环境试验第2部分:试验方法试验Ec和导则:倾跌与翻倒(主要用于设备型样品)
- 西师版四年级数学上册第一单元测试题(A)
- 花甲水库库底清理实施方案(修订稿)
- 中医李源生针拔法治疗脑胶质瘤
- 麻醉科诊疗规范与操作常规
- 通风空调投标技术标版
评论
0/150
提交评论