主题 : 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: 97783
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2013-11-05
最后登录: 2013-11-06
1楼  发表于: 2013-11-05 15:09
看看 学习了 !