首页 理论教育 NANDFlash坏块处理方法实例 Linux驱动开发实例

NANDFlash坏块处理方法实例 Linux驱动开发实例

时间:2023-10-19 理论教育 版权反馈
【摘要】:NAND Flash分为多个块,块又包含多个页,每个页里面包含数据区以及OOB区。假如超过1bit的数据出错,该块会被标记为坏块。Linux内核启动时会读取BBT表,后面的NAND操作会绕过BBT坏块。ECC相关的操作结构如下:另外由于漂移效应、编程干扰、读干扰,Nand Flash的某些block会偶尔出现bit级别的值翻转,即某些bit由1变为0,或由0变为1,这种现象称作位反转。但对于只有1bit的位反转,也应及时修复,避免该block中其他bit继续发生位反转,造成不可修复的数据错误。

NANDFlash坏块处理方法实例
Linux驱动开发实例

NAND Flash分为多个块(block),块又包含多个页(page),每个页里面包含数据区以及OOB区。图12-4为K9F2G08X0A的存储结构。

978-7-111-56706-6-Chapter12-33.jpg

图12-4 K9F2G08X0A存储结构

OOB区(带外区)存放一些特殊数据,最重要的就是ECC(Error Checking and Correction)数据。ECC用来检查block中的数据是否正确,它能纠正1bit的数据错误,并能检查2bit的数据错误。写入数据时,会计算每个写入块的ECC值,存放到OOB中。读数据时,会对读到的数据计算出ECC,与OOB中的ECC进行对比。假如超过1bit的数据出错,该块会被标记为坏块。坏块将写入Flash中的BBT(bad block table)表。Linux内核启动时会读取BBT表,后面的NAND操作会绕过BBT坏块。要屏蔽BBT扫描,可以设置nand_chip结构的options为忽略BBT扫描:

#define NAND_SKIP_BBTSCAN 0x00010000

当然,假如内核与根文件系统存储区出现坏块,可能会导致系统无法启动,通常需要重新烧写才可。所以很多嵌入式系统会将内核与文件系统镜像备份在Flash的某个分区,当系统出现问题时,可以进行自动修复。ECC相关的操作结构如下:(www.xing528.com)

978-7-111-56706-6-Chapter12-34.jpg

978-7-111-56706-6-Chapter12-35.jpg

另外由于漂移效应、编程干扰、读干扰,Nand Flash的某些block会偶尔出现bit级别的值翻转,即某些bit由1变为0,或由0变为1,这种现象称作位反转(bitflip)。出现1bit的位反转还能修复,往往也不被系统当作坏块。但对于只有1bit的位反转,也应及时修复,避免该block中其他bit继续发生位反转,造成不可修复的数据错误。位反转可以用nanddump工具检测与修复:

978-7-111-56706-6-Chapter12-36.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈