【ARM裸板】Nand Flash基础与时序分析

文章目录

    • 1.硬件知识
      • 1.1 如何传输地址信号?
      • 1.2 如何传输命令?
      • 1.3.NAND、NOR、SDRAM、DM900数据总线,如何互不干扰?
      • 1.4 给NAND烧写,如何判断烧写完成?
    • 2.如何操作NAND
      • 2.1 读ID
      • 2.2 读内容
  • 3.NAND初始化
    • 3.1 时序
    • 3.2 注意NAND是8位的
    • 3.3 NAND控制器使能、初始化ECC

1.硬件知识

【ARM裸板】Nand Flash基础与时序分析_第1张图片

1.1 如何传输地址信号?

  • DATA0 ~ DATA7上既传输数据,又传输地址(复用)
    • ALE (Address Lock Enable)地址锁存允许信号
    • 当ALE = 1时,传输地址
    • 当ALE = 0时,传输数据

1.2 如何传输命令?

命令表

【ARM裸板】Nand Flash基础与时序分析_第2张图片

由NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令

  • DATA0 ~ DATA7上既传输数据,又传输地址,也传输命令
    • CLE (Command Lock Enable)地址锁存允许信号
    • 当ALE = 1时,传输地址
    • 当CLE = 1时,传输命令
    • 当ALE = 0 & CLE = 0时,传输数据

1.3.NAND、NOR、SDRAM、DM900数据总线,如何互不干扰?

  • 这些设备,访问之前必须通过片选CS引脚“选中”,没有选中芯片不会工作

1.4 给NAND烧写,如何判断烧写完成?

  • 通过状态引脚RnB来判断:
    • 当高电平表示就绪(空闲)
    • 当低电平表示正忙

2.如何操作NAND

发送命令
发送地址
发出数据/读数据

NAND FLASH需要复杂的流程才能进行操作,由于S3C2440中有NAND FLASH控制器,只需要向相应的寄存器写入或读出数据即可,如下表

操作 NAND FLASH S3C2440
发命令 CS选中芯片
CLE设置为高电平
DATA0~DATA7上输出命令值
发出一个写脉冲
NFCMMD=命令值
发地址 CS选中芯片
ALE设置为高电平
DATA0~DATA7上输出命令值
发出一个写脉冲
NFADDR=地址值
发数据 CS选中芯片
CLE、ALE设置为低电平
DATA0~DATA7上输出命令值
发出一个写脉冲
NFDATA=数据值
读数据 CS选中芯片
发出读脉冲
DATA0~DATA7的数据
val=NFDATA

【ARM裸板】Nand Flash基础与时序分析_第3张图片

2.1 读ID

在这里插入图片描述

  • 选中:NFCONT寄存器bit1设为0

在这里插入图片描述

  • 发出命令90H:NFCMMD=0x90

  • 发出地址00H:NFADDR=0x00

  • 读数据得到ECH:val=NFDATA

  • 读数据得到Device Code:val=NFDATA

  • 退出读ID的状态(复位):NFCMMD=0xFF

2.2 读内容

【ARM裸板】Nand Flash基础与时序分析_第4张图片
在这里插入图片描述

  • 选中芯片: NFCONT寄存器bit1设为0

  • 发出命令90H:NFCMMD=0x00

  • 发出5个字节的地址位

for(i = 0;i<5;i++)
{
    NFADDR = 0x00;
}
  • 发出命令17H:NFCMMD=0x17

  • 读数据:val=NFDATA

  • 退出读状态(复位):NFCMMD=0xFF

3.NAND初始化

初始化主控芯片NAND FLASH控制器

3.1 时序

不同NAND芯片,操作时序不同

NAND FLASH命令锁存周期图(时间参数由“时间特性表”可以得到)

【ARM裸板】Nand Flash基础与时序分析_第5张图片

NAND FLASH时间特性表

【ARM裸板】Nand Flash基础与时序分析_第6张图片

由上两图分析可得,S3C2440 NAND FLASH控制器时序时间
TACLS最小等于0ns;TWRPH0最小等于12ns;TWRPH1最小等于5ns

【ARM裸板】Nand Flash基础与时序分析_第7张图片

再由上图得到的结论:TACLS最小等于0ns;TWRPH0最小等于12ns;TWRPH1最小等于5ns

【ARM裸板】Nand Flash基础与时序分析_第8张图片
分别得到寄存器的值(如上图)


得到几条关键的信息:

  • 1.CLE、ALE、WE信号可以同时发出
  • 2.WE信号的持续时间(tWP)最小为12ns
  • 3.WE信号释放后,ALE和CLE信号释放的最小时间为5ns
#define TACLS   0
#define TWRPH0  1
#define TWRPH1  0 //为了方便理解,时间定义为宏

	/* 设置nand 时序 */
	NFCONF = (TACLS<<12) | (TWRPH0<<8) | (TWRPH1<<4);

3.2 注意NAND是8位的

注意:因为这里的Nand Falsh的位宽是8位的,因此地址,命令、数据、状态 的读写只能以8位形式,因此需要重新设置一下读写的字节数:

【ARM裸板】Nand Flash基础与时序分析_第9张图片

3.3 NAND控制器使能、初始化ECC

【ARM裸板】Nand Flash基础与时序分析_第10张图片

  • 1.NAND控制器使能
  • 2.先禁止片选,避免误操作
  • 3.初始化ECC编码器
	/* 使能NAND FLASH控制器、禁止片选、初始化ECC */
	NFCONT = (1<<4) | (1<<1) | (1<<0);

你可能感兴趣的:(【ARM裸板】,nand)