<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 閃速內(nèi)存硬件接口和程序設(shè)計(jì)中的關(guān)鍵技術(shù)

          閃速內(nèi)存硬件接口和程序設(shè)計(jì)中的關(guān)鍵技術(shù)

          作者: 時(shí)間:2012-03-23 來源:網(wǎng)絡(luò) 收藏

          摘 要: 介紹了閃速的使用方法,并給出了單片機(jī)與閃速中應(yīng)注意的

          本文引用地址:http://www.ex-cimer.com/article/149355.htm

          詞: 單片機(jī) 閃速 公共閃存CFI

          閃速內(nèi)存(Flash Memory)以其集成度高、制造成本低、使用方便等諸多優(yōu)點(diǎn)廣泛地應(yīng)用于辦公設(shè)備、通信設(shè)備、醫(yī)療設(shè)備、家用電器等領(lǐng)域。利用其信息非易失性和可以在線更新資料參數(shù)特性,可將其作為具有一定靈活性的只讀存儲(chǔ)器使用。

          在單片機(jī)應(yīng)用系統(tǒng)中,經(jīng)常遇到大容量的資料存儲(chǔ)問題。閃速內(nèi)存由于容量大、存儲(chǔ)速度快、體積小、功耗低等諸多優(yōu)點(diǎn),而成為應(yīng)用系統(tǒng)中數(shù)據(jù)存儲(chǔ)器的首選。但是,由于單片機(jī)的資源有限,而閃速內(nèi)存的種類和工作方式又千差萬別,因而在單片機(jī)與閃速內(nèi)存的電路和中,有許多問題需要解決。

          單片機(jī)與閃速內(nèi)存的接口電路應(yīng)注意的問題有:

          (1)很多單片機(jī)的工作電壓為+5V,而很多閃速內(nèi)存卻工作在1.8~6V之間,有些閃速內(nèi)存(Flash Memory)的擦除電壓又工作在12V。

          (2)8位的單片機(jī)很多,而閃速內(nèi)存很多是16位的。

          (3)同一型號(hào)的閃速內(nèi)存由于廠家不同,引腳的定義是不一樣的,例如Intel公司的28Foo8BV與AMD公司的29LV008有很多引腳是不一樣的。

          單片機(jī)與閃速內(nèi)存的應(yīng)注意的問題有:

          (1)不同廠家的閃速內(nèi)存使用不同的操作命令集,軟件要根據(jù)不同廠家的閃速內(nèi)存使用不同的操作命令集。

          (2)很多閃速內(nèi)存內(nèi)部存儲(chǔ)結(jié)構(gòu)和時(shí)間參數(shù)是不同的。由于閃速內(nèi)存內(nèi)部都是分成不同大小存儲(chǔ)塊,在對(duì)閃速內(nèi)存進(jìn)行擦除操作時(shí),軟件要根據(jù)不同型號(hào)的閃速內(nèi)存調(diào)整被擦除存儲(chǔ)塊的大小等參數(shù)。同時(shí),由于不同型號(hào)的閃速內(nèi)存間參數(shù)是不同,軟件要根據(jù)閃速內(nèi)存的時(shí)間參數(shù)來調(diào)整讀寫和擦除操作的時(shí)間。

          針對(duì)上面遇到的問題,我們從和軟件兩個(gè)方面來考慮單片機(jī)與閃速內(nèi)存應(yīng)用系統(tǒng)中應(yīng)解決的關(guān)鍵問題。

          1 單片機(jī)與閃速內(nèi)存接口的關(guān)鍵技術(shù)

          生產(chǎn)閃速內(nèi)存的半導(dǎo)體公司主要有美國的Intel、AMD公司和日本的Sharp、Fujitsu公司,這四家公司生產(chǎn)的閃速內(nèi)存的市場占有份額相當(dāng)大。表1列出了四家公司生產(chǎn)的主要型號(hào)的閃速內(nèi)存的性能指針。

          從表1中可以看出,不同廠家的閃速內(nèi)存的工作電壓和編程擦除電壓是不一樣的,同時(shí)資料位的長度也是不一樣的。由于目前國內(nèi)應(yīng)用最廣泛的單片機(jī)仍然是8位的MCS-51系列單片機(jī),16位的單片機(jī)種模擬較少,而且工作電壓在低電壓(2.7~3.6V)的單片機(jī)又是寥寥無幾。能否用市場上常見的普通8位單片機(jī)來設(shè)計(jì)一個(gè)與大多數(shù)閃速內(nèi)存接口的電路呢?答案是肯定的。我們用普通的8位單片機(jī)AT89C52設(shè)計(jì)了一個(gè)與閃速內(nèi)存TE28F160B3的接口電路,AT89C52是ATMEL公司生產(chǎn)的與MCS-51系列單片機(jī)兼容的8位單片機(jī),它內(nèi)部有一個(gè)16K 的E2PROM程序內(nèi)存,它的工作電壓是5V。TE28F160B3是INTEL公司生產(chǎn)的容量為16M位、數(shù)據(jù)總線寬度為16位的閃存內(nèi)存,它的工作電壓為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位的資料轉(zhuǎn)換。當(dāng)AT89C52往TE28F160B3寫資料時(shí),首先單片機(jī)將高8位資料寫入到鎖存器74HC373-1中。其中74HC373-1鎖存信號(hào)W373由譯碼器GAL16V8輸出,然后單片機(jī)開始執(zhí)行對(duì)TE28F160B3寫資料操作,低8位資料由AT89C52的P0口直接寫入TE28F160B3,而鎖存在74HC373-1中的高8位資料通過緩沖器74HC244-1寫入到TE28F160B3的DQ8~DQ15總線上。當(dāng)AT89C52從TE28F160B3讀數(shù)據(jù)時(shí),讀出的高8位資料先鎖存到74HC373-2上,然后通過緩沖器74HC224-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ù)器4HC4040作為地址線A13~A19,從而就解決了AT89C52的尋址問題。

          TE28F160B3的供電電源Vcc與AT89C52一樣,均接+5V直流電源。但是TE28F160B3的編程電壓和擦除電壓Vpp必須接+12V。

          圖1的單片機(jī)使用了市場上常見的AT89C52,但在設(shè)計(jì)中我們推薦使用寬電壓范圍工作的單片機(jī)AT89LV52和地址譯碼器ATF16LV8,這樣就可以使用+3V左右的供電電源。

          在生產(chǎn)閃速內(nèi)存的半導(dǎo)體公司Intel、AMD、Sharp和Fujitsu中,Intel和Sharp公司的閃速內(nèi)存的引腳是一樣的,AMD和Fujitsu公司的閃存內(nèi)存的引腳是一樣的。所以Intel和AMD公司的閃速內(nèi)存是不能互換的,如果要互換必須經(jīng)過一個(gè)接口板進(jìn)行轉(zhuǎn)接。

          2 單片機(jī)與閃速內(nèi)存程序設(shè)計(jì)的關(guān)鍵技術(shù)

          由于生產(chǎn)閃速內(nèi)存的半導(dǎo)體公司眾多,即使是同一公司的閃速內(nèi)存也是型號(hào)眾多、千差萬別。為使程序設(shè)計(jì)盡可能地適用于大多數(shù)的閃速內(nèi)存,需注意以下幾個(gè)關(guān)鍵技術(shù)。

          2.1器件自動(dòng)識(shí)別

          器件自動(dòng)識(shí)別要識(shí)別出器件使用的命令集、內(nèi)部數(shù)組結(jié)構(gòu)參數(shù)、電氣和時(shí)間參數(shù)及器件所支持的功能。器件自動(dòng)識(shí)別的方法有兩種:如果閃速內(nèi)存支持CFI功能,可以直接通過CFI獲得器件的各種參數(shù);如果閃速內(nèi)存不支持CFI功能,可以寫器件識(shí)別命令,然后從器件中讀取產(chǎn)品的生產(chǎn)廠家和器件代碼,根據(jù)生產(chǎn)廠家和器件代碼從程序中建立的器件參數(shù)表中讀取器件的各種參數(shù)。器件自動(dòng)識(shí)別的流程圖如圖2所示。

          正確識(shí)別器件之后,就可以根據(jù)器件的命令集對(duì)器件進(jìn)行各種操作。對(duì)閃速內(nèi)存的所有操作都是通過芯片的命令用戶接口CUI實(shí)現(xiàn)的。通過CUI寫入不同的控制命令,閃速內(nèi)存就從一個(gè)工作狀態(tài)轉(zhuǎn)移到另一個(gè)工作狀態(tài)。其主要的工作狀態(tài)是:讀存儲(chǔ)單元操作、擦除操作和編程操作。

          2.2 讀存儲(chǔ)單元操作
          在閃速內(nèi)存芯片上電以后,芯片就處于讀存儲(chǔ)單元狀態(tài),也可以通過寫入復(fù)位命令進(jìn)入讀存儲(chǔ)單元狀態(tài),讀存儲(chǔ)單元的操作與SRAM相同。

          2.3 擦除操作
          在對(duì)閃速內(nèi)存芯片編程操作前,必須保證存儲(chǔ)單元為空。如果不空,必須對(duì)閃速內(nèi)存芯片進(jìn)行擦除操作。由于閃速內(nèi)存采用模塊分區(qū)的數(shù)組結(jié)構(gòu), 使得各個(gè)存儲(chǔ)模塊可以被獨(dú)立地擦除。當(dāng)給出的地址是在模塊地址范圍之內(nèi)且向命令用戶接口寫入模塊擦除命令時(shí),相應(yīng)的模塊就被擦除。要保證擦除操作的正確完成,必須考慮以下幾個(gè)參數(shù):(1)該閃速內(nèi)存芯片的內(nèi)部模塊分區(qū)結(jié)構(gòu)。(2)擦除電壓Vpp。(3)整片擦除時(shí)間和每個(gè)模塊分區(qū)的擦除時(shí)間參數(shù)。上面三個(gè)參數(shù)在器件識(shí)別中獲得。

          2.4 編程操作
          閃速內(nèi)存芯片的編程操作是自動(dòng)字節(jié)編程,既可以順序?qū)懭?,也可指定地址寫入。編程操作時(shí)注意芯片的編程電壓Vpp和編程時(shí)間參數(shù),這兩個(gè)參數(shù)也可以在器件識(shí)別中獲得。

          上面,我們給出了單片機(jī)與閃速內(nèi)存接口電路和軟件編程設(shè)計(jì)中應(yīng)注意的關(guān)鍵技術(shù)問題。硬件上主要考慮芯片的工作電壓和編程電壓,軟件上要考慮到器件的內(nèi)部結(jié)構(gòu)、使用命令集和時(shí)間參數(shù)等因素。隨著閃速內(nèi)存器件朝著容量越來越大、工作電壓越來越低、支持共同的接口標(biāo)準(zhǔn)的方向發(fā)展,將會(huì)使閃速內(nèi)存硬件接口和軟件編程設(shè)計(jì)越來越容易,也會(huì)使閃速內(nèi)存的應(yīng)用更加廣泛。

          參考文獻(xiàn)
          1 Intel Products CD-ROM. Intel公司,1998.5
          2 何立民. MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)-系統(tǒng)配
          置與接口技術(shù).北京:北京航空航天大學(xué)出版社1990
          3 竇振中.單片機(jī)外圍器件實(shí)用手冊-內(nèi)存分冊.北京:
          北京航空航天大學(xué)出版社1998



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();