Chinaunix首页 | 论坛 | 博客
  • 博客访问: 980918
  • 博文数量: 192
  • 博客积分: 3070
  • 博客等级: 中校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-27 23:44
个人简介

Start Linux Leave Linux a while Back to Linux

文章分类

全部博文(192)

文章存档

2023年(18)

2022年(11)

2021年(8)

2020年(14)

2019年(7)

2018年(13)

2017年(16)

2016年(4)

2012年(2)

2011年(13)

2010年(26)

2009年(13)

2008年(27)

2007年(20)

我的朋友

分类: LINUX

2007-06-27 23:51:00

通过一个星期的努力,终于打2440的HARDWARE ECC调通了!!这篇文章记录一些开发过程中遇到的问题。
ECC校验码可以由硬件产生也可以由软件产生,可以通过内核配置ECC的校验码由Nand flash controller产生还是由软件产生。
HWECC和Bootloader是相关联的。我的Bootloader是Uboot来引导的,而Uboot和Kernel以FS都是放在Nand Flash上的,Nand Flash是64M 的(1Block=16KByte=32Page,1Page =512 +16Byte),当用Uboot写Kernel和FS到NAND Flash时,每写256BYTE HWECC就会产生3Byte OOB,所以每写1页就有6Byte OOB。也可以通过设置每写1页时才去读 NFMECC0。所以每写完一页就要将读回来的6Byte OOB写到512Byte之后相应的位置(不同的位置含义是不同的??好像一般的是第5Byte就是Bad block标志,不太清楚),即后16Byte。8到15没用到,写入FF.
在配置内核时,如在内核选中S3C2410 Nand Hardware ECC,启动时内核时会返回一系列如
mtd->read(0x400 bytes from 0x0) returned ECC error 的信息。
这主要是硬件产生的ECC和你读回来的ECC不同所产生的。查了一下S3C2410.C,原来
chip->ecc.size=512;
所以每读512Byte才去读NFMECC0这个寄存器,因为Uboot是每写256Byte就去读NFMECC0的,故两者读回来的ECC不同.可以通过修改UBoot或ecc.size.当读后256Byte时应该注意OOB的位置必须和UBoot的OOB相匹配,否则还是会Return ECC error.
调试时把相关的信息都打印出来
 
 
阅读(3474) | 评论(2) | 转发(0) |
0

上一篇:没有了

下一篇:linux常用命令

给主人留下些什么吧!~~

chinaunix网友2010-12-29 14:58:40

能帮个忙吗?我也在调hwecc,还没想到办法,可以给我一个nand_base.c吗?或是指点一下,不胜感激。email gccmengbin@126.com