打印

关于nand flash驱动问题

[复制链接]
4804|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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去操作,就会出错了.

烧写是原始数据.jpg (311.64 KB )

这是我要烧写的原始数据

这是我要烧写的原始数据

烧写以后数据发生变化.jpg (142.5 KB )

这图是我烧写以后读出来的数据

这图是我烧写以后读出来的数据

相关帖子

沙发
jlass| | 2013-4-27 09:44 | 只看该作者
目前的uboot应该还不支持这种大块的nand,楼主基本还是要靠自己重新写。

ecc能不用就先不要用,会引入更多的麻烦,等到基本调通之后再加进去
4k/page还是8k/page以datasheet为准,不要去迁就uboot的原来的代码,执行nand erase.chip,会报告出很多坏块,很可能是你使用4k/page写造成的,看看坏块是否是连续的几段应该就能判断了,并尽快用nand scrub.chip擦掉吧

使用特权

评论回复
板凳
lihaiping1603|  楼主 | 2013-4-27 17:34 | 只看该作者
jlass 发表于 2013-4-27 09:44
目前的uboot应该还不支持这种大块的nand,楼主基本还是要靠自己重新写。

ecc能不用就先不要用,会引入更多 ...

恩,后面的很多坏块是连续的.
按照处理器芯片手册来的话,我的uboot它第一阶段是需要按照4K来的,因为它会进行校验,如果设置为8K+512,那就通不过校验,整个uboot就会失败。所以想问下,怎么解决这个问题。同时谢谢你的回答,呵呵:)

使用特权

评论回复
地板
jlass| | 2013-4-27 17:39 | 只看该作者
lihaiping1603 发表于 2013-4-27 17:34
恩,后面的很多坏块是连续的.
按照处理器芯片手册来的话,我的uboot它第一阶段是需要按照4K来的,因为它 ...

这个真没做过,帮不到你了

不做校验不行么

使用特权

评论回复
5
lihaiping1603|  楼主 | 2013-4-27 18:55 | 只看该作者
jlass 发表于 2013-4-27 17:39
这个真没做过,帮不到你了

不做校验不行么

呵呵。。。这是数据手册上面的。
iROM(BL0) boot-up sequence (Refer 2.3 V210 boot-up diagram)
1.  Disable the Watch-Dog Timer
2.  Initialize the instruction cache
3.  Initialize the stack region (see “memory map” on chap 2.5)
4.  Initialize the heap region. (see “memory map” on chap 2.5)
5.  Initialize the Block Device Copy Functi on. (see “Device Copy Function” on chap 2.7)
6.  Initialize the PLL and Set system clock. (see “clock configuration” on chap 2.11)
7.  Copy the BL1 to the internal SRAM region (see “Device Copy Function” on chap 2.7)
8.  Verify the checksum of BL1.
If checksum fails, iROM will try the  second boot up. (SD/MMC channel 2)
9.  Check if it is secure-boot mode or not.
If the security key value is written in S5PV210, It’s secure-boot mode.
If it is secure-boot mode, verify the integrity of BL1.
10.  Jump to the start address of BL1


我想问一下,关于struct nand_ecclayout s3c_nand_oob_mlc_xxx,这种一般是从哪里来的?芯片数据手册上貌似没写哦。。我这个都是自己定义的,现在8K+512,我变成了4K+512.这种会不会导致地址对不上?

使用特权

评论回复
6
jlass| | 2013-4-28 08:31 | 只看该作者
本帖最后由 jlass 于 2013-4-28 08:33 编辑

oob就是nand每一块的开头部分,做ecc校检用的,datasheet里确实可能没有,应该在其他的介绍资料里面。
另外:2G以上的nand都是MLC结构的,1G以下的都是SLC结构的,不知道这个对你有没有影响,只是提醒你一下。
还有,我说的关掉校检指的是关掉nand的ECC校检,和iROM里面的checksum应该是两回事

使用特权

评论回复
7
lihaiping1603|  楼主 | 2013-4-28 14:22 | 只看该作者
jlass 发表于 2013-4-28 08:31
oob就是nand每一块的开头部分,做ecc校检用的,datasheet里确实可能没有,应该在其他的介绍资料里面。
另外 ...

恩,很谢谢你的回答。不知道6410对K8GAG08u0e的支持方法可以在这里应用不?但又没的确切的官方资料,有点没的把握对它的支持.

使用特权

评论回复
8
jlass| | 2013-4-28 16:28 | 只看该作者
lihaiping1603 发表于 2013-4-28 14:22
恩,很谢谢你的回答。不知道6410对K8GAG08u0e的支持方法可以在这里应用不?但又没的确切的官方资料,有点 ...

6410对K8GAG08u0e支持么,如果支持的话肯定可以参考,这样就容易多了

使用特权

评论回复
9
lihaiping1603|  楼主 | 2013-4-28 16:35 | 只看该作者
jlass 发表于 2013-4-28 16:28
6410对K8GAG08u0e支持么,如果支持的话肯定可以参考,这样就容易多了

恩,但网上的资料也很少,基本没看见源码流出来。。。

使用特权

评论回复
10
jlass| | 2013-4-28 16:43 | 只看该作者
lihaiping1603 发表于 2013-4-28 16:35
恩,但网上的资料也很少,基本没看见源码流出来。。。

那你还说支持。
如果只是硬件支持的话,很多新出的芯片都支持的

使用特权

评论回复
11
lihaiping1603|  楼主 | 2013-4-28 16:54 | 只看该作者
jlass 发表于 2013-4-28 16:43
那你还说支持。
如果只是硬件支持的话,很多新出的芯片都支持的

呵呵,看见有人在弄,而且我的板子也这样的,不过我自己感觉到怀疑,这种设计的兼容性,貌似很不好!!
对了,s5p_nand_oob_mlc_512,这个有没有定义?我这个是猜的,我想找一下官方的定义是怎么样的。。看一下。。。

使用特权

评论回复
12
jlass| | 2013-4-28 17:12 | 只看该作者
lihaiping1603 发表于 2013-4-28 16:54
呵呵,看见有人在弄,而且我的板子也这样的,不过我自己感觉到怀疑,这种设计的兼容性,貌似很不好!!
...

我本来也打算用4G的nand做的,可是考虑到改动太大而放弃了,真是越老越胆小了,呵呵。
你可以去找一起在做的人聊聊,应该有所帮助。
我记得官方是不支持的。(半年前肯定不支持,现在支不支持就不知道了)

使用特权

评论回复
13
lihaiping1603|  楼主 | 2013-5-2 08:39 | 只看该作者
jlass 发表于 2013-4-28 17:12
我本来也打算用4G的nand做的,可是考虑到改动太大而放弃了,真是越老越胆小了,呵呵。
你可以去找一起在 ...

哦,呵呵,好的,我先找一下。呵呵。。。在家玩了几天。。

使用特权

评论回复
14
lihaiping1603|  楼主 | 2013-5-7 11:05 | 只看该作者
jlass 发表于 2013-4-28 17:12
我本来也打算用4G的nand做的,可是考虑到改动太大而放弃了,真是越老越胆小了,呵呵。
你可以去找一起在 ...

呵呵,目前已经解决了210的nand问题,谢谢你的支持,呵呵。。。
不过烧写yaffs以后,烧写过的区域擦除为什么会出现假象坏块的问题?难道是MLC的位反正现象?

使用特权

评论回复
15
jlass| | 2013-5-7 11:18 | 只看该作者
看看会不会是这个问题
https://bbs.21ic.com/icview-396489-1-1.html

使用特权

评论回复
16
lihaiping1603|  楼主 | 2013-5-7 13:43 | 只看该作者
jlass 发表于 2013-5-7 11:18
看看会不会是这个问题
https://bbs.21ic.com/icview-396489-1-1.html

貌似有点不一样,你的这种问题,我目前还没到那种深度。昨天我开始移植YAFFS2的,在Uboot中,移植以后,我就用UBOOT来烧YAFFS文件系统,烧了一个根文件系统进去,烧写的起始位置为0x900000,然后可以烧写成功,但我出现的问题现在是凡是我烧写过YAFFS的区域,今天用nand erase.chip来擦除,居然提示哪些区域是坏块。这我就不懂这是为啥了。

使用特权

评论回复
17
jlass| | 2013-5-7 15:48 | 只看该作者
lihaiping1603 发表于 2013-5-7 13:43
貌似有点不一样,你的这种问题,我目前还没到那种深度。昨天我开始移植YAFFS2的,在Uboot中,移植以后, ...

一般来说以ECC的问题比较多见。
当然,因为你使用的是大容量的nand,也有可能是erase代码的结构问题,你可以对比读写的代码去看看

使用特权

评论回复
18
lihaiping1603|  楼主 | 2013-5-13 15:00 | 只看该作者

file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\605012726\QQ\WinTemp\RichOle\FSQMW_F~M@Y}Q]NBM`K(}(I.jpg
烧完yaffs以后,为什么烧写过的地方擦除的时候会是坏区?

变成了坏块??
其中擦除的地方时候,出现连续的坏块,就是烧写以后出现的。

FSQMW_F~M@Y}Q]NBM`K(}(I.jpg (108.41 KB )

这个是在烧写以后出现的坏块

这个是在烧写以后出现的坏块

使用特权

评论回复
19
lihaiping1603|  楼主 | 2013-5-13 15:28 | 只看该作者
jlass 发表于 2013-5-7 15:48
一般来说以ECC的问题比较多见。
当然,因为你使用的是大容量的nand,也有可能是erase代码的结构问题,你 ...

恩,刚刚我想起来了,可能跟你上面的https://bbs.21ic.com/icview-396489-1-1.html这个问题,有点相似。。。因为当时我的哪个文件系统,不是我自己做的,是网上的,但是它的实际大小,没有符合我的nand要求,然后我是人工计算以后,修改了当时烧写的大小(也就是说,当时文件系统并没有我烧写的那么大,我认为加大了烧写大小才烧进去的。)。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

1

粉丝