摘? 要: 介紹了一種設計思想獨特的非易失性" title="非易失性">非易失性存儲器X24C45,其特點是能滿足頻繁更新數據和快速存取數據的需求。強調了在硬件設計時應特別注意的問題,給出了有關該芯片操作的編程實例。
關鍵詞: 非易失性存儲器? 自動存儲? 單片機
?
在智能化電子產品的設計過程中,經常會遇到一些重要數據的非易失性保存問題。早期普遍采用的是電池維持RAM供電以實現整機掉電后的數據保存。但這樣做會由于電池本身的原因,如電池的使用壽命相對較短及某些惡劣環境(高濕高溫等)導致電池失效,而引起數據丟失的情況出現。同時電池體積相對較大,會嚴重限制某些電子產品的微型化設計。
目前非易失性的數據保存方法多采用EEPROM。但EEPROM也有其弱點,一是擦寫次數有限(多為10萬次),二是寫入速度慢,這樣就限制了其在許多需要頻繁更新數據且需高速傳輸數據場合中的應用。
本文介紹的存儲器芯片X24C45,可以較好地解決上述非易失性數據存儲過程中遇到的難題。
1 X24C45的功能特點
X24C45是Xicor公司開發的一種設計思想獨特的非易失性存儲器。這種器件將RAM和EEPROM制作在同一塊芯片上,RAM存儲陣列(16×16)的各個bit與EEPROM存儲陣列的各個bit一一對應,通過軟件指令或外部輸入能夠使數據在兩個存儲陣列之間相互傳送。其中的RAM存儲陣列正常工作時能實現數據與外部芯片的隨機存取功能,這樣可保證該芯片適合數據快速存取的場合;而在電源電壓" title="電源電壓">電源電壓降至閾值電壓" title="閾值電壓">閾值電壓時,該芯片能自動將RAM中的當前數據傳輸至EEPROM中,這樣就保證了掉電時的數據非易失性保存。掉電情況在絕大多數系統中都不會頻繁出現,故對EEPROM的擦寫次數相應地不會太多。而X24C45中EEPROM的擦寫次數又高達100萬次,可見X24C45完全能勝任在數據頻繁更新的場合實現非易失性存儲的任務。
X24C45的引腳圖如圖1所示。
?
?
腳1為片選端,當該腳為高時片選有效,當該腳為低時芯片處于低功耗待機狀態,且X24C45中的指令寄存器被復位;腳2為串行時鐘端;腳3為串行數據輸入;腳4為串行數據輸出;腳5為接地端;腳8為電源端;腳7為漏極開路輸出,當電源電壓降至低于自動存儲閾值電壓VASTH(VASTH在4.0V~4.3V范圍)時,腳7為低,對外部電路發出一個掉電報警或掉電復位信號,可見該芯片同時具有電源監視功能。腳6輸入一個低電平時,將會執行由EEPROM將數據傳輸到RAM的操作。
2 X24C45的指令集及工作時序
X24C45的各種功能主要是由軟件來實現的。CPU通過DI端口向X24C45中的指令寄存器傳送一個指令,以實現某個功能。其指令集如表1所示。
?
?
由表1可見,所有指令的最高位都為“1”。所以在片選信號CE為高有效時,DI口由低電平跳變出一個時鐘周期的高電平,表明開始輸入一個指令,其工作時序如圖2所示。
?
?
由RAM將數據存入EEPROM的操作條件限制較嚴格,為的是防止對EEPROM的意外寫操作(因為EEPROM的擦寫次數有限,不必要的寫操作應避免)。所以該存儲功能的實現,必須滿足以下三個條件同時成立:接收到STO指令;接收到WREN指令;接收到RCL指令或腳6電平被拉低。在將EEPROM的數據送回到RAM中的同時,應使X24C45內部的“前次數據恢復”鎖存器置位。另外需要說明的是,在將RAM中的數據存入EEPROM的操作過程中,X24C45的其它所有功能都被禁止。
ENAS指令將X24C45內部的“自動存儲使能” 鎖存器置位,從而允許在電源電壓降至低于自動存儲閾值電壓VASTH時,自動執行將RAM中的數據存入EEPROM的操作。
為了少占用CPU的I/O" title="I/O">I/O端口,X24C45的DI腳和DO腳通常連接到CPU的同一個I/O口(如圖1所示)。READ指令將RAM中AAAA地址的數據讀出,該指令的最低位為無關位,這樣正好允許在READ指令的第八個時鐘周期內將I/O口由輸出轉換為輸入。RAM的讀操作時序如圖3所示。
?
?
WRITE指令將數據寫入RAM的AAAA地址中,其時序如圖4所示。需要說明的是,RAM中的每個地址存儲16bit數據。
3 X24C45應用時需注意的問題
X24C45實際應用時與CPU的連接如圖1所示。前面已經提到為節省CPU的I/O端口,可以將DI腳和DO腳連接到CPU的同一個I/O口(PA4)。
在此要特別強調的是,電容C和二極管D本來是沒有加上去的,X24C45芯片手冊中也沒有這樣的說明。但在實際應用中筆者發現,在沒有加上電容C和二極管D的情況下,X24C45會出現掉電時備份數據出錯的現象。究其原因,是因為在X24C45中將當前數據由RAM存儲到EEPROM時需要一定的時間(該時間典型數值為2ms,最長可達5ms),而且啟動自動存儲的閾值電壓在4.0V~4.3V之間,數據由RAM存儲到EEPROM所需要的最低電源電壓為3.5V,掉電后電源電壓由閾值電壓下降到3.5V所需的時間,會由于各個電路中的電源電路和負載的不同而不同。顯然,掉電后電源電壓由閾值電壓下降到3.5V所需的時間如果少于數據由RAM存儲到EEPROM所需的時間,就會出現一部分數據因不能被及時備份而丟失的問題,而這種問題的出現如果不采取相應的措施是不可能被避免的。圖1中的電容C和二極管D可以保證掉電后X24C45電源端的電壓由閾值電壓下降到3.5V所需的時間足夠長,從而杜絕掉電時備份數據出錯的情況。
4 X24C45相關操作的軟件實現
X24C45與MC68HC05C4單片機的硬件連接如圖1所示。下面給出與其對應的有關X24C45的前次數據恢復到RAM和自動存儲功能使能設置等操作的軟件編程。
SAMP: LDA????? #$1C????? $1C=00011100???
?????? STA????? $04?????? 設置PA2、PA3、PA4為輸出?
?????? LDA? ??? #$00?
?????? STA ???? $00?????? 初始化PA2、PA3、PA4為0?
?????? LDA? ??? #$85????? $85=10000101為RCL指令?
?????? STA????? $81?????? 將RCL指令送至待發送地址 ??????????
?????? JSR? ??? CEHI????? 調用置CE為高子程序
?????? JSR?? ?? OUTB????? 調用輸出8bit子程序" title="子程序">子程序???
?????? JSR? ??? CELO????? 調用置CE為低子程序
?????? LDA????? #$82????? $82=10000010為ENAS指令
?????? STA????? $81 ????? 將ENAS指令送至待發送地址? ????????
?????? JSR ???? CEHI????? 調用置CE為高子程序
?????? JSR????? OUTB????? 調用輸出8bit子程序
?????? JSR????? CELO????? 調用置CE為低子程序
?????? ……
CEHI: BSET? ?? 2,$00????置CE(PA2)為高??????????
?????? RTS
OUTB: LDA??????#$08??????準備移出8個bit
?????? STA??????$84???????將8送至計數器
LOOP:?ROL???? ?$81???????待發送內容循環左移
?????? BCC? ??? IS0?????? C=0轉移至IS0
?????? BSET? ? 4,$00?????送1至DI/O(PA4)?
?????? BRA? ??? IS1?????? 跳轉至IS1
IS0:??BCLR? ? 4,$00???? 送0至DI/O(PA4)?
IS1:? JSR????? CLOCK???? 調用時鐘信號子程序
?????? DEC? ??? $84?????? 計數器減1
?????? BNE? ??? LOOP????? 計數器內容≠0跳轉
?????? RTS??????????????? 計數器內容=0結束
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其它操作的軟件編程不再贅述。按照上述硬件、軟件的設計思想,已將X24C45成功地應用在電話計費器的設計中。
?
參考文獻
1 涂時亮. MC68HC05單片機原理、應用及技術手冊. 上海:復旦大學出版社,1991
2 http://www.xicor.com