Nandflash的寄存器配置

   Nandflash的寄存器设置

    NFCONF 

Nandflash的寄存器配置_第1张图片

   配置寄存器主要是设置命令的锁存周期,根据下面2440的nand的时序,当WE在使能之前,CLE要先使能,等CLE稳定之后WE才能使能,然后等待一段时间才去拉低CLE .这里就有两个稳定的时间,分别是WE命令使能之前与之后,也就是建立时间与保持时间,就跟他们时间名的后缀一样,S->ser, H->hold

 

Nandflash的寄存器配置_第2张图片

 

至于TACLS等的时间周期大小可以参照K9F2G08U0C(NAND FLASH).pdf芯片手册中时序

 

Nandflash的寄存器配置_第3张图片

 

对比上面两个图我们可以得出结论

1.从CLE拉高到WE使能的这段时间,意思就是说CLE要使能一段时间,稳定后在WE使能

“TACLS”= tCLS - Twp

2.WE写周期时间:

“TWRPH0” = twp

3.CLE保持时间(WE无效后, CLE需要保持一段时间,使其能好好的锁存,即延长硬件的锁存动作(就是存储一段时间),如果WE上升沿后马上拉高CLE(锁存使能无效), 很可能数据就不能及时存入nandflash,造成存储丢失, 我们还可以看到命令在I/O总线上也要随着CLE停留而停留一段时间(tDH)

“TWRPH1” = tCLH

找到关系后, 通过nandflash数据手册可以找到这些时间的最小定义(即完成动作的最小时间,比如 tCLS的最小时间)

Nandflash的寄存器配置_第4张图片

     根据之前的计算,我们要满足TACLS >= 0ns,TWRPHO >= 12ns,TWROH1 >= 5ns,根据寄存器的配置信息,HCLK = 100M = 10ns,  TACLS -> Duration = HCLK × TACLS,   TWRPH0 -> Duration = HCLK × ( TWRPH0 + 1 ),  TWRPH1->Duration = HCLK × (  TWRPH1 + 1 ),    所以三个配置参数为 0,1,0 就能够满足

    配置寄存器最终取值:TACLS=0,TWRPH0=1,TWRPH1 = 0

 

    NFCONT

Nandflash的寄存器配置_第5张图片

    InitECC [4] :  初始化ECC检验

    Reg_nCE [1]:用来控制片选 (一般在读写一次的周期,都要进行片选信号的选定,取消选定的操作,目的是为了省电),初始化默认关闭,读取的                               时候开启

    MODE [0]: 用来控制flash是否能工作

    控制寄存器默认取值:MODE=1,Reg_nCE=1,InitECC=1

 

     NFCMMD

   Nandflash的寄存器配置_第6张图片

    当要发送读取或者写命令时,直接往NFCMMD寄存器低八位(单字节)里写入命令值,其他位保留

     

    NFADDR

  Nandflash的寄存器配置_第7张图片

     跟NFCMMD寄存器一样,往低八位写入地址值就可以了

 

 

       NFDATA

 Nandflash的寄存器配置_第8张图片

 

        NFDATA字节的存储方式主要参考下表,以大端模式来讲解, 当传送一个字时,这时候存4个字节的数据,    0x12345678(大端, 内存低字节存高位) ,2440的nandflash是8位的, 所以先发送 

        0x78(1st  [31:24]) –> 0x56(2nd  [23:16])  –>  0x34(3nd  [15:8])  –>   0x12(4th  [7:0])。

    Nandflash的寄存器配置_第9张图片

 

     NFCON

Nandflash的寄存器配置_第10张图片

    RnB [0] : 读取该位,判断nandflash判断是否处于空闲状态

   上面就是所有的寄存器的设置, 当读取nandflash的页数据时,要参照nandflash的读顺序,下面就是读页的流程: 发送读命令00后,连续发5个地址,再发读命令30,然后判断是否空闲,最后读取数据

    Nandflash的寄存器配置_第11张图片

 

 

你可能感兴趣的:(uboot)