• «
  • 1
  • 2
  • 3
  • »
  • Pages: 2/3     Go
主题 : 持续更新---分享一下最近搞的tiny210V2从nand启动支持(K9GAG08U0F). 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 54383
精华: 0
发帖: 61
金钱: 315 两
威望: 63 点
贡献值: 0 点
综合积分: 122 分
注册时间: 2011-08-29
最后登录: 2016-09-14
10楼  发表于: 2013-04-24 10:52
楼主你好,也在研究K9GAG08U0F的nand启动,我这边nand也可以启动起来,有几个地方不一样,
1  \include\s5pc110.h 我用的是
#define  NFCONF_VAL     (0<<25)|(0x3<<23)|(7<<12)|(7<<8)|(7<<4)|(1<<3)|(0<<2)|(1<<1)|(0<<0)
查210  datasheet  NFCONF这段
PageSize  [2]    This bit indicates the page size of NAND Flash Memory,
                            When MLCFlash is 0, the value of PageSize is as follows:
                              0 = 2048 Bytes/page 1 = 512 Bytes/page
                            When MLCFlash is 1, the value of PageSize is as follows:
                              0 = 4096 Bytes/page 1 = 2048 Bytes/page

K9GAG08U0F 是用的4k pagesize MLC 16bit ECC

2   int s3c_nand_correct_data_16bit(struct mtd_info *mtd, u_char *dat)
{
    int ret = -1;
    u_long nf8eccerr0, nf8eccerr1, nf8eccerr2, nf8eccerr3, nf8eccerr4, nf8eccerr5, nf8eccerr6, nf8eccerr7, nf8eccerr8,nfmlc8bitpt0, nfmlc8bitpt1,nfmlc8bitpt2, nfmlc8bitpt3;
    u_char err_type;

    s3c_nand_wait_ecc_busy_8bit();

    nf8eccerr0 = readl(NFECCSECSTAT);
    nf8eccerr1 = readl(NFECCERL0);
    nf8eccerr2 = readl(NFECCERL1);
    nf8eccerr3 = readl(NFECCERL2);
    nf8eccerr4 = readl(NFECCERL3);

    /*add */
    nf8eccerr5 = readl(NFECCERL4);
    nf8eccerr6 = readl(NFECCERL5);
    nf8eccerr7 = readl(NFECCERL6);
    nf8eccerr8 = readl(NFECCERL7);

    
    nfmlc8bitpt0 = readl(NFECCERP0);
    nfmlc8bitpt1 = readl(NFECCERP1);

    /*add */
    nfmlc8bitpt2 = readl(NFECCERP2);
    nfmlc8bitpt3 = readl(NFECCERP3);
    err_type = (nf8eccerr0) & 0xf;

    /* No error, If free page (all 0xff) */
    if ((nf8eccerr0 >> 29) & 0x1)
        err_type = 0;

    switch (err_type) {
    case 17/*9*/: /* Uncorrectable */
        printk("s3c-nand: ECC uncorrectable error detected\n");
        ret = -1;
        break;
        
    #if 1 /*add */
    case 16: /* 8 bit error (Correctable) */
        dat[(nf8eccerr8 >> 16) & 0x3ff] ^= ((nfmlc8bitpt3 >> 24) & 0xff);

    case 15: /* 7 bit error (Correctable) */
        dat[(nf8eccerr8) & 0x3ff] ^= ((nfmlc8bitpt3 >> 16) & 0xff);

    case 14: /* 6 bit error (Correctable) */
        dat[(nf8eccerr7 >> 16) & 0x3ff] ^= ((nfmlc8bitpt3 >> 8) & 0xff);

    case 13: /* 5 bit error (Correctable) */
        dat[(nf8eccerr7) & 0x3ff] ^= ((nfmlc8bitpt3) & 0xff);

    case 12: /* 8 bit error (Correctable) */
        dat[(nf8eccerr6 >> 16) & 0x3ff] ^= ((nfmlc8bitpt2 >> 24) & 0xff);

    case 11: /* 7 bit error (Correctable) */
        dat[(nf8eccerr6) & 0x3ff] ^= ((nfmlc8bitpt2>> 16) & 0xff);

    case 10: /* 6 bit error (Correctable) */
        dat[(nf8eccerr5 >> 16) & 0x3ff] ^= ((nfmlc8bitpt2>> 8) & 0xff);

    case 9: /* 1 bit error (Correctable) */
        //printk("s3c-nand: %d bit(s) error detected, corrected successfully\n", err_type);
        dat[(nf8eccerr5) & 0x3ff] ^= ((nfmlc8bitpt2) & 0xff);
        //ret = err_type;
        break;

    #endif
    case 8: /* 8 bit error (Correctable) */
        dat[(nf8eccerr4 >> 16) & 0x3ff] ^= ((nfmlc8bitpt1 >> 24) & 0xff);

    case 7: /* 7 bit error (Correctable) */
        dat[(nf8eccerr4) & 0x3ff] ^= ((nfmlc8bitpt1 >> 16) & 0xff);

    case 6: /* 6 bit error (Correctable) */
        dat[(nf8eccerr3 >> 16) & 0x3ff] ^= ((nfmlc8bitpt1 >> 8) & 0xff);

    case 5: /* 5 bit error (Correctable) */
        dat[(nf8eccerr3) & 0x3ff] ^= ((nfmlc8bitpt1) & 0xff);

    case 4: /* 8 bit error (Correctable) */
        dat[(nf8eccerr2 >> 16) & 0x3ff] ^= ((nfmlc8bitpt0 >> 24) & 0xff);

    case 3: /* 7 bit error (Correctable) */
        dat[(nf8eccerr2) & 0x3ff] ^= ((nfmlc8bitpt0>> 16) & 0xff);

    case 2: /* 6 bit error (Correctable) */
        dat[(nf8eccerr1 >> 16) & 0x3ff] ^= ((nfmlc8bitpt0>> 8) & 0xff);

    case 1: /* 1 bit error (Correctable) */
        printk("s3c-nand: %d bit(s) error detected, corrected successfully\n", err_type);
        dat[(nf8eccerr1) & 0x3ff] ^= ((nfmlc8bitpt0) & 0xff);
        ret = err_type;
        break;

    case 0: /* No error */
        ret = 0;
        break;
    }

    return ret;
}
/*add */ 是我添加的地方,与16位校准相对应,可以查看datasheet  中NFECCSECSTAT NFECCERP0~3 这几个寄存器说明。

我测试了一下,上面这两个地方其实并不影响nand 启动,个人感觉从驱动完整性方面考虑应该是这样配置。
现在卡在nand启动解压 kernel这块
.......
dev_id ID:d5
MLC
maf_id=ec,dev_id=d5

  11111

mtd->erasesize =1048576, mtd->writesize =4096, mtd->oobsize =512, busw =0

busw=0  
2048 MB
*** Warning - using default environment

In:      serial
Out:     serial
Err:     serial
Hit any key to stop autoboot:  0
checking mode for fastboot ..
.NAND read: device 0 offset 0x600000, size 0x400000
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 8 bit(s) error detected, corrected successfully

s3c-nand: 6 bit(s) error detected, corrected successfully
s3c-nand: 8 bit(s) error detected, corrected successfully
s3c-nand: 7 bit(s) error detected, corrected successfully
s3c-nand: 8 bit(s) error detected, corrected successfully
s3c-nand: 7 bit(s) error detected, corrected successfully
s3c-nand: 7 bit(s) error detected, corrected successfully
s3c-nand: 3 bit(s) error detected, corrected successfully
s3c-nand: 2 bit(s) error detected, corrected successfully
s3c-nand: 6 bit(s) error detected, corrected successfully
s3c-nand: 8 bit(s) error detected, corrected successfully
s3c-nand: 5 bit(s) error detected, corrected successfully
s3c-nand: 5 bit(s) error detected, corrected successfully
s3c-nand: 7 bit(s) error detected, corrected successfully
s3c-nand: 5 bit(s) error detected, corrected successfully
s3c-nand: 3 bit(s) error detected, corrected successfully
s3c-nand: 7 bit(s) error detected, corrected successfully
s3c-nand: 4 bit(s) error detected, corrected successfully
s3c-nand: 3 bit(s) error detected, corrected successfully
s3c-nand: 2 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 4 bit(s) error detected, corrected successfully
s3c-nand: 4 bit(s) error detected, corrected successfully
s3c-nand: 2 bit(s) error detected, corrected successfully
s3c-nand: 1 bit(s) error detected, corrected successfully
s3c-nand: 3 bit(s) error detected, corrected successfully
4194304 bytes read: ERROR
## Booting kernel from Legacy Image at c0008000 ...
   Image Name:   Linux-3.0.8
   Created:      2013-04-22  10:44:57 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3739992 Bytes =  3.6 MB
   Load Address: 20008000
   Entry Point:  20008000
   Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!

如果nand 启动的时候 直接用tftp c0008000 uImage;bootm c0008000 的话,内核是可以解压的,打印信息都正常,启动参数的设置 环境变量 包括串口这些方面我都确认过了 没问题,
网上就这个Verifying Checksum ... Bad Data CRC错误有所谓很多的解决方法,都没用,使用 nand dump ***  读出内容和uboot.bin uImage 文件是一致的.觉得问题还是出在uboot中nandflash 驱动这块。不知大家有什么建议,不胜感激!
级别: 新手上路
UID: 90773
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2013-04-24
最后登录: 2017-09-13
11楼  发表于: 2013-04-24 18:37
        
级别: 侠客
UID: 87780
精华: 0
发帖: 93
金钱: 470 两
威望: 94 点
贡献值: 0 点
综合积分: 186 分
注册时间: 2013-02-26
最后登录: 2016-07-27
12楼  发表于: 2013-04-24 19:12

 回 10楼(cc999123) 的帖子

恩,看到你的问题了,当时我在移植这个的时候,还有些东西没增加进去。你的那个nand read 好像会报错哦!读的驱动可能有点问题。对于内核,我现在也卡住了,因为我接触Linux时间不长,所以上来卡了不少的问题。还有一个问题就是,你的kernel用tftp 下载启动如果正常的,就肯定是nand驱动的问题,目前我也没的其他的办法解决,请见谅啊。。。对了,你用的开发板是?以及内核?
级别: 侠客
UID: 87780
精华: 0
发帖: 93
金钱: 470 两
威望: 94 点
贡献值: 0 点
综合积分: 186 分
注册时间: 2013-02-26
最后登录: 2016-07-27
13楼  发表于: 2013-05-07 10:48
目前我已经把前期4.17哪个版本更新了,前面的版本出现了很多问题,主要是坏块的问题,还有就是当时没有移植YAFFS2,现在已经完成了这些问题的,后续我会将最近根性的版本在网上更新,开源给大家做测试。。。只是最近时间有点紧,所以目前还没再网上更新。。。谢谢你的支持。。。
还有就是前面网友提到的我的uboot当中全部用的4K/page,这其实是导致擦除的时候坏块的主要原因,目前已经解决了4K,8K的问题,已经内核引导和根文件系统的烧写,都经过测试,能用,后面我会更新版本,感谢大家的支持。。。
级别: 新手上路
UID: 88678
精华: 0
发帖: 23
金钱: 120 两
威望: 24 点
贡献值: 0 点
综合积分: 46 分
注册时间: 2013-03-13
最后登录: 2013-11-12
14楼  发表于: 2013-05-15 21:11
求个QQ加个,交流交流
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
15楼  发表于: 2013-06-02 10:42

 回 楼主(lihp1603) 的帖子

图片:
下载到NandFlash中只能启动到这里:
OKOKraise: Signal # 8 caught


U-Boot 2011.06 (Jun 02 2013 - 09:37:27) for FriendlyARM-YDZX210

CPU:    S5PC110@1000MHz

Board:   FriendlyARM-YDZX210
gd.env_addr=0x23e25ffc
gd.env_valid=0x1
DRAM:  512 MiB
It's ok!!
board_init_r!!
WARNING: Caches not enabled

PWM Moudle Initialized.
GPD0CON  : 1111, GPD0DAT  : e
nand_init be called.
NAND:  1st=ec
2st=d5
3st=94
4st=76
4st=54
6st=43
id = d5
chip->options=20200
busw=0
tmp_nanf=0xec
tmp_id=0xd5
name=NAND 2GiB 3,3V 8-bit
mtd->oobsize=512
chip->options=20200
busw=0
type->options=11d
2048 MiB
MMC:  
级别: 侠客
UID: 87780
精华: 0
发帖: 93
金钱: 470 两
威望: 94 点
贡献值: 0 点
综合积分: 186 分
注册时间: 2013-02-26
最后登录: 2016-07-27
16楼  发表于: 2013-06-17 09:31
最新的版本用于测试:http://pan.baidu.com/share/link?shareid=636708253&uk=555024270
由于uboot还存在一些潜在问题没得到解决,希望大家来共同努力完善和找出这其中的漏洞,如果你有什么好的优化方式记得一定跟我分享。。。
有兴趣的朋友可以和我一起来探讨,谢谢。。。。
目前uboot能启动内核和挂载根文件系统(yaffs),本人已经测试。。。。
级别: 侠客
UID: 16060
精华: 0
发帖: 87
金钱: 435 两
威望: 87 点
贡献值: 0 点
综合积分: 174 分
注册时间: 2010-03-13
最后登录: 2018-02-08
17楼  发表于: 2013-06-17 09:53
多谢楼主,正在学习..............
级别: 侠客
UID: 16060
精华: 0
发帖: 87
金钱: 435 两
威望: 87 点
贡献值: 0 点
综合积分: 174 分
注册时间: 2010-03-13
最后登录: 2018-02-08
18楼  发表于: 2013-06-18 09:34
请教楼主,我下载了uboot编译之后擦除板子上的Flash,然后dump扇区发现后半部分的数据
级别: 侠客
UID: 16060
精华: 0
发帖: 87
金钱: 435 两
威望: 87 点
贡献值: 0 点
综合积分: 174 分
注册时间: 2010-03-13
最后登录: 2018-02-08
19楼  发表于: 2013-06-18 09:35
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
  • «
  • 1
  • 2
  • 3
  • »
  • Pages: 2/3     Go