本帖最后由 lihaiping1603 于 2013-4-26 10:13 编辑
目前我一直在移植uboot的nand驱动,处理器用的是s5pv210,板子用的tiny210V2,我的nand是K9GAG08U0F,它是一个8K/PAGE,2G大小MLC的NAND ,(8k+512)/PAGE.目前我的uboot能从nand启动了,但存在一个很严重的问题,就是执行nand erase.chip,会报告出很多坏块,因为在在对nand操作的时候,例如nand 擦除,写,读,我全部用的4k/page,因为只有这样我烧进去的uboot它才能启动,因为s5pv210在uboot启动的第一阶段会执行ECC校验,它用的16bit,4K/PAGE,这也是我为什么设置为4K/page的原因。出现坏块很多的原因,我后面也想了一下,可能是因为芯片本身支持的是8k/PAGE,而我用的4K/PAGE,所以才会出现很多坏块。所以后面我将nand的读,写擦除全部换为8K/page,然后我重新烧写以前的uboot,它启动不了,因为可能210执行的ecc校验在BL1阶段,它通不过。所以启动失败。于是我用4K/PAGE的烧写工具,烧写BL1,区间是0~4000,然后我用8K/page的烧写uboot的bl2,烧写区间起始地址为4000,大小为40000,然后还是启动不了,于是我去就看nand中我烧写的数据,是不是对的,读page 0,发现我开始烧写的数据已经发生变化。这是什么原因?按道理我在烧写第二阶段的时候,只是烧写了4000地址以后的区间,0~4000区间的数据是没有变的啊,为什么前面的数据也跟着发生了变化。这里我说一下,我的烧写工具,也是用的uboot,只是这个Uboot是从SD卡启动的而已.
还有一个问题,我分别进行了测试,如果我用支持4K/page,去擦除,然后去写,去读,这其中是不会有数据错误的,然如果用8K、page去擦除,然后4K去操作,就会出错了. |