第016课 Nand Flash操作原理及裸机程序分析

您所在的位置:网站首页 自制nand编程器 第016课 Nand Flash操作原理及裸机程序分析

第016课 Nand Flash操作原理及裸机程序分析

2023-11-27 15:42| 来源: 网络整理| 查看: 265

第001节_NAND_FLASH操作原理这里写图片描述这里写图片描述

NAND FLASH原理图 NAND FLASH是一个存储芯片 那么: 这样的操作很合理”读地址A的数据,把数据B写到地址A”

问1. 原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址? 答1.在DATA0~DATA7上既传输数据,又传输地址当ALE为高电平时传输的是地址,

那么在数据线上是不是只传输数据和只传输地址呢?

我们参考NAND FLASH的芯片手册可以知道,对NAND FLASH的操作还需要发出命令,下面有个NAND FLASH的命令表格

这里写图片描述这里写图片描述

问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令怎么传入命令?

答2.在DATA0~DATA7上既传输数据,又传输地址,也传输命令:

当ALE为高电平时传输的是地址。当CLE为高电平时传输的是命令。当ALE和CLE都为低电平时传输的是数据。

问3. 数据线既接到NAND FLASH,也接到NOR FLASH,还接到SDRAM、DM9000等等 那么怎么避免干扰?

答3. 这些设备,要访问之必须”选中”,没有选中的芯片不会工作,相当于没接一样。

问4. 假设烧写NAND FLASH,把命令、地址、数据发给它之后,NAND FLASH肯定不可能瞬间完成烧写的,怎么判断烧写完成?

答4. 通过状态引脚RnB来判断:它为高电平表示就绪,它为低电平表示正忙

问5. 怎么操作NAND FLASH呢?

答5. 根据NAND FLASH的芯片手册,一般的过程是:

发出命令

发出地址

发出数据/读数据

看上面的命令表格,不容易看,我们看一下读ID的时序图,

这里写图片描述这里写图片描述

每个NAND FLASH都内嵌一些ID(譬如:厂家ID,设备ID),时序图从左往右看,纵向放是一列一列的看。

对于我们s3c2440来说,内部集成了一个NAND FLASH控制器,2440和外设连接的简易图,如下图所示

这里写图片描述这里写图片描述

NAND FLASH控制器,帮我们简化了对NAND FLASH的操作,下面来分析一下不使用NAND FLASH控制器和使用NAND FLASH控制器对外设NAND FLASH的操作。

发命令:

NAND FLASH

S3C2440

选中芯片

NFCMMD=命令值

CLE设为高电平

在DATA0~DATA7上输出命令值

发出一个写脉冲

发地址:

NAND FLASH

S3C2440

选中芯片

NFADDR=地址值

ALE设为高电平

在DATA0~DATA7上输出地址值

发出一个写脉冲

发数据:

NAND FLASH

S3C2440

选中芯片

NFDATA=数据值

ALE,CLE设为低电平

在DATA0~DATA7上输出数据值

发出一个写脉冲

读数据 :

NAND FLASH

S3C2440

选中芯片

val=NFDATA

发出读脉冲

读DATA0~DATA7的数据

用UBOOT来体验NAND FLASH的操作:

读ID

S3C2440

u-boot

选中

NFCONT的bit1设为0

发出命令0x90

NFCMMD=0x90

发出地址0x00

NFADDR=0x00

读数据得到0xEC

val=NFDATA

读数据得到device code

val=NFDATA

退出读ID的状态

NFCMMD=0xff

下图是读操作时序图

这里写图片描述这里写图片描述

对于存储为256M的NAND FLASH,需要28条地址线,来表示这个地址值,根据原理图可以,只用8根地址线,所以需要4个周期的地址,为了兼容更大容量的NAND FLASH,要发出5个周期的地址。

2,读数据

S3C2440

u-boot

选中

NFCONT的bit1设为0

发出命令0x00

NFCMMD=0x00

发出地址0x00

NFADDR=0x00

发出地址0x00

NFADDR=0x00

发出地址0x00

NFADDR=0x00

发出地址0x00

NFADDR=0x00

发出地址0x00

NFADDR=0x00

发出命令0x30

NFCMMD=0x30

读数据得到0x17

val=NFDATA

读数据得到0x00

val=NFDATA

读数据得到0x00

val=NFDATA

读数据得到0xea

val=NFDATA

退出读状态

NFCMMD=0xff

第002节_NandFlash时序及初始化

存储芯片的编程

NAND FLASH存储芯片编程

初始化

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

识别

读取ID

读操作

一次读一个页(page)

写操作

一次写一个页(page)

擦除

一次擦除一个块(block)

NAND FLASH控制器的时序,是为了让NAND FLASH外设工作起来,假如外接不同的 NAND FLASH外设,那么它的操作时序可能就会不同,所以NAND FLASH控制器发出 的时序图,就是不一样的,所以我们根据NAND FLASH外设来设置NAND FLASH控制器,

这里写图片描述这里写图片描述

NAND FLASH时序图,如下所示:

这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述

我们在汇编语言中已经设置HCLK为100MHZ,一个周期T = 1000/100 = 10s,通过上面三个图可以知道:TACLS的值可以为0;TWRPH0的值可以为1;TWRPH1的值可以为0。

这里写图片描述这里写图片描述

所以NFCONF寄存器设置如下:

#define TACLS 0 #define TWRPH0 1 #define TWRPH1 0 /*设置NAND FLASH的时序*/ NFCONF = (TACLS


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3