主题 : 分析一下tiny210v2的16bitECC校验(已经实现u-boot for tiny210v2) 复制链接 | 浏览器收藏 | 打印
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
30楼  发表于: 2013-07-25 01:28

 回 26楼(sunboyljp) 的帖子

关于uboot for tiny210v2 请关注这个帖子:http://www.aiothome.net/read.php?tid-80476.html
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
31楼  发表于: 2013-07-25 01:29

 回 28楼(mhjong) 的帖子

很感谢你能发表你的意见,我好好研究再详细回复。
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
32楼  发表于: 2013-07-25 01:30

 回 29楼(sunboyljp) 的帖子

正在移植,请关注这里:http://www.aiothome.net/read.php?tid-80476.html
级别: 侠客
UID: 13362
精华: 0
发帖: 91
金钱: 460 两
威望: 92 点
贡献值: 0 点
综合积分: 182 分
注册时间: 2010-01-23
最后登录: 2020-12-05
33楼  发表于: 2013-07-27 15:51

 回 楼主(kangear) 的帖子

很好,值得学习。。
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
34楼  发表于: 2013-07-28 11:38

 回 28楼(mhjong) 的帖子

ErrByteLoc我仔细看了一下,确实应该是10位:

这个没有什么秘密,就是我算错了,算成了9位,悲哀。估计我最后得出那个“递增”的思想就不一定说的准了。估计也不需要递增了!就是没有修正完!

另外你说的“这个ECC引擎,不仅用来纠正数据错误,也用来纠正ECC错误”确实没有注意到,我还以为人工配置一下oob的ECC,才能保证ECC校验码不会出错。解开了我很多谜团。您是第一个用心分析源码的人,向您致敬!
根据你所说的,我可能在代码上要做如下纠正:
1.0x1ff 改为 0x3FF
2.去掉数组递增验证
3.友善的淡定码也有了新的理解,应该是用来标注坏块的。


感谢你的纠正!
这里会有BL1的最新进展,欢迎您的关注!
https://github.com/kangear/tiny210v2-uboot
[ 此帖被kangear在2013-07-28 12:17重新编辑 ]
级别: 新手上路
UID: 93759
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
贡献值: 0 点
综合积分: 40 分
注册时间: 2013-06-30
最后登录: 2014-03-26
35楼  发表于: 2013-07-29 21:15

 回 34楼(kangear) 的帖子

因为ecc能自我纠正,所以oob里ecc那部分就不用再用ecc校验了。
所以友善的OOB校验码只校验了第4到35字节,也就是OOB的空闲部分。
因为你测试的那几个页面那部分都是空闲的FF,所以校验码总是不变。
oob开头字节是坏块标记。

ECC的自我纠正我也是看了你提出的现象以后看了文档,然后实验验证才弄明白的,以前我写的代码是oob里前480多字节全部参与校验的。
级别: 新手上路
UID: 82740
精华: 0
发帖: 33
金钱: 165 两
威望: 33 点
贡献值: 0 点
综合积分: 66 分
注册时间: 2012-11-27
最后登录: 2018-09-18
36楼  发表于: 2013-07-30 09:57
正再看ecc,谢谢分享
级别: 新手上路
UID: 85678
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
贡献值: 0 点
综合积分: 20 分
注册时间: 2013-01-08
最后登录: 2013-09-17
37楼  发表于: 2013-07-31 08:50
支持樓主, 學習學習
级别: 新手上路
UID: 82740
精华: 0
发帖: 33
金钱: 165 两
威望: 33 点
贡献值: 0 点
综合积分: 66 分
注册时间: 2012-11-27
最后登录: 2018-09-18
38楼  发表于: 2013-07-31 17:02
首先感谢楼主无私地提供自己的学习经验,解决了我对ECC不少的困惑。
其次通过学习楼主的源码我发现修改nandll_read_n_byte函数可以对启动速度提高不少:
    把for语句后面的随机读放到for上面去,代码如下:

static void nandll_read_n_byte( uchar* buf, ulong addr, ulong add,  ulong size )
{
   int i = 0;
   NAND_ENABLE_CE();
   NFCMD_REG = NAND_CMD_READ0;
   NFADDR_REG = 0;
   NFADDR_REG = 0;
   NFADDR_REG = (addr) & 0xff;
   NFADDR_REG = (addr >> 8 ) & 0xff;
   NFADDR_REG = ( addr >> 16 ) & 0xff;

   NFCMD_REG = 0x30;
   NF_TRANSRnB();

   NFCMD_REG = 0x05;
   NFADDR_REG = (char)((add)&0xff);
   NFADDR_REG = (char)(((add)>>8)&0x3f);
   NFCMD_REG = 0xe0;
   NF_TRANSRnB();
   for( i = 0; i < size; i++ )
   {
      *buf++ = NFDATA8_REG;
   }

   NAND_DISABLE_CE();
}
级别: 侠客
UID: 71095
精华: 0
发帖: 52
金钱: 260 两
威望: 52 点
贡献值: 0 点
综合积分: 104 分
注册时间: 2012-05-30
最后登录: 2014-11-17
39楼  发表于: 2013-08-03 22:28