| 摘要:SSF1101是存储容量为4Mbit的SPI串行接口FLASH存储器,其IC卡封装形式可作为单片机系统的大容量数据存储卡。文中介绍了该器件的主要特性和工作原理,并以IC卡封装形式为例,给出了其与单片机的接口电路及相应的读写程序。 
    关键词:串行FLASH 单片机 IC卡 
1 概述 
对于野外移动工作或不便与上位机通信的单片机数据采集系统,使用一个大容量、可插拔、便于更换和携带的智能卡来存储采集到的数据,是一个较好的数据存储方案。SSF1101是上海新茂半导体有限公司生产的4Mbit串行接口可编程闪速存储器,该器件采用SPI串口模式与单片机或微机通信,无需任何外围元件。利用该器件提供的IC卡封装形式,可非常方便地和单片机系统进行接口以构成大容量的数据存储装置。同时,该芯片具有封装尺寸小、集成度高、电压低、存储容量大、接口方式简单等优点,在商业和工业领域具有广泛的应用前景。   2 性能特点 
SSF1101是一个4Mbit的串行FLASH存储器,具有4根器件识别脚,可在一个系统中最多能扩展16片,其总存储容量可达8M字节,该器件的性能特点如下: 
●SPI串行数据接口符合SPI标准; 
●器件内具有4M Bit 闪速存储器,512页,每页1024字节; 
●内置4位器件地址译码电路,可直接并联扩展存储容量,最多可连接16片; 
●带有双1k字节的数据缓冲器,可在编程期间写入或读取数据,且读取/写入地址自动递增; 
●高速页面编程,典型时间为20ms; 
●高速页面到数据缓冲器的传输典型时间为100μs; 
●页面擦除典型时间为10ms; 
●器件擦除典型时间为2s; 
●内置擦除/编程时序逻辑; 
●可硬件写保护; 
●时钟频率最高达10MHz; 
●采用单5V电源工作,并有低电压2.7~3.5V可供选择; 
●低功耗,休眠电流典型值为18μA; 
●与CMOS电平和TTL输入/输出电平兼容; 
●工作温度很宽(商用); 
●内置上电复位电路; 
●在数据缓冲器和主Flash之间进行传送或比较时,可对未用的数据缓冲器和状态寄存器进行操作。 
SSF1101采用32脚TSOP封装和IC卡封装两种形式,其TSOP封装外形及引脚排列如图1(a)所示,IC卡的触点配置如图1(b)所示。器件的引脚功能说明见表1所列。
  表1 SSF110引脚说明 
| 序  号 | 
引脚名 | 
I/O | 
 描      述  |  
| 1 | 
RDY/BUSY | 
O | 
闲/忙指示,此脚为低时表示器件忙,不能闪存进行操作 |  
| 2 | 
RST | 
I | 
复位,低有效 |  
| 3 | 
WP | 
I | 
写保护,高有效。此信号有效时不能对闪存进行写擦除操作 |  
| 6 | 
Vcc | 
I | 
电源 |  
| 7,8 | 
GND | 
I | 
地 |  
| 4,5,9,10 | 
ID0~ID3 | 
I | 
芯片地址A0~A3,只有命令中的Device ID和ID0~ID3引脚电平一致时,命令才会被器件接受 |  
| 11 | 
TM | 
I | 
测试引脚,正常使用时接地 |  
| 12 | 
CS | 
I | 
片选,低有效,命令输入后应重新置为高电平 |  
| 13 | 
SCK | 
I | 
串行输入数据时钟 |  
| 14 | 
SI | 
I | 
数据输入,命令和数据都由此脚串行输入 |  
| 15 | 
SO | 
O/Z | 
串行数据输出,三态 |  
| 16~32 | 
NC | 
Z | 
空脚 |   
3 工作原理 
SSF1101具有4194304位主存储单元,分成512页面、每页面1024个字节。此外SSF1101还包含有2个SRAM缓冲器,每个缓冲器有1024个字节,当主存储器内的1页正被编程时,缓冲器照样能接收输入数据。SSF1101使用SPI串口访问它的数据,因而硬件设计十分方便,系统可靠性很强,并可把开关噪声降到最低。该芯片在编程期间,不需要高电压,而编程电压仍为电源电压。 图2所示是SSF1101存储器的内部结构框图。 
SSF1101通过简单的SPI串行口进行数据存取,器件的操作由主机发出的指令控制,一个有效指令包括一字节4位操作码、4位器件地址以及目的缓冲器或主储器地址位置。当CS为0时,主机向器件SCK端发送时钟信号,以引导操作码和地址从SI端写入到器件中。所有指令地址和数据都是先送高位。SSF1101的操作命令如表2所列。表中的X可取任意值,它对器件操作没有影响。
  表2 SSF1101操作命令表 
| 操     作 | 
命  令 | 
器件地址 | 
页面地址 | 
缓冲区地址 |  
| 读缓冲区1 | 
1110 | 
dddd | 
XXXXXXXXXXXX | 
BA11-BA0 |  
| 读缓冲区2 | 
1111 | 
dddd | 
XXXXXXXXXXXX | 
BA11-BA0 |  
| 写缓冲区1 | 
0110 | 
dddd | 
XXXXXXXXXXXX | 
BA11-BA0 |  
| 写缓冲区2 | 
0111 | 
dddd | 
XXXXXXXXXXXX | 
BA11-BA0 |  
| 使用内建擦除周期的从缓冲区1到闪存传送 | 
1010 | 
dddd | 
PA11-PA0 | 
XXXXXXXXXXXX |  
| 使用内建擦除周期的从缓冲区2到闪存传送 | 
1011 | 
dddd | 
PA11-PA0 | 
XXXXXXXXXXXX |  
| 不使用内建擦除周期的从缓冲区1到闪存传 | 
0010 | 
dddd | 
PA11-PA0 | 
XXXXXXXXXXXX |  
| 不使用内建擦除周期的从缓冲2到内存传送 | 
0011 | 
dddd | 
PA11-PA10 | 
XXXXXXXXXXXX |  
| 闪存到缓冲区1的传送 | 
1100 | 
dddd | 
PA11-PA0 | 
XXXXXXXXXXXX |  
| 闪存到缓冲区2的传送 | 
1101 | 
dddd | 
PA11-PA0 | 
XXXXXXXXXXXX |  
| 比较闪存页面和缓冲区1 | 
0100 | 
dddd | 
PA11-PA0 | 
BA11-BA0 |  
| 比较闪存页面和缓冲区2 | 
0101 | 
dddd | 
PA11-PA0 | 
BA11-BA0 |  
| 闪存直接读 | 
0001 | 
dddd | 
PA11-PA0 | 
BA11-BA0 |  
| 状态寄存器读 | 
0000 | 
dddd | 
XXXXXXXXXXXX | 
XXXXXXXXXXXX |  
| 片擦除 | 
1001 | 
dddd | 
XXXXXXXXXXXX | 
XXXXXXXXXXXX |   
3.1 状态寄存器(SR) 
SSF1101具有一个8bit的状态寄存器,可用于指示器件的工作状态。该寄存器可通过“状态寄存器读”命令读出寄存器中的内容。寄存器内容及定义如下: 
BF: 忙标志,为1时,表示器件忙,无法执行对闪存的操作命令; 
CF:比较标志,为1时,表示缓冲区中的内容和指定的被比较的闪存页面不一致; 
WPF:写保护标志,为1表示器件处于硬件写保护状态; 
Bit2~Bit0:容量指示位,为全1表示闪存容量为4Mbit; 
Res:保留位,暂为01; 
当器件正确上电复位后,SR为 00001111B。 
3.2 命令操作说明 
(1)缓冲区传送 
缓冲区传送分为三种,首先通过闪存到缓冲区的传送命令可把指定闪存页面中的内容拷贝到缓冲区1或缓冲区2中,传送到缓冲区1的命令码为:1100dddd PA11-PA0 XXXXXXXXXXXX,共32位, 并继续保持SCK到至少第35个周期。其中的PA11 - PA0为指定被传送的闪存页面, 如果超出器件的范围,则自动取模。当CS被置高后,传送操作开始, 同时状态寄存器中的BF位有效。 完成传送操作大约需要100μs, 完成后,BF标志清零(下述命令中,如没有特别指出,其命令码含义及操作时序均与此相同,此外针对缓冲区2的操作仅命令不同,其余部分完全相同,下述命令均相同)。 
使用内建擦除周期的从缓冲区到闪存传送命令时,一般先使用内建的擦除周期擦除指定的闪存页面,然后把缓冲区中的内容拷贝到指定的闪存页面中。 
不使用内建擦除周期的从缓冲区到闪存传送命令时,可直接把缓冲区中的内容拷贝到指定的闪存页面中。   
(2)读写缓冲区 
读缓冲区命令用于读取缓冲区1(或2)中的一个或多个字节数据,命令码为: 
1110ddddXXXXXXXXXXXXBA11-BA0。 
其中,BA11-BA0 用于指定从缓冲区中读取数据的开始地址,如果超出缓冲区大小则自动取模。器件在第35个SCK的下降沿开始从SO引脚输出数据,且高位在前。读取一个字节后,缓冲区地址自动加1,然后继续输出下一地址的数据。如到达缓冲区的尾部, 则自动返回到缓冲区的起始地址。输出最后一个字节后需额外的3~7个脉冲。 
写缓冲区命令用于将一个或多个字节数据写入缓冲区1(或2)中,命令码为: 
0110ddddXXXXXXXXXXXXBA11-BA0 
其中,BA11-BA0用来指定写入缓冲区的开始地址,如果地址超出缓冲区大小则自动取模。器件在第33个SCK的上升沿开始从SI引脚接收数据(高位在前),接收一个字节后写入缓冲区, 并自动对缓冲区地址加1后继续接收下一地址的数据。如果到达缓冲区的页尾,则自动返回到缓冲区的起始地址。输出最后一个字节后需额外的3~7个脉冲。 
(3)闪存直接读 
闪存直接读命令用于直接从闪存页面中读取数据,而不通过缓冲区,也不影响缓冲区中的内容。其命令码为: 
0001dddd PA11-PA0 BA11-BA0。 
其中,PA11-PA0用于指定被操作的闪存页面, 如果超出器件的范围,则自动取模;BA11-BA0则用来指定从页面内读取数据的开始地址,同样, 如果超出页面大小则自动取模。器件在第35个SCK的下降沿开始从SO引脚输出数据, 高位在前。 输出一个字节后页面内数据地址自动加1,然后继续输出下一地址的数据。如果到达页尾,则自动返回到页初地址。 
(4)比较闪存页面和缓冲区 
此命令用于比较指定的闪存页面和缓冲区内的数据是否相同,在被置高后开始比较, 同时BF被置1。如果比较结果为不相同,则状态寄存器的CF位被置1, 否则CF清零, 比较结束后BF清零。 
(5)读状态寄存器 
状态寄存器读命令用于读出器件内状态寄存器的值。 
(6)片擦除 
片擦除命令用于擦除闪存所有页面的数据,一个擦除周期大约需要2s。   4 具体应用 
SSF1101由于具有512kbyte的大存储容量,因此可广泛应用于数字语音存储、图象存储和数据存储等应用领域,以构成大容量的单片机数据采集系统。由AT89C52单片机与SSF1101构成的IC卡读写电路如图3所示。 
图3中,AT89C52的P1.0、P1.1、P1.2分别与SSF1101 SPI的接口SI、SCK及SO端相连以实现简单的三线串行通信,P1.3与CS相连用于控制对器件的访问,图中的C9与C10是IC卡座的接通开关,当IC卡插入时开关闭合,C1端接入+5V电源,SSF1101上电复位后读写电路进入正常的读写状态,当IC卡拔出后C1端经电阻R2向AT89C52的INT0端发出中断请求,从而转向掉卡中断处理程序。下面的程序代码为与上述硬件电路配套的读写IC卡程序: 
;位定义 
SI BIT P1.0;串行数据输入 
SCK BIT P1.1;串行时钟 
SO BIT P1.2;串行数据输出 
CS BIT P1.3;片选控制 
;内存定义 
RCMD EQU 30H;读卡命令单元 
PAH EQU 31H;闪存页面高位单元 
PAL EQU 32H;闪存页面低位单元 
BAH EQU 33H;闪存地址高位单元 
BAL EQU 24H;闪存地址低位单元 
ICRDATA EQU 20H;读写数据缓冲区首址 
NUMBER EQU 80H;数据块长度 
;读IC卡子程序,采用闪存直接读方式 
RCARD: SETB CS 
SETB SI ;初始化SPI 
SETB SO 
CLR SCK 
MOV RCMD,#10H;“闪存直接读”命令 
MOV DAH,#00H ;00页面 
MOV DAL,#00H 
MOV BAH,#00H ;00地址 
MOV BAL,#00H 
CLR CS ;选中芯片 
MOV R0,#RCMD ;指向命令单元 
MOV R1,#04H ;4字节命令 
T RCMD: MOV A,@R0 
LCALL S OUT ;调用发送子程序 
INC R0 
DJNZ R1,T RCMD 
MOV R0,#ICRDATA ;指向读写数据 
缓冲区首址 
MOV R1,#NUMBER 
RICDATA: LCALL SIN ;调用接收子程序 
MOV @R0,A ;读128字节数据到主机 
INC R0 
DJNZ R1,RICDATA 
SETB CS 
RET 
;写IC卡子程序;数据首先写入缓冲区,再使用内建擦除周期的从缓冲区1到内存传送命令写入主存 
WCARD: SETB CS 
SETB SI 
SETB SO 
CLR SCK 
MOV RCMD,#60H ;“写缓冲区1”命令 
MOV BAH,#00H ;写00H地址 
MOV BAL,#00H ;单元 
CLR CS 
MOV R0,#RCMD 
MOV R1,#04H 
T RCMD1: MOV A,@R0 
LCALL S OUT 
INC R0 
DJNZ R1,T RCMD 
MOV R0,#ICRDATA;指向读写缓冲区 
MOV R1,#NUMBER 
T RDATA: MOV A,@R0 
LCALL S OUT 
INC R0 
DJNZ R1,T-RDATA 
SETB SCK 
CLR SCK 
SETB SCK 
CLR SCK 
SETB SCK 
CLR SCK 
MOV RCMD,#0A0H 
MOV DAH,#00H 
MOV DAC,#00H 
CLR CS 
MOV R0,#RCMD 
MOV R1,#04H 
T RCMD2: MOV A,@R0 
LCALL S OUT 
INC R0 
DJNZ R1,T-RCMD 
SETB CS 
LCALL DL30MS ;延时30ms 
RET 
;接收一字节数据程序 
S-IN: MOV R6,#8 
RSHIFT: MOV C,SO 
SETB SCK 
RLC A 
CLR SCK 
DJNZ R6,RSHIFT 
RET 
;发送一字节数据子程序 
S OUT: MOV R7,#8 
TSHIFT: RLC A 
MOV SI,C 
SETB SCK 
NOP 
CLR SCK 
NOP 
CLR SCK 
DJNA R7,TSHIFT 
RET
  5 结束语 
SSF1101串行闪速存储器的串行IC卡封装形式非常便于和单片机接口,以便构成便携式数据存储装置,同时其较大的存储容量也可满足数据存储量较大的应用系统要求,因而该器件在数据存储领域有着较为广泛的应用前景。  |