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)