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

1.硬件知识

在这里插入图片描述

1.1 如何传输地址信号?

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

1.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

在这里插入图片描述

2.1 读ID

在这里插入图片描述

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

在这里插入图片描述

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

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

  • 读数据得到ECH:val=NFDATA

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

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

2.2 读内容

在这里插入图片描述
在这里插入图片描述

  • 选中芯片: 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命令锁存周期图(时间参数由“时间特性表”可以得到)

在这里插入图片描述

NAND FLASH时间特性表

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
分别得到寄存器的值(如上图)


得到几条关键的信息:

  • 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位形式,因此需要重新设置一下读写的字节数:

在这里插入图片描述

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

在这里插入图片描述

  • 1.NAND控制器使能
  • 2.先禁止片选,避免误操作
  • 3.初始化ECC编码器
	/* 使能NAND FLASH控制器、禁止片选、初始化ECC */
	NFCONT = (1<<4) | (1<<1) | (1<<0);
发布了42 篇原创文章 · 获赞 176 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_39492932/article/details/104163291