閃速存儲器(Flash Memory)以其集成度高、制造成本低、使用方便等諸多優(yōu)點廣泛地應用于辦公設備、通信設備、醫(yī)療設備、家用電器等領域。利用其信息非易失性和可以在線更新數(shù)據(jù)參數(shù)特性,可將其作為具有一定靈活性的只讀存儲器使用。
在單片機應用系統(tǒng)中,經(jīng)常遇到大容量的數(shù)據(jù)存儲問題。閃速存儲器由于容量大、存儲速度快、體積小、功耗低等諸多優(yōu)點,而成為應用系統(tǒng)中數(shù)據(jù)存儲器的首選。但是,由于單片機的資源有限,而閃速存儲器的種類和工作方式又千差萬別,因而在單片機與閃速存儲器的接口電路和程序設計中,有許多關鍵技術問題需要解決。
單片機與閃速存儲器的接口電路應注意的問題有:
(1)很多單片機的工作電壓為+5V,而很多閃速存儲器卻工作在1.8~6V之間,有些閃速存儲器(Flash Memory)的擦除電壓又工作在12V。
(2)8位的單片機很多,而閃速存儲器很多是16位的。
(3)同一型號的閃速存儲器由于廠家不同,引腳的定義是不一樣的,例如Intel公司的28F008BV與AMD公司的29LV008有很多引腳是不一樣的。
單片機與閃速存儲器的程序設計應注意的問題有:
(1)不同廠家的閃速存儲器使用不同的操作命令集,軟件要根據(jù)不同廠家的閃速存儲器使用不同的操作命令集。
(2)很多閃速存儲器內部存儲結構和時間參數(shù)是不同的。由于閃速存儲器內部都是分成不同大小存儲塊,在對閃速存儲器進行擦除操作時,軟件要根據(jù)不同型號的閃速存儲器調整被擦除存儲塊的大小等參數(shù)。同時,由于不同型號的閃速存儲器時間參數(shù)是不同,軟件要根據(jù)閃速存儲器的時間參數(shù)來調整讀寫和擦除操作的時間。
針對上面遇到的問題,我們從硬件和軟件兩個方面來考慮單片機與閃速存儲器應用系統(tǒng)中應解決的關鍵技術問題。
1 單片機與閃速存儲器硬件接口的關鍵技術
生產(chǎn)閃速存儲器的半導體公司主要有美國的Intel、AMD公司和日本的Sharp、Fujitsu公司,這四家公司生產(chǎn)的閃速存儲器的市場占有份額相當大。表1列出了四家公司生產(chǎn)的主要型號的閃速存儲器的性能指標。
從表1中可以看出,不同廠家的閃速存儲器的工作電壓和編程擦除電壓是不一樣的,同時數(shù)據(jù)位的長度也是不一樣的。由于目前國內應用最廣泛的單片機仍然是8位的MCS-51系列單片機,16位的單片機種類比較少,而且工作電壓在低電壓(2.7~3.6V)的單片機又是寥寥無幾。能否用市場上常見的普通8位單片機來設計一個與大多數(shù)閃速存儲器接口的電路呢?答案是肯定的。我們用普通的8位單片機AT89C52設計了一個與閃速存儲器TE28F160B3的接口電路,AT89C52是ATMEL公司生產(chǎn)的與MCS-51系列單片機兼容的8位單片機,它內部有一個16K 的E2PROM程序存儲器,它的工作電壓是5V。TE28F160B3是INTEL公司生產(chǎn)的容量為16M位、數(shù)據(jù)總線寬度為16位的閃存存儲器,它的工作電壓為2.7~3.6V。需要指出的是,雖然TE28F160B3的工作電壓為2.7~3.6V,但是其各引腳的最大工作電壓范圍卻在-0.5V~5.0V,各引腳高電平最高工作電壓不能超過5.5V,這樣就使得我們可以使用AT89C52來設計與TE28F160B3的接口電路。該接口電路如圖1所示。
由于AT89C52是8位單片機,而TE28F160B3是16位數(shù)據(jù)總線,我們使用了兩片74HC244和兩片74HC373來完成8位和16位的數(shù)據(jù)轉換。當AT89C52往TE28F160B3寫數(shù)據(jù)時,首先單片機將高8位數(shù)據(jù)寫入到鎖存器74HC373-1中。其中74HC373-1鎖存信號W373由譯碼器GAL16V8輸出,然后單片機開始執(zhí)行對TE28F160B3寫數(shù)據(jù)操作,低8位數(shù)據(jù)由AT89C52的P0口直接寫入TE28F160B3,而鎖存在74HC373-1中的高8位數(shù)據(jù)通過緩沖器74HC244-1寫入到TE28F160B3的DQ8~DQ15總線上。當AT89C52從TE28F160B3讀數(shù)據(jù)時,讀出的高8位數(shù)據(jù)先鎖存到74HC373-2上,然后通過緩沖器74HC244-2讀入到AT89C52中。TE28F160B3的存儲容量為16M位,有20根地址線A0~A19,而AT89C52一共才有16根地址線。因此利用AT89C52的地址線A15、A14和A13經(jīng)譯碼作為兩片74HC244、兩片74HC373和TE28F160B3的鎖存信號和片選信號。這樣地址線只剩下A0~A12,為此利用一片計數(shù)器74HC4040作為地址線A13~A19,從而就解決了AT89C52的尋址問題。
TE28F160B3的供電電源Vcc與AT89C52一樣,均接+5V直流電源。但是TE28F160B3的編程電壓和擦除電壓Vpp必須接+12V。
圖1的單片機使用了市場上常見的AT89C52,但在設計中我們推薦使用寬電壓范圍工作的單片機AT89LV52和地址譯碼器ATF16LV8,這樣就可以使用+3V左右的供電電源。
在生產(chǎn)閃速存儲器的半導體公司Intel、AMD、Sharp和Fujitsu中,Intel和Sharp公司的閃速存儲器的引腳是一樣的,AMD和Fujitsu公司的閃存存儲器的引腳是一樣的。所以Intel和AMD公司的閃速存儲器是不能互換的,如果要互換必須經(jīng)過一個接口板進行轉接。
2 單片機與閃速存儲器程序設計的關鍵技術
由于生產(chǎn)閃速存儲器的半導體公司眾多,即使是同一公司的閃速存儲器也是型號眾多、千差萬別。為使程序設計盡可能地適用于大多數(shù)的閃速存儲器,需注意以下幾個關鍵技術。
2.1 器件自動識別
器件自動識別要識別出器件使用的命令集、內部陣列結構參數(shù)、電氣和時間參數(shù)及器件所支持的功能。器件自動識別的方法有兩種:如果閃速存儲器支持CFI功能,可以直接通過CFI獲得器件的各種參數(shù);如果閃速存儲器不支持CFI功能,可以寫器件識別命令,然后從器件中讀取產(chǎn)品的生產(chǎn)廠家和器件代碼,根據(jù)生產(chǎn)廠家和器件代碼從程序中建立的器件參數(shù)表中讀取器件的各種參數(shù)。器件自動識別的流程圖如圖2所示。
正確識別器件之后,就可以根據(jù)器件的命令集對器件進行各種操作。對閃速存儲器的所有操作都是通過芯片的命令用戶接口CUI實現(xiàn)的。通過CUI寫入不同的控制命令,閃速存儲器就從一個工作狀態(tài)轉移到另一個工作狀態(tài)。其主要的工作狀態(tài)是:讀存儲單元操作、擦除操作和編程操作。
2.2 讀存儲單元操作
在閃速存儲器芯片上電以后,芯片就處于讀存儲單元狀態(tài),也可以通過寫入復位命令進入讀存儲單元狀態(tài),讀存儲單元的操作與SRAM相同。
2.3 擦除操作
在對閃速存儲器芯片編程操作前,必須保證存儲單元為空。如果不空,必須對閃速存儲器芯片進行擦除操作。由于閃速存儲器采用模塊分區(qū)的陣列結構,使得各個存儲模塊可以被獨立地擦除。當給出的地址是在模塊地址范圍之內且向命令用戶接口寫入模塊擦除命令時,相應的模塊就被擦除。要保證擦除操作的正確完成,必須考慮以下幾個參數(shù):(1)該閃速存儲器芯片的內部模塊分區(qū)結構。(2)擦除電壓Vpp。(3)整片擦除時間和每個模塊分區(qū)的擦除時間參數(shù)。上面三個參數(shù)在器件識別中獲得。
2.4 編程操作
閃速存儲器芯片的編程操作是自動字節(jié)編程,既可以順序寫入,也可指定地址寫入。編程操作時注意芯片的編程電壓Vpp和編程時間參數(shù),這兩個參數(shù)也可以在器件識別中獲得。
上面,我們給出了單片機與閃速存儲器硬件接口電路和軟件編程設計中應注意的關鍵技術問題。硬件上主要考慮芯片的工作電壓和編程電壓,軟件上要考慮到器件的內部結構、使用命令集和時間參數(shù)等因素。隨著閃速存儲器器件朝著容量越來越大、工作電壓越來越低、支持共同的接口標準的方向發(fā)展,將會使閃速存儲器硬件接口和軟件編程設計越來越容易,也會使閃速存儲器的應用更加廣泛。