串行FLASH SSF1101在單片機(jī)
1 概述
對(duì)于野外移動(dòng)工作或不便與上位機(jī)通信的單片機(jī)數(shù)據(jù)采集系統(tǒng),使用一個(gè)大容量、可插拔、便于更換和攜帶的智能卡來(lái)存儲(chǔ)采集到的數(shù)據(jù),是一個(gè)較好的數(shù)據(jù)存儲(chǔ)方案。SSF1101是上海新茂半導(dǎo)體有限公司生產(chǎn)的4Mbit串行接口可編程閃速存儲(chǔ)器,該器件采用SPI串口模式與單片機(jī)或微機(jī)通信,無(wú)需任何外圍元件。利用該器件提供的IC卡封裝形式,可非常方便地和單片機(jī)系統(tǒng)進(jìn)行接口以構(gòu)成大容量的數(shù)據(jù)存儲(chǔ)裝置。同時(shí),該芯片具有封裝尺寸小、集成度高、電壓低、存儲(chǔ)容量大、接口方式簡(jiǎn)單等優(yōu)點(diǎn),在商業(yè)和工業(yè)領(lǐng)域具有廣泛的應(yīng)用前景。
2 性能特點(diǎn)
SSF1101是一個(gè)4Mbit的串行FLASH存儲(chǔ)器,具有4根器件識(shí)別腳,可在一個(gè)系統(tǒng)中最多能擴(kuò)展16片,其總存儲(chǔ)容量可達(dá)8M字節(jié),該器件的性能特點(diǎn)如下:
●SPI串行數(shù)據(jù)接口符合SPI標(biāo)準(zhǔn);
●器件內(nèi)具有4M Bit 閃速存儲(chǔ)器,512頁(yè),每頁(yè)1024字節(jié);
●內(nèi)置4位器件地址譯碼電路,可直接并聯(lián)擴(kuò)展存儲(chǔ)容量,最多可連接16片;
●帶有雙1k字節(jié)的數(shù)據(jù)緩沖器,可在編程期間寫入或讀取數(shù)據(jù),且讀取/寫入地址自動(dòng)遞增;
●高速頁(yè)面編程,典型時(shí)間為20ms;
●高速頁(yè)面到數(shù)據(jù)緩沖器的傳輸?shù)湫蜁r(shí)間為100μs;
●頁(yè)面擦除典型時(shí)間為10ms;
●器件擦除典型時(shí)間為2s;
●內(nèi)置擦除/編程時(shí)序邏輯;
●可硬件寫保護(hù);
●時(shí)鐘頻率最高達(dá)10MHz;
●采用單5V電源工作,并有低電壓2.7~3.5V可供選擇;
●低功耗,休眠電流典型值為18μA;
●與CMOS電平和TTL輸入/輸出電平兼容;
●工作溫度很寬(商用);
●內(nèi)置上電復(fù)位電路;
●在數(shù)據(jù)緩沖器和主Flash之間進(jìn)行傳送或比較時(shí),可對(duì)未用的數(shù)據(jù)緩沖器和狀態(tài)寄存器進(jìn)行操作。
SSF1101采用32腳TSOP封裝和IC卡封裝兩種形式,其TSOP封裝外形及引腳排列如圖1(a)所示,IC卡的觸點(diǎn)配置如圖1(b)所示。器件的引腳功能說(shuō)明見表1所列。
表1 SSF110引腳說(shuō)明
序 號(hào) | 引腳名 | I/O | 描 述 |
1 | RDY/BUSY | O | 閑/忙指示,此腳為低時(shí)表示器件忙,不能閃存進(jìn)行操作 |
2 | RST | I | 復(fù)位,低有效 |
3 | WP | I | 寫保護(hù),高有效。此信號(hào)有效時(shí)不能對(duì)閃存進(jìn)行寫擦除操作 |
6 | Vcc | I | 電源 |
7,8 | GND | I | 地 |
4,5,9,10 | ID0~I(xiàn)D3 | I | 芯片地址A0~A3,只有命令中的Device ID和ID0~I(xiàn)D3引腳電平一致時(shí),命令才會(huì)被器件接受 |
11 | TM | I | 測(cè)試引腳,正常使用時(shí)接地 |
12 | CS | I | 片選,低有效,命令輸入后應(yīng)重新置為高電平 |
13 | SCK | I | 串行輸入數(shù)據(jù)時(shí)鐘 |
14 | SI | I | 數(shù)據(jù)輸入,命令和數(shù)據(jù)都由此腳串行輸入 |
15 | SO | O/Z | 串行數(shù)據(jù)輸出,三態(tài) |
16~32 | NC | Z | 空腳 |
3 工作原理
SSF1101具有4194304位主存儲(chǔ)單元,分成512頁(yè)面、每頁(yè)面1024個(gè)字節(jié)。此外SSF1101還包含有2個(gè)SRAM緩沖器,每個(gè)緩沖器有1024個(gè)字節(jié),當(dāng)主存儲(chǔ)器內(nèi)的1頁(yè)正被編程時(shí),緩沖器照樣能接收輸入數(shù)據(jù)。SSF1101使用SPI串口訪問(wèn)它的數(shù)據(jù),因而硬件設(shè)計(jì)十分方便,系統(tǒng)可靠性很強(qiáng),并可把開關(guān)噪聲降到最低。該芯片在編程期間,不需要高電壓,而編程電壓仍為電源電壓。 圖2所示是SSF1101存儲(chǔ)器的內(nèi)部結(jié)構(gòu)框圖。
SSF1101通過(guò)簡(jiǎn)單的SPI串行口進(jìn)行數(shù)據(jù)存取,器件的操作由主機(jī)發(fā)出的指令控制,一個(gè)有效指令包括一字節(jié)4位操作碼、4位器件地址以及目的緩沖器或主儲(chǔ)器地址位置。當(dāng)CS為0時(shí),主機(jī)向器件SCK端發(fā)送時(shí)鐘信號(hào),以引導(dǎo)操作碼和地址從SI端寫入到器件中。所有指令地址和數(shù)據(jù)都是先送高位。SSF1101的操作命令如表2所列。表中的X可取任意值,它對(duì)器件操作沒有影響。
表2 SSF1101操作命令表
操 作 | 命 令 | 器件地址 | 頁(yè)面地址 | 緩沖區(qū)地址 |
讀緩沖區(qū)1 | 1110 | dddd | XXXXXXXXXXXX | BA11-BA0 |
讀緩沖區(qū)2 | 1111 | dddd | XXXXXXXXXXXX | BA11-BA0 |
寫緩沖區(qū)1 | 0110 | dddd | XXXXXXXXXXXX | BA11-BA0 |
寫緩沖區(qū)2 | 0111 | dddd | XXXXXXXXXXXX | BA11-BA0 |
使用內(nèi)建擦除周期的從緩沖區(qū)1到閃存?zhèn)魉?/TD> | 1010 | dddd | PA11-PA0 | XXXXXXXXXXXX |
使用內(nèi)建擦除周期的從緩沖區(qū)2到閃存?zhèn)魉?/TD> | 1011 | dddd | PA11-PA0 | XXXXXXXXXXXX |
不使用內(nèi)建擦除周期的從緩沖區(qū)1到閃存?zhèn)?/TD> | 0010 | dddd | PA11-PA0 | XXXXXXXXXXXX |
不使用內(nèi)建擦除周期的從緩沖2到內(nèi)存?zhèn)魉?/TD> | 0011 | dddd | PA11-PA10 | XXXXXXXXXXXX |
閃存到緩沖區(qū)1的傳送 | 1100 | dddd | PA11-PA0 | XXXXXXXXXXXX |
閃存到緩沖區(qū)2的傳送 | 1101 | dddd | PA11-PA0 | XXXXXXXXXXXX |
比較閃存頁(yè)面和緩沖區(qū)1 | 0100 | dddd | PA11-PA0 | BA11-BA0 |
比較閃存頁(yè)面和緩沖區(qū)2 | 0101 | dddd | PA11-PA0 | BA11-BA0 |
閃存直接讀 | 0001 | dddd | PA11-PA0 | BA11-BA0 |
狀態(tài)寄存器讀 | 0000 | dddd | XXXXXXXXXXXX | XXXXXXXXXXXX |
片擦除 | 1001 | dddd | XXXXXXXXXXXX | XXXXXXXXXXXX |
3.1 狀態(tài)寄存器(SR)
SSF1101具有一個(gè)8bit的狀態(tài)寄存器,可用于指示器件的工作狀態(tài)。該寄存器可通過(guò)“狀態(tài)寄存器讀”命令讀出寄存器中的內(nèi)容。寄存器內(nèi)容及定義如下:
BF: 忙標(biāo)志,為1時(shí),表示器件忙,無(wú)法執(zhí)行對(duì)閃存的操作命令;
CF:比較標(biāo)志,為1時(shí),表示緩沖區(qū)中的內(nèi)容和指定的被比較的閃存頁(yè)面不一致;
WPF:寫保護(hù)標(biāo)志,為1表示器件處于硬件寫保護(hù)狀態(tài);
Bit2~Bit0:容量指示位,為全1表示閃存容量為4Mbit;
Res:保留位,暫為01;
當(dāng)器件正確上電復(fù)位后,SR為 00001111B。
3.2 命令操作說(shuō)明
(1)緩沖區(qū)傳送
緩沖區(qū)傳送分為三種,首先通過(guò)閃存到緩沖區(qū)的傳送命令可把指定閃存頁(yè)面中的內(nèi)容拷貝到緩沖區(qū)1或緩沖區(qū)2中,傳送到緩沖區(qū)1的命令碼為:1100dddd PA11-PA0 XXXXXXXXXXXX,共32位, 并繼續(xù)保持SCK到至少第35個(gè)周期。其中的PA11 - PA0為指定被傳送的閃存頁(yè)面, 如果超出器件的范圍,則自動(dòng)取模。當(dāng)CS被置高后,傳送操作開始, 同時(shí)狀態(tài)寄存器中的BF位有效。 完成傳送操作大約需要100μs, 完成后,BF標(biāo)志清零(下述命令中,如沒有特別指出,其命令碼含義及操作時(shí)序均與此相同,此外針對(duì)緩沖區(qū)2的操作僅命令不同,其余部分完全相同,下述命令均相同)。
使用內(nèi)建擦除周期的從緩沖區(qū)到閃存?zhèn)魉兔顣r(shí),一般先使用內(nèi)建的擦除周期擦除指定的閃存頁(yè)面,然后把緩沖區(qū)中的內(nèi)容拷貝到指定的閃存頁(yè)面中。
不使用內(nèi)建擦除周期的從緩沖區(qū)到閃存?zhèn)魉兔顣r(shí),可直接把緩沖區(qū)中的內(nèi)容拷貝到指定的閃存頁(yè)面中。
(2)讀寫緩沖區(qū)
讀緩沖區(qū)命令用于讀取緩沖區(qū)1(或2)中的一個(gè)或多個(gè)字節(jié)數(shù)據(jù),命令碼為:
1110ddddXXXXXXXXXXXXBA11-BA0。
其中,BA11-BA0 用于指定從緩沖區(qū)中讀取數(shù)據(jù)的開始地址,如果超出緩沖區(qū)大小則自動(dòng)取模。器件在第35個(gè)SCK的下降沿開始從SO引腳輸出數(shù)據(jù),且高位在前。讀取一個(gè)字節(jié)后,緩沖區(qū)地址自動(dòng)加1,然后繼續(xù)輸出下一地址的數(shù)據(jù)。如到達(dá)緩沖區(qū)的尾部, 則自動(dòng)返回到緩沖區(qū)的起始地址。輸出最后一個(gè)字節(jié)后需額外的3~7個(gè)脈沖。
寫緩沖區(qū)命令用于將一個(gè)或多個(gè)字節(jié)數(shù)據(jù)寫入緩沖區(qū)1(或2)中,命令碼為:
0110ddddXXXXXXXXXXXXBA11-BA0
其中,BA11-BA0用來(lái)指定寫入緩沖區(qū)的開始地址,如果地址超出緩沖區(qū)大小則自動(dòng)取模。器件在第33個(gè)SCK的上升沿開始從SI引腳接收數(shù)據(jù)(高位在前),接收一個(gè)字節(jié)后寫入緩沖區(qū), 并自動(dòng)對(duì)緩沖區(qū)地址加1后繼續(xù)接收下一地址的數(shù)據(jù)。如果到達(dá)緩沖區(qū)的頁(yè)尾,則自動(dòng)返回到緩沖區(qū)的起始地址。輸出最后一個(gè)字節(jié)后需額外的3~7個(gè)脈沖。
(3)閃存直接讀
閃存直接讀命令用于直接從閃存頁(yè)面中讀取數(shù)據(jù),而不通過(guò)緩沖區(qū),也不影響緩沖區(qū)中的內(nèi)容。其命令碼為:
0001dddd PA11-PA0 BA11-BA0。
其中,PA11-PA0用于指定被操作的閃存頁(yè)面, 如果超出器件的范圍,則自動(dòng)取模;BA11-BA0則用來(lái)指定從頁(yè)面內(nèi)讀取數(shù)據(jù)的開始地址,同樣, 如果超出頁(yè)面大小則自動(dòng)取模。器件在第35個(gè)SCK的下降沿開始從SO引腳輸出數(shù)據(jù), 高位在前。 輸出一個(gè)字節(jié)后頁(yè)面內(nèi)數(shù)據(jù)地址自動(dòng)加1,然后繼續(xù)輸出下一地址的數(shù)據(jù)。如果到達(dá)頁(yè)尾,則自動(dòng)返回到頁(yè)初地址。
(4)比較閃存頁(yè)面和緩沖區(qū)
此命令用于比較指定的閃存頁(yè)面和緩沖區(qū)內(nèi)的數(shù)據(jù)是否相同,在被置高后開始比較, 同時(shí)BF被置1。如果比較結(jié)果為不相同,則狀態(tài)寄存器的CF位被置1, 否則CF清零, 比較結(jié)束后BF清零。
(5)讀狀態(tài)寄存器
狀態(tài)寄存器讀命令用于讀出器件內(nèi)狀態(tài)寄存器的值。
(6)片擦除
片擦除命令用于擦除閃存所有頁(yè)面的數(shù)據(jù),一個(gè)擦除周期大約需要2s。
4 具體應(yīng)用
SSF1101由于具有512kbyte的大存儲(chǔ)容量,因此可廣泛應(yīng)用于數(shù)字語(yǔ)音存儲(chǔ)、圖象存儲(chǔ)和數(shù)據(jù)存儲(chǔ)等應(yīng)用領(lǐng)域,以構(gòu)成大容量的單片機(jī)數(shù)據(jù)采集系統(tǒng)。由AT89C52單片機(jī)與SSF1101構(gòu)成的IC卡讀寫電路如圖3所示。
圖3中,AT89C52的P1.0、P1.1、P1.2分別與SSF1101 SPI的接口SI、SCK及SO端相連以實(shí)現(xiàn)簡(jiǎn)單的三線串行通信,P1.3與CS相連用于控制對(duì)器件的訪問(wèn),圖中的C9與C10是IC卡座的接通開關(guān),當(dāng)IC卡插入時(shí)開關(guān)閉合,C1端接入+5V電源,SSF1101上電復(fù)位后讀寫電路進(jìn)入正常的讀寫狀態(tài),當(dāng)IC卡拔出后C1端經(jīng)電阻R2向AT89C52的INT0端發(fā)出中斷請(qǐng)求,從而轉(zhuǎn)向掉卡中斷處理程序。下面的程序代碼為與上述硬件電路配套的讀寫IC卡程序:
;位定義
SI BIT P1.0;串行數(shù)據(jù)輸入
SCK BIT P1.1;串行時(shí)鐘
SO BIT P1.2;串行數(shù)據(jù)輸出
CS BIT P1.3;片選控制
;內(nèi)存定義
RCMD EQU 30H;讀卡命令單元
PAH EQU 31H;閃存頁(yè)面高位單元
PAL EQU 32H;閃存頁(yè)面低位單元
BAH EQU 33H;閃存地址高位單元
BAL EQU 24H;閃存地址低位單元
ICRDATA EQU 20H;讀寫數(shù)據(jù)緩沖區(qū)首址
NUMBER EQU 80H;數(shù)據(jù)塊長(zhǎng)度
;讀IC卡子程序,采用閃存直接讀方式
RCARD: SETB CS
SETB SI ;初始化SPI
SETB SO
CLR SCK
MOV RCMD,#10H;“閃存直接讀”命令
MOV DAH,#00H ;00頁(yè)面
MOV DAL,#00H
MOV BAH,#00H ;00地址
MOV BAL,#00H
CLR CS ;選中芯片
MOV R0,#RCMD ;指向命令單元
MOV R1,#04H ;4字節(jié)命令
T RCMD: MOV A,@R0
LCALL S OUT ;調(diào)用發(fā)送子程序
INC R0
DJNZ R1,T RCMD
MOV R0,#ICRDATA ;指向讀寫數(shù)據(jù)
緩沖區(qū)首址
MOV R1,#NUMBER
RICDATA: LCALL SIN ;調(diào)用接收子程序
MOV @R0,A ;讀128字節(jié)數(shù)據(jù)到主機(jī)
INC R0
DJNZ R1,RICDATA
SETB CS
RET
;寫IC卡子程序;數(shù)據(jù)首先寫入緩沖區(qū),再使用內(nèi)建擦除周期的從緩沖區(qū)1到內(nèi)存?zhèn)魉兔顚懭胫鞔?/P>
WCARD: SETB CS
SETB SI
SETB SO
CLR SCK
MOV RCMD,#60H ;“寫緩沖區(qū)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;指向讀寫緩沖區(qū)
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 ;延時(shí)30ms
RET
;接收一字節(jié)數(shù)據(jù)程序
S-IN: MOV R6,#8
RSHIFT: MOV C,SO
SETB SCK
RLC A
CLR SCK
DJNZ R6,RSHIFT
RET
;發(fā)送一字節(jié)數(shù)據(jù)子程序
S OUT: MOV R7,#8
TSHIFT: RLC A
MOV SI,C
SETB SCK
NOP
CLR SCK
NOP
CLR SCK
DJNA R7,TSHIFT
RET
5 結(jié)束語(yǔ)
SSF1101串行閃速存儲(chǔ)器的串行IC卡封裝形式非常便于和單片機(jī)接口,以便構(gòu)成便攜式數(shù)據(jù)存儲(chǔ)裝置,同時(shí)其較大的存儲(chǔ)容量也可滿足數(shù)據(jù)存儲(chǔ)量較大的應(yīng)用系統(tǒng)要求,因而該器件在數(shù)據(jù)存儲(chǔ)領(lǐng)域有著較為廣泛的應(yīng)用前景。
評(píng)論