主题 : 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: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
1楼  发表于: 2013-08-26 23:10

 回 2楼(huhu2207) 的帖子

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

还有一点:现在友善的板子全部弃用MLC了,不知道这是一个什么征兆。
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
2楼  发表于: 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: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
3楼  发表于: 2013-08-29 10:35

  

关于速度。对于mlc的,u-boot确实还有一定的进步空间。
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
4楼  发表于: 2013-09-09 19:40

 回 14楼(nonplus) 的帖子

那么我启动代码放开这个NANDFLASH的ID,用MiniTools烧到MIni210s中就直接能够运行。搞一下,给你一个链接你测试一下。
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
贡献值: 5 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
5楼  发表于: 2013-09-09 21:50

 回 14楼(nonplus) 的帖子

这个是镜像:点我下载
如果成功,说一下,我直接就合并到主线源代码了。不成功的话,串口截图一下,我看看一下。我打开了调试。会有信息输出。还有无论是什么NandFlash,SD卡启动都是支持的。你也可以尝试一下从SD卡启动。