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