1 概述
在现在一切的非易失性存储器(PROM、EPROM、EEPROM和Flash)中,唯有Flash存储器简直具有如今考究个性化的用户所需的一切特色,它具有掉电数据不丢掉、快速数据存取速度、电可擦除、容量大、在线可编程、价格低廉以及足够多的擦除、容量大、在线可编程、价格低廉以及足够多的擦写次数(一百万次)和较高的牢靠性等许多长处,因此已为新一代嵌入式运用(如数字相机和MP3播放机)的首选存储器。现在FLASH的本钱已低于PROM/EPROM,能够必定,它将很快占邻PROM/EPROM商场,MASK(掩膜)ROM虽然在大指出产时具有必定的价格优势,但其晋级不方便的弱点将跟着往后FLASH本钱的进一步下降,而使得MASK ROM的远景并不达观。
ATMEL出产的Flash AT45系列中的AT45D041为单5V供电的SPI接口器材,其封装方式有PLCC、TSOP和SOIC三种,图1给出了该器材选用SOIC封装方式的管脚摆放和阐明。
AT45D041的内部结构如图2所示。该器材有2048页(每页264字节)内存(Flash Memory,也叫主存Main Memory)和两具Buffer(每个Buffer为264字节的SRAM)组成。数据能够直接写入闪存,也能够选写入Buffer,然后再将Buffer的数据整个仿制到闪存的某一天,也能够在闪存正处于编程时(页编程时刻典型值7ms)将数据写入Buffer。以下是该器材的一些特色:
●一页主存传送到Buffer的典型时刻为80μs;
●有用电流的典型值为15mA,闲暇电流为20μA;
●最大时钟频率为10MHz;
●具有硬件擦、写保护功用,当WP脚为低时,前256页钭制止编程。
●输入输出与CMOS和TTL电平兼容;
●具有商业和工业两种温度规模;
●可单周期重编程(包含擦除和编程);
●带有串行接口,读写操作时地址会主动增1;
●复位时将停止正在进行的操作,当复位管脚康复高电平时,操作也能够康复;
●传送数据时,高位(MSB)在前。
2 操作指令介绍
对AT45D041的操作总共有18条指令,表1所列为AT45D041的操作指令集。其间:
表1 AT45D041的操作指令集
读主存 | 52H | rrr | PA10~PA0 | BA8~BA0 | 32个× |
读Buffer1 | 54H | ×××× | 11个× | BFA8~BFA0 | 8个× |
读Buffer2 | 56H | ×××× | 11个× | BFA8~BFA0 | 8个× |
主存传送到Buffer1 | 53H | rrrr | PA10~PA0 | 9个× | |
主存传送到Buffer2 | 55H | rrrr | PA10~PA0 | 9个× | |
主存与Buffer1比较 | 60H | rrrr | PA10~PA0 | 9个× | |
主存与Buffer2比较 | 61H | rrrr | PA10~PA0 | 9个× | |
写Buffer1 | 84H | ×××× | 11个× | BFA8~BFA0 | |
写Buffer2 | 87H | ×××× | 11个× | BFA8~BFA0 | |
带擦除的Buffer1传送到存 | 83H | rrrr | PA10~PA0 | 9个× | |
带擦除的Buffer2传送到主存 | 86H | rrrr | PA10~PA0 | 9个× | |
不带擦除的Buffer1传送到主存 | 88H | rrrr | PA10~PA0 | 9个× | |
不带擦除的Buffer2传送到主存 | 89H | rrrr | PA10~PA0 | 9个× | |
Buffer1为缓冲对主存编程 | 82H | rrrr | PA10~PA0 | BA8~BA0 | |
Buffer2为缓冲对主存编程 | 85H | rrrr | PA10~PA0 | BA8~BA0 | |
Buffer1为缓冲主动重编程 | 28H | rrrr | PA10~PA0 | 9个× | |
Buffer2为缓冲主动重编程 | 59H | rrrr | PA10~PA0 | 9个× | |
读状况寄存器 | 57H |
r为保存位,AD45D041用0替代,容量更大的器材一般或许会用到;
×为无关位(0或1均可,为了占时钟位);
PA10~PA0用来指定页地址,对AT45D041而言,总共有2048页,占11位;
BA8~BA0用来指定内字节的开端地址,每页264字节,占9位;
BFA8~BFA0用来指定缓冲区内字节的开端地址,缓冲区也是264字节;
52H~61H、82H-89H分别是用来差异不同操作的指令字。
执行指令时,首要经过SPI串口往Flash发送一连串的数据,然后以指令字最初,除了“读状况寄存器”外,后边还要跟上页地址和页内的字节地址发及一些无关位。“读主存”时,首要需求往Flash发送64bit的指令,即:指令字52(8bit)+4个“r”+页地址(11bit)+页内字节的开端地址(9bit)+32个无关位,发送完这64bit(通常是组合成8个字节)指令后,紧跟着从Flash读数据以能够了(即后边的SCK信号使得数据从SO脚移出),每读出一个字节,字节地址主动加1,如遇到该页的结尾,只需有SCK信号,体系再加到该页的开关处读数据。在整个操作过程中,CS脚一直为“0”;当CS脚回到“1”时,将停止此次操作,SO脚康复到高阻状况。
主存传送到Bufferx是指将2048页主存中的任何一页(由PA10~PA0决议)的内容仿制到缓冲区,发送完32bit指令后,当CS脚由“0”为“1”后,数据的仿制才真实开端。
主存与Bufferx的比较主要是看主存中的某一页与缓冲区是否相同,当CS脚回到“1”后,比较才开端进行,比较的成果(是否相同)记录在状况寄存器的bit6中。
把带擦除的Bufferx传送到主存便是将缓冲区的内容仿制到主存中的某一页,仿制前应将缓冲区的内容仿制到主存中的某一页,仿制前应将主存中的该页数据悉数擦掉,一切这些操作只要比及CS脚回到“1”后才干进行。关于不带擦除的Bufferx传送到主存的操作,在指令执行前,指定的主存页有必要已被擦除过。
以Bufferx为缓冲为主存编程便是将“写Bufferx”与“带擦除的Bufferx传送到主存”进行组合。在发送完指令后,写入Flash的数据将被写入到缓冲区内,假如遇到缓冲区结尾,要继续写入的数据又从缓冲区最初写入,直到CS脚由“0”到“1”后,主存中被指定的页的数据被擦除后再将缓冲区的数据整个仿制到主存的指定页中。
3 状况寄存器及操作完结指示
一般向Flash发送57H后以可读出状况寄存器(移出时,高位在前),状况寄存器的位界说如表2所列。其间Bit7为“0”表明器材忙,为“1”表明能够接纳新的指令;Bit6是比较成果位,为“0”表明主存与缓冲区的数据相同,为“1”时表明最少有一个bit不同;Bit5~Bit3为该系列器材的容量指示位,总共种8种容量,关于AT45D041来说,该区域为“011”;Bit2~Bit0未运用。总共蛾6种操作会使器材处于“忙”状况,这6种操作是:
●主存传送到Bufferx;
●主存与Bufferx比较;
●带擦除的Bufferx传送到主存;
●不带擦除的Bufferx传送到主存;
●Bufferx为缓冲对主存编程;
●Bufferx为缓冲主动重编程。
这6种操作均需求监督状况寄存器,以便知道操作是否完结。除了监督状况寄存器外,更好的办法是将芯片管脚RDY/BUSY与CPU的某个中止相连,并将中止设置为升沿触发,操作一完结即可触发中止,这样或许节约很多的CPU时刻。
4 SPI接口及运用
4.1 SPI接口
串行外围接口总共有4种操作方式,图3为其时序图。这些操作方式决议了传送与接纳的时钟相位和极性,换句话说,也便是这些方式决议了运用时钟信号的哪个沿来操控数据传判别的方向。这些方式一般由主机(CPU)来设置。
当CPOL=0时,时钟信号SCK在闲暇时为“0”,即方式0和1;
假如CPOL=1,则SCK在闲暇时为“1”,即方式2和3;
当CPHA=CPOL时,数据总在时钟信号的上升沿移进Flash,下降沿移出Flash,即方式0和3。
4.2 SPI接口运用
关于12位的数据收集体系,运用AD公司的Flash集成MCU芯片AduC812可使电路设计愈加简略方便。因为AduC812有一个与I2C兼容的SPI接口,所以与AT45系列的Flash接口只需将相应的管脚相连即可,只不过要将AduC812设为主机,而AT45D041天然所以从机了。在AduC812中有SPI操控寄存器(SP%&&&&&%ON)与SPI数据寄存器(SPIDAT),数据寄存器的运用好像运用RS232的Buffer相同简略,操控寄存器的位界说如表3所列。现对其各个位界说进行阐明:
ISPI:SPI中止位,在每次传送差错SPIDAT中的数据后,置“1”;
WCOL:写抵触过错标志位,在写保护状况下编程会导致该方位“1”;
SPE:SPI答应操控位,为“0”时制止;
SPIM:主从方式挑选位,为“1”时挑选主机;
CPOL:时钟极性挑选,为“0”时,将使CLK在闲暇时为低电平;
CPHA:时钟相位挑选,为“0”时,在时钟上升沿被锁存;
SPR1、SPR0:SPI波特率挑选位,BITRATE=Fose/[4,8,32,64]。“00”挑选除以4。
4.3 SPI操作方式挑选
AT45系列的Flash支撑SPI方式0和3,并且在每个CS信号的下降沿,可经过采样时钟信号的状况主动挑选操方式。因为在上电或复位时器材将主动进入缺省的方式3,所以运用械比较牢靠。在AduC812的运用中,挑选方式0和3对“写”Flash没有不同,但在“读”Flash时,挑选方式0会使从Flash读出的数据总短少一个bit,这或许是方式0中数据有用的时刻比较靠后的原因。图4和图5分别是方式0和方式3的“读主存”时序图,由时序图能够看出:方式0中数据的有用时刻显着比方式3的有用时刻靠后半个时钟周期。
表2 状况寄存器的位界说
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
RDY/BUSY | COMP | 0 | 1 | 1 | × | × | × |
表3 SPI操控寄存器的位界说
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
ISPI | WOOL | SPE | SPIM | CPOL | CPHA | SPR1 | SPR0 |