免费注册 查看新帖 |

Chinaunix

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

Nand Flash 启动 时的 ECC问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-13 09:34 |只看该作者 |倒序浏览

http://bbs.eepw.com.cn/dispbbs.asp?boardID=20&ID=62900

Nand Flash 启动 时的 ECC问题
为了支持NAND FLASH 的系统引导,S3C2410A具备了一个叫做“Stepping Stone"的内部SRAM缓冲器。当系统启动时,NAND FLASH的前4KB代码自动载入到“Steppingstone”中,然后系统自动执行这些载入的代码。一般这4KB引导代码需要将NAND FLASH 中的程序内容拷贝到SDRAM中,拷贝完后程序会转入到SDRAM中继续执行。
因为考虑到NAND FLASH的位交换问题,在NAND FLASH 向SDRAM拷贝数据时,我加入了ECC校验代码。ECC校验代码我是搬移U-BOOT的ECC部分的(这个ECC算法和VIVIBOOTLOADER的 ECC算法以及YAFFS中的ECC算法是一样的)。反复测试程序显示:一旦加入ECC算法,读页数据时很多时候会出现位错误(一位或两位或两位以上的位错误),程序运行不稳定。
问题:1. 为什么多数启动代码中的Nand Flash 的数据拷贝部分没有ECC校验,是不是硬件不支持?
         2. 问题会不会和NAND FLASH + SRAM 的启动方式有关呢?
[此贴子已经被作者于2006-3-17 15:59:05编辑过]

回答:
2410a有NAND FLASH控制器,可以自己生成ECC码。也就是说在不考虑纠错的情况下,在读数据页的时候,比较NAND控制寄存器产生的ECC和FLASH中保存的ECC,就可以知道数据是否正确。
- 华恒嵌入式Linux技术论坛 (http://www.hhcn.com/cgi-bin/leoboard.cgi)
-- (http://www.hhcn.com/cgi-bin/forums.cgi?forum=3)
--- 免费提供2410/2440 vivi 程序 (http://www.hhcn.com/cgi-bin/forums.cgi?forum=3&topic=490)
-- 作者: cefanty
-- 发布时间: 2006/09/14 11:07am
[这个贴子最后由cefanty在 2006/09/19 08:41pm 第 4 次编辑]
为了让大家能用到好用的bootloader vivi.现在免费发布vivi给大家使用.其中的功能包括:
1.加入了rootfs带hwecc功能的烧写.需要你编译kernel的时候加上S3C2410 NANDFLASH Hardware ECC选项.这样你就可以把nandflash/s3c2410.c中的chip->eccmode    = NAND_ECC_SOFT;给恢复了. 当然我也可以提供vivi是带NAND_ECC_SOFT的.
2.支持带yaffs iamge的写入功能.你可以将mkyaffsimage做好的yaffs的image 通过usb或者串口下载.
3.支持vivi开机logo,支持sharp和samsung的TFT 3.5''LCD.
4.支持高版本的gcc编译.vivi的体积只有83K(不支持网络)
5.通过load flash partition u 命令用usb下载.如何区分是yaffs image的下载.是通过每个分区的flag来区分的.例如:
part show
mtdpart info. (6 partitions)
name              offset        size            flag
------------------------------------------------
vivi            : 0x00000000    0x00020000    32(LOADER)        128k
param           : 0x00020000    0x00010000    64(PARAM)          64k
kernel          : 0x00030000    0x001c0000   128(KERNEL)          1M+768k
root            : 0x00200000    0x00500000   256(CRAMFS)          5M
usr             : 0x00700000    0x03500000   512(YAFFS1)         53M
yaffs           : 0x03c00000    0x00400000   512(YAFFS1)          4M
以YAFFS1和YAFFS2标志的partition是会用yaffs image的方式写回nandflash的.以CRAMFS为标志的是用HW ECC方式回写到partition的
需要提供的请跟帖,留下email.并声明需要的是2410A(12MHZ)版本还是2440A(16.9346MHZ)版本.用HW ECC还是Soft ECC.控制口是串口1,还是串口2等.
声明:我这个版本的vivi本人花费精力巨大,所以source code恕不免费提供.请大家不要用砖拍我.
启动信息如下:
VIVI version 1.1.0 (Modifed by cefanty_qiu Email:cefanty_qiu@163.com)  (root@rad
hat) (gcc version 3.4.1) #0.1.4 四 9月 14 08:45:24 CST 2006
MMU table base address = 0x33DFC000
Succeed memory mapping.
NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)
Found saved vivi parameters.
Press Return to start the LINUX now, any other key for vivi
type "help" for help.
vivi>
>Block 1585 marked for retirement
**>>yaffs ecc error unfixed on chunk 50910:0
**>>yaffs ecc error unfixed on chunk 50910:1
**>>Block 1590 marked for retirement
Reading data from NAND FLASH without ECC is not recommended
**>>yaffs ecc error unfixed on chunk 55855:0
**>>yaffs ecc error unfixed on chunk 55855:1
mount -t yaffs /dev/mtdblock/4   /usr
http://www.embedlinux.cn/ShowPost.asp?ThreadID=361
关于nand,mtd和yaffs2的配合使用问题的解决方法!
       如果你作nand驱动,那么肯定会知道yaffs2文件系统了,由于yaffs2的更新没有mtd那么快,所以就出现了他们配合不好的问题,经常出现 nand mount和umount的时候丢数据的问题,当你碰到这个问题的时候,不要慌张。你首先应该用jffs2去测试一下你的nand驱动是否正常,如果驱动是好的,但是还存在丢失数据的问题的话,那么你就碰到了yaffs2和mtd不匹配的想象了,总结了很多网友的经验,虽然不同的人解决问题的方法不一样,但是大部分都是由于nand写oobbuf的问题上,yaffs2要给mtd一个buf,你要查查看mtd有没有接受这个buf吧,还有就是最新的 yaffs2和最新的mtd代码是不能匹配的,我测试过效果极差,需要手动去修改bug,另外最新的mtd当你选择none-ecc模式的时候是不处理 oob数据的,你要在write_ecc函数里加上写oobbuf的语句才可以的。
     总之当你碰到nand丢失数据的问题的时候,不要和我一样盲目的人为yaffs2代码有bug了,其实是他们配合的问题,更不要盲目的下载最新代码,这样你porting她们也要花很多时间,弄好了还不一定能解决问题啊!
    如果你的问题实在不能解决可以mail我,我和兄弟们会帮大家查看一下,再不行只能另请高人了:)


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/24474/showart_257617.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP