主题 : uboot可以从2g mlc启动内核了完成了ecc校验(等这一刻很久了) 复制链接 | 浏览器收藏 | 打印
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
楼主  发表于: 2013-08-25 13:59

 uboot可以从2g mlc启动内核了完成了ecc校验(等这一刻很久了)

管理提醒: 本帖被 xoom 执行加亮操作(2013-08-25)
算算弄这个的时候是6月份,7月份工作变动,就放下了,没有弄这个了。工作内容不是太忙了,又想起来了我的tiny210v2-uboot还不能从NandFlash启动内核,实在是很不爽,就决定这个周末要搞出来!每次要做一个东西的时候,会全心关注,谁也不搭理!调试,printf打印,打印机打印,对比,分析。像着了魔一样,现在距离周末过完还有几个小时,我可以好好的整理我的代码,我会把此时正在调试的代码原封不动的push到github上,过程要比结果重要的多。



这里简单说下怎么使用:
启动这个,还先基于Superboot的烧写,然后来根据它产生的校验码来做uboot拷贝内核时候的校验
Step1

Step2: setenv machid 0xd8a
Step3:nand read 21000000 400000 500000
Step4:crc32 21000000 496248 20000000
Step5:go 21000000

bin文件:
本部分内容设定了隐藏,需要回复后才能看到



再说一句就整理代码去了,这里要感谢坛子里边的 mhjong 还有github上的wb0330。在BL1代码发出之后,给出了很多指导和意见!交流明白了很多东西,才能有勇气去研究启动内核和烧写yaffs。

经过多次实验用go来启动zImage是不太稳定的,可以用bootm来启动uImage是比较靠谱一些。(uboot代码更新还会在这里:http://aiothome.net/read.php?tid-80476.html)

关键是driver/mtd/nand/s5pc1xx_nand.c这个文件和修改。这里边有jsgood 或者liukun123移植的8bit的ecc校验,说是用在slc上的,我在slc上测试,slc都没有位翻转过,不知道是怎么测试的NandFlash读with 8bit ecc(代码中如果有翻转位并纠正了会打印出来的,试了10几遍都没有见到翻转)。本来看着架构好一些,就想先将8bit 移植到mlc上,结果mlc翻转了,8bit ecc却没有纠正,这是一个很奇怪的问题。因为这个费了一天的时间。最后决定自己实现。几个小时有了进展。

要收工准备明天上班的内容了,把遗留的问题也写一下:
1.对NandFlash的读基本上和BL1上一样,没有做过多的判断,空页,坏块都没有判断。(还好目前的NandFlash在kernel分区还没有坏块 
2.还不能烧写yaffs,我还没有做这方面的分析,也就没有测试,开启软件ecc应该是可以的,这个是知道这一点,没有深入。下周周末有时间再搞。
3.代码还是有点不规范,有点不入流,再整理。
4.应试没有第4了。

当时准备先实现8bitECC结果对比如下:



结果是似乎没有做纠正。  

所以直接实现16bitECC了,不过开始也是这种情况,然后先定位是不是ecc校验码的问题,打印出来是没有问题的,再最后发现有翻转但是没有检测到
 
如图中的1处一直是0,甚至会在上一个512Byte出现的翻转,下一个512Byte才会说有翻转,我开始注意NFECCSTAT_REG了,再读数据手册,看到这个是要手动清理的,
所以添加了2处内容,就可以准确的检测翻转位了。

还有一点,这次调试16bitECC要比以前好一些了,uboot中的很多东西都能用,特别把crc32都用上了,校验的好不好,crc32一下。如果和原文件的crc校验值完全一样说明校验成功。

还要客观评价一下那个8bti的ecc校验都没有按照samsung要求的步骤写,没有读了怎么都不能理解。
[ 此帖被kangear在2013-08-25 20:42重新编辑 ]
级别: 侠客
UID: 58655
精华: 0
发帖: 129
金钱: 645 两
威望: 130 点
贡献值: 0 点
综合积分: 258 分
注册时间: 2011-11-11
最后登录: 2017-09-13
1楼  发表于: 2013-08-25 17:28
看看,,,,
级别: 风云使者
UID: 36096
精华: 3
发帖: 2513
金钱: 14075 两
威望: 2815 点
贡献值: 3 点
综合积分: 5086 分
注册时间: 2011-01-11
最后登录: 2015-11-15
2楼  发表于: 2013-08-26 15:33
大神能给mini210s移植一个吗。。。
极度缺钱,求捐赠……支付宝兼邮箱:huming2207@qq.com
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
3楼  发表于: 2013-08-26 23:10

 回 2楼(huhu2207) 的帖子

搜了一下mini210s的NandFlash,似乎也是2g MLC的。不知胡哥的Nand是什么型号的。如果页大小也是8k,现在的代码应该可以直接用上。我这边关键是没有办法测试。

还有一点:现在友善的板子全部弃用MLC了,不知道这是一个什么征兆。
级别: 侠客
UID: 94357
精华: 0
发帖: 62
金钱: 320 两
威望: 64 点
贡献值: 0 点
综合积分: 124 分
注册时间: 2013-07-15
最后登录: 2017-09-13
4楼  发表于: 2013-08-27 14:16
        
级别: 侠客
UID: 94357
精华: 0
发帖: 62
金钱: 320 两
威望: 64 点
贡献值: 0 点
综合积分: 124 分
注册时间: 2013-07-15
最后登录: 2017-09-13
5楼  发表于: 2013-08-27 14:17
        
级别: 新手上路
UID: 73050
精华: 0
发帖: 47
金钱: 235 两
威望: 47 点
贡献值: 0 点
综合积分: 94 分
注册时间: 2012-07-03
最后登录: 2014-09-05
6楼  发表于: 2013-08-28 15:30
新人循着前辈的研究学习中
级别: 侠客
UID: 8892
精华: 0
发帖: 88
金钱: 440 两
威望: 88 点
贡献值: 0 点
综合积分: 176 分
注册时间: 2009-09-09
最后登录: 2019-04-07
7楼  发表于: 2013-08-28 19:08
首先非常感谢Kangear的代码和帖子。我现在就是用你的U-Boot 代码 用在 SLC flash上的。加上了对I2C, GPIO的操作。USB 一直没有加成功。至于1Bit SLC HW ECC U-Boot 是否已经实现, Kernel 已经用了1Bit HWECC,感觉好像是有了,是否起作用还不清楚。
有如下 问题请教:
1,为什么U-Boot启动好像比SuperBoot 慢?比lkmcu的版本也慢?
2,能否用SD卡上的U-Boot烧 NAND flash 上的U-Boot, Kernel 和 文件系统?SuperBoot 烧的位置固定,无法满足需求。
3,如何看出Minitools烧的SuperBoot, KERNEL 是多少位HW ECC?

多谢
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
8楼  发表于: 2013-08-28 20:27

 回 7楼(fchen2) 的帖子

1.关于快慢的问题,要看你的flash是什么类型的mlc还是slc,如果是slc的,速度应该没有什么差别的u-boot之间。如果用mlc的启动速度和slc的启动速度比,那是没有办法比的,mlc启动是要校验的,而slc不用。还有如果和superboot比,我只能说友善是一个团队,我只是一个代码散人,所以没有人家优化的好。不过在《分析一下tiny210v2的16bitECC校验(http://aiothome.net/read.php?tid-80271.html)》有人提出了U-boot中BL1优化方案,我在下边也试了,可以再优化,这几天再更新。
2.sd卡上当然可以了烧写了。sd和nand的是一个bin文件。只是启动时不一样,后边的都是一样的。
3.怎么看出,这个没有什么绝技 1看宣传 2你可以用uboot从sd卡启动后,用nand dump 400000 看内核在NandFlash中的数据信息结合s5pv210数据手册就可以看出了。210里边slc的用的8bit的,mlc用的16bit的。
级别: 新手上路
UID: 13281
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2010-01-21
最后登录: 2013-12-02
9楼  发表于: 2013-08-28 20:29
谢谢楼主的分享
现在在学习uboot中