原创 SPI串行FLASH的应用

2009-12-9 15:51 6808 11 11 分类: MCU/ 嵌入式

SPI串行FLASH的应用



 




摘要:ATMEL公司生产的串行Flash AT45系列存储器的容量已达到了16Mb,常用于数据存储系统。文中以AT45D041为例,详细介绍了该系列Flash存储器的命令集以及串行SPI接口的应用方法,并给出了相应的模式时序。


    关键词:SPI Flash Buffer 中断 AT45D041


 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控制寄存器(SPICON)与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

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条