基于X24C45芯片的非易失性數(shù)據(jù)存儲設(shè)計
目前非易失性的數(shù)據(jù)保存方法多采用EEPROM。但EEPROM也有其弱點,一是擦次數(shù)有限(多為10萬次),二是定入速率慢,這樣就限制了其在許多需要頻繁更新數(shù)據(jù)且需高速傳輸數(shù)據(jù)場合中的應(yīng)用。
本文介紹的存儲器芯片X24C45,可以較好地解決上述非易失性數(shù)據(jù)存儲過程中遇到的難題。
1 X24C45的功能特點
X24C45的引腳圖如圖1所示。
腳1為片選端,當該腳為高時片選有效,當該腳為低時芯片處于低功耗待機狀態(tài),且X24C45中的指令寄存器被復(fù)位;腳2為串行時鐘端;腳3為串行數(shù)據(jù)輸入;腳4為串行數(shù)據(jù)輸出;腳5為接地端,腳8為電源端;腳7為漏極開路輸出,當電源電壓降至低于自動存儲閥值電壓VASTH(VASIT在4.0V~4.3V范圍)時,腳7為低,對外部電路發(fā)出一個掉電報警或掉電復(fù)位信號,可見該芯片同時具有電源監(jiān)視功能。腳6輸入一個低電平時,將會執(zhí)行由EEPROM將數(shù)據(jù)傳輸?shù)絉AM的操作。
2 X24C45的指令集及工作時序
X24C45的各種功能主要是由軟件來實現(xiàn)。CPU通過DI端口向X24C45中的指令寄存器傳送一個指令,以實現(xiàn)某個功能。其指令集如表1所示。
表1 X24C45指令集
指 令 | 格 式 | 功 能 |
WRDS STO ENAS WRITE WREN RCL READ | 1XXXX000 1XXXX001 1XXXX010 1AAAA011 1XXXX100 1XXXX101 1AAAA11X | 寫使能復(fù)位(寫和存儲被禁止) 將RAM中數(shù)據(jù)存儲進EEPROM 自動存儲使能 將數(shù)據(jù)寫入RAM,地址為AAAA 寫使能置位(寫和存儲被允許) 將EEPROM中數(shù)據(jù)送回RAM 從RAM中讀出數(shù)據(jù),地址為AAAA |
由表1可見,所有指令的最高位都為“1”。所以在片選信號CE為高有效時,DI口由低電平跳變出一個時鐘周期的高電平,表明開始輸入一個指令,其工作時序如圖2所示。
由RAM將數(shù)據(jù)存入EEPROM的操作條件限制較嚴格,為的是防止對EEPROM的意外寫操作(因為EEDPROM的擦寫次數(shù)有限,不必要的寫操作應(yīng)避免)。所以該存儲功能的實現(xiàn),必須滿足以下三個條件同時成立:接收到STO指令;接收到WREN指令;接收到RCL指令或腳6電平被拉低。在將EEPROM的數(shù)據(jù)送回到RAM中的同時,應(yīng)使X24C45內(nèi)部的“前次數(shù)據(jù)恢復(fù)”鎖存器置位。另外需要說明的是,在將RAM中的數(shù)據(jù)存入EEPROM的操作過程中,X24C45的其它所有功能都被禁止。
ENAS指令將X24C45內(nèi)部的“自動存儲器使能”鎖存器置位,從而允許在電源電壓降至低于自動存儲閥值電壓VASTH時,自動執(zhí)行將RAM中的數(shù)據(jù)存入EEPRO的操作。
為了少占用CPU的I/O端口,X24C45的DI腳和DO腳通常連接到CPU的同一個I/O口(如圖1所示)。READ指令將RAM中AAAA地址的數(shù)據(jù)讀出,該指令的最低位為無關(guān)位,這樣正好允許在READ指令的第八個時鐘周期內(nèi)將I/O口由輸出轉(zhuǎn)換為輸入。RAM的讀操作時序如圖3所示。
WRITE指令將數(shù)據(jù)寫入RAM的AAAA地址中,其時序如圖4所示。需要說明的是,RAM中的每個地址存儲16bit數(shù)據(jù)。
3 X24C45應(yīng)用時需注意的問題
X24C45實際應(yīng)用時與CPU的連接如圖1所示。前面已經(jīng)提到為節(jié)省CPU的I/O端口,可以將DI腳和DO腳連接到CPU的同一個I/O口(PA4)。
在此要特別強調(diào)的是,電容C和二極管D本來是沒有加上去的,X24C45芯片手冊中也沒有這樣說明。但在實際應(yīng)用中筆者發(fā)現(xiàn),在沒有加上電容C和二極管D的情況下,X24C45會出現(xiàn)掉電時備份數(shù)據(jù)出錯的現(xiàn)象。究其原因,是因為在X24C45中將當前數(shù)據(jù)由RAM存儲到EEPROM時需要一定的時間(該時間典型數(shù)值為2ms,最長可達5ms),而且啟動自動存儲的閾值電壓在4.0V~4.3V之間,數(shù)據(jù)由RAM存儲到EEPROM所需要的最低電源電壓為3.5V,掉電后電源電壓由閥值電壓電路和負載的不同而不同。顯然,掉電后電源電壓由閥值電壓下降到3.5V所需的時間如果少于數(shù)據(jù)由RAM存儲到EEPROM所需的時間,就會出現(xiàn)一部分數(shù)據(jù)因不能被及時備份而丟失的問題,而這種問題的出現(xiàn)如果不采取相應(yīng)的措施是可能被避免的。圖1中的電容C和二極管D可以保證掉電后X24C45電源端的電壓由閥值電壓下降到3.5V所需時間足夠長,從而杜絕掉電時備份數(shù)據(jù)出錯的情況。
4 X24C45相關(guān)操作的軟件實現(xiàn)
X24C45與MC68HC05C4單片機的硬件連接如圖1所示。下面給出與其對應(yīng)的有關(guān)X24C45的前次數(shù)據(jù)恢復(fù)到RAM和自動存儲功能能使設(shè)置等操作的軟件編程。
SAMP:LDA #$1C $1C=00011100
STA $04 設(shè)置PA2、PA3、PA4為輸出
LDA #$00
STA $00 初始化PA2、PA3、PA4為0
LDA #$85 $85=10000101為RCL指令
STA $81 將RCL指令送至待發(fā)送地址
JSR CEHI 調(diào)用置CE為高子程序
JSR OUTB 調(diào)用輸出8bit子程序
JSR CELO 調(diào)用置CE為低子程序
LDA #$82 $82=10000010為ENAS指令
STA $81 將ENAS指令送至待發(fā)送地址
JSR CEHI 調(diào)用置CE為高子程序
JSR OUTB 調(diào)用輸出8bit子程序
JSR CELO 調(diào)用置CE為低子程序
……
CEHI:BSET 2,$00 置CE(PA2)為高
RTS
OUTB:LDA #$08 準備移出8個bit
STA $84 將8送至計數(shù)器
BCC IS0 C=0轉(zhuǎn)移至IS0
BSET 4,$00 送1至DI/O(PA4)
BRA IS1 跳轉(zhuǎn)至IS1
IS0:BCLR 4,$00 送0至DI/O(PA4)
IS1:JSR CLOCK 調(diào)用時鐘信號子程序
DEC $84 計數(shù)器減1
BNE LOOP 計數(shù)器內(nèi)容≠0跳轉(zhuǎn)
RTS 計數(shù)器內(nèi)容=0結(jié)束
CELO:BCLR 4,$00 將DI/O(PA4)拉低
BCLR 2,$00 置CE(PA2)為低
RTS
CLOCK:BSET 3,$00 置SK(PA3)為高
BCLR 3,$00 置SK(PA3)為低
RTS
限于篇幅,CPU對X24C45其它操作的軟件編程不再贅述。按照上述硬件、軟件的設(shè)計思想,已將X24C45成功地應(yīng)用在電話計費器的設(shè)計中。