1.NAND FALSH 介绍

我看来,NAND FLASH 在嵌入式系统中与pc上的硬盘的功能类似,用于保存系统运行过程中的各种数据。且可以在断电后继续保存。
例如:在s3c2440中将一个点灯程序烧写到NAND FLASH 中,下一次利用NAND FLASH启动,程序任然可以正常运行。

2.NAND FLASH硬件连接

ARM 裸机开发学习笔记(4)NAND FLASH 控制器
ARM 裸机开发学习笔记(4)NAND FLASH 控制器

由上图可发现:

  1. NAND FLASH只有LDATA0-LDATA7 这7条数据线,因此 命令、地
    址、数据
    都通过8个I/O口输入/输出,这种形式减少了芯片的引脚个数,并使得系统很容易升级到更大的容量。写入命令、地址或数据时,都需要将WE#、CE#信号同时拉低。在WE#信号的上升沿被NAND Flash锁存;命令锁存信号CLE、地址锁存信号ALE用来分辨、锁存命令或地址。
  2. K9F1208U0M的64MB存储空间需要26位地址,因此以字节为单位方问Flash时需要4个地址序列:列地址、行地址的低位部分、行地址的高位部分。读/写页在父出命令后,需要4个地址序列,而擦除块在发出擦除命令后仅需要3个地址序列。

在使用NAND FLASH时,并不需要分别控制引脚,而是通过控制寄存器来实现上述功能

3. NAND FLASH 访问方法

NAND Flash 与S3C2440的连线比较少: 8个I/O引脚(IO0~IO7)、 5个使能信号(nWE、 ALE、CLE、nCE、nRE)、1个状态引脚(RDY/B)、 1个写保护引脚(nWP)。地址、数据和命令都是在这些使能信号的配合下,通过8个I/O引脚传输。写地址、数据、命令时,nCE、nWE信号必须为低电平,它们在nWE信号的上升沿被锁存。命令锁存使能信号CLE和地址锁存信号ALE用来区分I/O引脚上传输的是命令还是地址。

时序图如下所示:
ARM 裸机开发学习笔记(4)NAND FLASH 控制器
上图为s3c2440发出命令时的时序图

  • ce变为低电平,使能NAND FLASH。
  • CLE保持高电平,ALE变为低电平,通知即将传输的是命令。
  • 通过I/O引脚传输命令。
  • WE由定电平变为高电平时锁存。

传输地址与数据时操作与上述类似。对于时序大小的确定:

  1. 看2440芯片手册,确定能配置哪几个参数
  2. 在看外设手册,确定取值
  3. 计算

4. 相应的寄存器

查找芯片手册,确定使用的寄存器功能与设置方法。

  • 1 .NFCONF:2440的NFCONF寄存器是用来设置NAND Flash的时序参数TACLS、TWRPH0、TWRPH1。配置寄存器的[3:0]是只读位,用来指示外部所接的Nand Flash的配置信息,它们是由配置引脚NCON,GPG13,GPG14和GPG15所决定的(比如说K9F2G08U0A的配置为NCON、GPG13和GPG14接高电平,GPG15接低电平,所以[3:0]位状态应该是1110)。

  • 2.NFCONT:用来使能/禁止NAND Flash控制器、使能/禁止控制引脚信号nFCE、初始化ECC。它还有其他功能,在一般的应用中用不到,比如锁定NAND Flash。

  • 3.NFCMMD:对于不同型号的Flash,操作命令一般不一样。参考前面介绍的K9F2G08U0A命令序列。

  • 4.NFADDR:当写这个寄存器时,它将对Flash发出地址信号。只用到低8位来传输,所以需要分次来写入一个完整的32位地址。

  • 5.NFDATA:只用到低8位,读、写此寄存器将启动对NAND Flash的读数据、写数据操作。

  • 6.NFSTAT:只用到位0,用来检测NAND是否准备好。0:busy,1:ready。

5. 读NAND FLASH

  1. 如果程序小于4k,s3c2440从NAND FLASH启动后会自动将4k的内容复制到片内的“Steppingstone”的内部SRAM缓存。
  2. 如果程序大于4k,这时需要用到NAND FLASH ,将程序分为两部分,第一部分进行存储控制器的初始化,将后半部分的内容复制到SDRAM中,使其在外设SDRAM中执行。第二部分为实现程序设定的主体功能。
  1. 设置NFCONF与NFCONT
    对于S3C2440。时间参数设为: TACLS=0, TWRPH0=3,TWRPH1=0。NFCONF 寄存器的值如下

NFCONF为0x300.

NFCONT寄存器的取值如下,表示使能NAND Flash控制器、禁止控制引脚信号nFCE、初始化ECC。

NFCONT = (1<<4) 1(1<<1)1(1<<0)

  1. 在操作NAND FLASH前,进行复位

NFCONT &= ~(1<<1) (发出片选信号)
NFCMD =0xff (reset命令)

然后循环查询NFSTAT位0,直到它等于1。
最后禁止片选信号,在实际使用NAND Flash时再使能。

NFCONTI- 0x2 (# it NAND Flash)

  1. 发出读命令

NFCONT&=~(1<<11) 发出片选信号
NFCMD=0 读命令

  1. 发出地址信号
      NFADDR = (addr>>9) & 0xff;
      NFADDR = (addr>>17) & 0xff;
      NFADDR = (addr>>25) & 0xff;
       NFADDR = addr & 0xff;

其中, 在数据手册中列出了地址操作。没有用到A8是因为当读命令为0时,A8=0;当读命令为1时,A8=1;

相关文章: