您的位置:首页 > 其它

移植3- uboot之nandflash驱动移植

2014-08-18 23:23 176 查看
2014.8.18 在上一篇文章中,我们已经将uboot启动起来了,但是如何将uboot+spl搞到nandflash中去,这样可以拨动拨码开关选择nandflash启动,就可以从nandflash启动了呢?因此需要在uboot中实现nandflash driver,并将nandflash可用的spl+uboot拷贝到nandflash中去

2014.8.19 通过查看硬件电路图可知,我的ok210用的nand flash芯片为MT29F8G08ABABA, 大小为8Gbit, PAGE=4kByte+224Byte, 1Block=128pages, 1Plane=1024 blocks,共两个planes. command set :ONFI NAND Flash Protocol

NandFlash按照接口分为ONFI , toggle两种 , 两种接口都支持同步和异步的方式。这个flash 是onfi,只支持异步操作

NandFlash比较混乱,无法统一操作,NAND的工艺一直在更新,需要NAND controller也要配套更新,于是提出了eMMC标准,就是将flash controller and flash 封装在一起,使用SDIO指令来访问,于是以后nandflash驱动就不需要了,只要sdio驱动,简单,好用!

2014.8.23-8.24参考http://blog.csdn.net/xiaojiaohuazi/article/details/8289007来移植,但是最后发现2410与s5pv210的nandflash controller差别很大,作者做的有问题

于是重新参考ok210板子自带的uboot1.3.4中/cpu/s5pc1xx/nand.c 来移植,但是发现无法识别flash芯片,READ ID命令工作不正常!

我猜测由于与nandflash相连的端口是复用的,因此需要先把这些端口配置为nandflash可用的端口,然后在进行nandflash操作!

2014.8.25 查看datasheet section5中4.4 i/o description, 这里用到的端口全部是复用的,因此需要设置MP0相关寄存器。还有NFCONF和NFCONT做一些设置,特别注意片选信号,可以查看底板图来确定(CS0)。现在/drivers/mtd/nand/nand_base.c中nand_read_byte可以打印出onfi 信息了,READID打印的信息与flash datasheet中显示一样,但是还是报错!

2014.8.26 在drivers/mtd/nand/nand_ids.c要配置我们的nand flash, 我们的flash id 为0x38. 这样uboot就识别flash了,下面测试flash read/write, 经测试 ,工作ok

2014.8.31 实现了8bit hardware ecc, 但是好像什么地方有问题,报0x180000之前均为坏块!测试0x200000之后的块可以正常的读写,不知为啥?难道真的将nand flash搞坏了?

2014.9.14 将hardware ecc去掉后,读写nandflash,0x200000之前的确实坏掉了

2014.9.14 居然不是8bit ecc,是1bit ecc,继续捣鼓.......

2014.9.21经测试发现,write与erase时,有时会把快搞坏的情况,重启板子也不好用!我应该是哪里配置的有问题,特别是timing mode! 继续debug

2014.9.22 TACLS之类的设置为7,7,7呀,应该时序没有问题!但是为什么每次写还是错误呢?ECC中会对ecc本身和标识坏块的字节进行ecc校验吗?

2014.10.1 原来是samsung uboot中的flash驱动代码中8 bit hardware ecc 读写有问题,OOB写的不对,改正后就可以工作了,终于赶在十一将这个驱动调出来了

调完了,等我将代码整理一下,再上传
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: