电子说
一、Flash介绍
常用的flash类型有NOR Flash 和Nand Flash 两种;
(1)Nor Flash
1、Nor Flash的接口和RAM完全相同,可以随机访问任意地址的数据,在其上进行读操作的效率非常高,但是擦除和写操作的效率很低,另外,Nor Flash的容量一般比较小,通常,Nor Flash用于存储程序;
2、Nor Flash的块大小范围为64KB—128KB;
3、擦写一个Nor Flash块需要4s,
4、市场上Nor Flash 的容量通常为1MB—4MB
(2)Nand Flash
1、Nand Flash的接口仅仅包含几个I/O引脚,需要串行地访问,Nand Flash进行擦除和写操作的效率很高,容量较大,
通常Nand Flash用于存储数据;
2、Nand Flash的块大小范围为8KB—64KB;
3、擦写一个Nand Flash块需要2ms;
4、Nand Flash 一般以512字节为单位进行读写
5、 市场上 Nand Flash 的容量一般为 8M—512M
二、Nand Flash的物理结构
以三星公司生产的 K9F1208U0M 为例:
1、容量:64MB,
一共4个层;
每层1024个块(block);
1块包含32页
1页包含 512 + 16 = 528个字节
2、外部接口:8个I/O口,5个使能信号(ALE、CLE、nWE、nRE、nCE),1个状态引脚(RDY/B),1个写保护引脚(nWE);
3、命令、地址、数据都通过8个I/O口输入输出;
4、写入命令、地址、数据时,都需要将nWE、nCE信号同时拉低;数据在WE上升沿被锁存;
5、CLE、ALE用来区分I/O引脚上传输的是数据还是地址;
6、64MB的空间需要26位地址,因此以字节为单位访问Flash时需要4个地址序列;
7、读/写页在发出命令后,需要4个地址序列,而擦除块在发出擦除命令后仅需要3个地址序列;
三、Nand Flash访问方法
操作Nand Flash时,先传输命令,然后传输地址,最后读、写数据,期间要检查flash的状态;
K9F1208U0M 一页大小为528字节,而列地址A0——A7可以寻址的范围是256字节,所以将一页分为A、B、C三个区:
A区:0—255字节
B区:256—511字节
C区:512—527字节
(1)复位
命令:FFh
步骤:发出命令即可复位Nand Flash芯片;
(2)读操作
命令:
00h——读A区
01h——读B区
50h——读C区
操作步骤:
1、发出命令 00h、01h 或50h, 00h将地址位A8设为0, 01h将A8设为1 ;
2、依次发出4个地址序列;
3、检测R/nB,待其为高电平时,就可以读取数据了;
(3)flash编程
命令:
80h——10h :写单页;
80h——11h :对多个层进行些页操作;
操作步骤:
1、写单页步骤:
【1】发出80h命令后;
【2】发送4个地址序列;
【3】向flash发送数据;
【4】发出命令10h启动写操作,flash内部自动完成写、校验操作;
【5】通过命令70h读取状态位,查询写操作是否完成;
2、多页写
【1】发出80h、4个地址序列、最多528字节的数据;
【2】发出11h命令;
【3】接着在相邻层执行【1】、【2】两步操作;
【4】第四页的最后使用10h代替11h,启动flash内部的写操作;
【5】可以通过71h查询写操作是否完成;
(4)复制
命令:
00h——8Ah——10h :单层页内复制
03h——8Ah——11h :多层页内复制
操作步骤:
1、单层页内复制步骤:
【1】发出命令00h;
【2】4个源地址序列;
【2】接着发出8Ah;
【4】发出4个目的地址序列;
【5】发出10h命令,启动写操作;
【6】通过70h命令读取状态查询操作是否完成;
2、多层页内复制步骤:
【1】发出命令00h(第一层)、4个源页地址序列;
【2】以后各层依次发出命令03h、4个源页地址序列;
【3】发出命令8Ah、目的地址、命令11h;
【4】各层依次执行【3】,在最后一页的地址后,用10h代替11h,启动写操作;
【5】通过71h命令读取状态查询操作是否完成;
(5)擦除
命令:
60h——D0h :单层内块擦除
60h-60h ——D0h :多层内块擦除
操作步骤:
1、单层内块擦除:
【1】发出命令字60h;
【2】发出块(block)地址,仅需3个地址序列;
【3】发出D0h,启动擦除操作;
【4】发出70h命令查询状态,是否完成擦除;
2、多层内块擦除:
【1】发出命令字60h,3个块地址序列;
【2】对每个层执行【1】;
【3】发出命令D0h,启动擦除操作;
【4】发出71h命令查询状态,检查是否完成擦除;
(6)读取芯片ID
命令:90h
操作步骤:
1、发出命令90h;
2、发出4个地址序列(均设为0);
3、连续读入5个数据,分别表示:厂商代码、设备代码、保留字节、多层操作代码;
(7)读状态
命令:
70h——单层状态
71h——多层状态
操作步骤:写入命令字之后,然后启动读操作即可读入此寄存器。
全部0条评论
快来发表一下你的评论吧 !