《驱动学习 - Nand Flash驱动(分析MTD层并制作NAND驱动)》

1.本节使用的nand flash型号为K9F2G08U0M,它的命令如下

  

1.1我们以上图的read id(读ID)为例,它的时序图如下:

首先需要使能CE片选

1)使能CLE

2)发送0X90命令,并发出WE写脉冲(就是低电平变成高电平)

3)复位CLE,然后使能ALE

4)发送0X00地址,并发出WE写脉冲(就是低电平变成高电平)

5)设CLE和ALE为低电平

6)while判断nRE(读使能)是否为低电平

7)读出8个I/O的数据,并发出RE上升沿脉冲

(我们的nand flash为8个I/O口,所以型号为K9F2G08U0M)

1.2 nand flash 控制器介绍

  在2440中有个nand flash 控制器,它会自动控制CLE,ALE那些控制引脚,我们只需要配置控制器,就可以直接写命令,写地址,读写数据到它的寄存器中便能完成(读写数据之前需要判断RnB脚),如下图所示:

若在nand flash 控制器下,我们读ID就只需要如下几步(非常方便):

1)将寄存器NFCONT(0x4E000004)的bit1=0,来使能片选

2)写入寄存器NFCMMD(0x4E000008)=0X90,发送命令

3)写入寄存器NFADDR(0x4E00000C)=0X00,发送地址

4)while判断nRE(读使能)是否为低电平

5)读取寄存器NFDATA(0x4E000010),来读取数据

1.3 我们在uboot中测试,通过md和mw命令来实现读id(x要小写)

如下图所示,最终读取出0XEC  0XDA  0X10  0X95

 刚好对应了我们nand flash手册里的数据(其中0XEC表示厂家ID, 0XDA表示设备ID):

若我们要退出读ID命令时,只需要reset就行,同样地,要退出读数据/写数据时,也是reset。

1.4 reset的命令为0xff,它的时序图如下所示:

 

 1.5 同样地,我们再参考读地址时序图来看看:

其中column Address对应列地址,表示某页里的2k地址

row Address对应行地址,表示具体的哪一页

5个地址的周期的图,如下所示:

因为我们的nand flash=256MB=(2k*128M)b

所以row Address=128M=2^17(A27~A11)

所以column Address=2k=2^11( A10~A0)

猜你喜欢

转载自www.cnblogs.com/zhuangquan/p/11698986.html
今日推荐