免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 14857 | 回复: 10
打印 上一主题 下一主题

Nand flash ECC数据错误怎么办? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-16 10:39 |只看该作者 |倒序浏览
RT

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
2 [报告]
发表于 2009-12-16 11:05 |只看该作者
是不是kernel编译选项选的不对呢?

论坛徽章:
0
3 [报告]
发表于 2009-12-16 11:57 |只看该作者
编译选项会造成ECC错误?

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
4 [报告]
发表于 2009-12-16 11:59 |只看该作者
原帖由 zyr-linux 于 2009-12-16 11:57 发表
编译选项会造成ECC错误?


应该有可能
但是不确定,所以我是以疑问句来回答楼主的
毕竟我经验不足

论坛徽章:
0
5 [报告]
发表于 2009-12-16 12:21 |只看该作者
编译选项可以选开不开ECC,但是ECC产生是和硬件挂钩的。

不过某些标识为没ECC的器件如果开了ECC真有可能乱报错。

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
6 [报告]
发表于 2009-12-16 13:38 |只看该作者
我编译过kernel
当时选了ECC校验
启动以后报错
去掉了,就不报错了
所以我会先考虑是不是这个问题
一般来说,硬件ECC校验出错可能性比较小吧?

论坛徽章:
0
7 [报告]
发表于 2009-12-16 21:39 |只看该作者
我做的文件系统过大,也会提示这个错误!

论坛徽章:
0
8 [报告]
发表于 2009-12-17 17:15 |只看该作者
错误 貌似就没得救了..
除非有备份...然后 就可以还原了.

论坛徽章:
0
9 [报告]
发表于 2009-12-18 14:38 |只看该作者

我啥也不懂

-----摘自网络经典文章:“LINUX系统移植“
我们的内核都是通过UBOOT写到Nand Flash的, UBOOT通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的. 所以, 我们在这里选择禁止内核ECC校验.
修改drivers/mtd/nand/s3c2410.c 文件:
[arm@localhost linux2.6.14]$
vi drivers/mtd/nand/s3c2410.c
找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:
chip>
eccmode = NAND_ECC_NONE;
保存,退出。

论坛徽章:
0
10 [报告]
发表于 2009-12-21 08:48 |只看该作者
ECC很重要,SPARE区域在NAND FLASH架构定义之初就是主要用来存放ECC编码的,因为NAND FLASH数据出错概率高需要加ECC进行校验



1.一个页读/写失败了,那么是否要将其所在块标识成坏块?



一般应用NAND FLASH时都会同时使用ECC纠错,无论是硬件纠错还是软件实现。在有ECC的情况下如果写入一个Page失败是可以将其读出以判断出现的错误是否可以被ECC校验纠正。若可以被ECC纠正则可以考虑仍将该页所在块视为有效块。若是出现页写入错误就将该块表为坏块,软件在实现上会更容易。根据具体需要可以选择不同的处理



2. ecc是做什么的?ecc校验失败是否可以确定该块已经变成了坏块呢?ecc校验是否可以关闭?



ECC代表Error Correction Code及纠错码,是NAND FLASH应用的关键。因为NAND FLASH的数据可靠性问题一般使用NAND FLASH都需要对其数据进行ECC校验。一般的用法是在写入NAND FLASH时在主数据区内写入正常数据,而住数据区数据的ECC校验码则写入Spare区。将住数据区数据读出时Spare区的ECC码也必须一起读出以便进行ECC校验及纠错。基本上若是读出数据后发现ECC校验失败则当前块必须被标记为坏块。软件实现的ECC校验算法一般都可以关闭,有硬件直接实现的ECC校验模块则需要看硬件是否支持关闭ECC。一般都可以关闭。



3. 是否只有当擦除一个块失败之后,才可以把该块视为坏块?



如前所述,仍然是软件策略选择问题。若是擦除失败,仍可尝试写入数据并读出看ECC能否纠错,若是可被ECC纠正,则可以将该块视为有效块。因为块擦除失败有相当概率是因为块内一两位无法被擦除造成,一般使用的硬件ECC纠错都可纠至少两位以上错误,纠错4-8位也不少见。在擦除失败之后直接将其标为坏块可以作为最简单的软件处理方法。

以上内容摘自网络
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP