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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 閃速存儲(chǔ)器AT29C040與單片機(jī)的接口設(shè)計(jì)

          閃速存儲(chǔ)器AT29C040與單片機(jī)的接口設(shè)計(jì)

          作者: 時(shí)間:2013-10-16 來源:網(wǎng)絡(luò) 收藏
          1 引言

          自1984年第一塊問世以來,就以其EPROM的可編程能力和EEPROM的電可擦除性能,以及在線電可改寫特性而得到了廣泛的應(yīng)用和發(fā)展。隨著制造工藝和材料的改進(jìn),比EPROM和EEPROM、SRAM及DRAM等存儲(chǔ)器的優(yōu)勢(shì)越來越明顯。

          Atmel公司于1998年推出了新一代大容量快閃存儲(chǔ)器,由于它采用了Fowler-Nordheim隧道效應(yīng)技術(shù),使編程電流比第一代閃存降低了一個(gè)數(shù)量級(jí)。該芯片只需要+5V電源并支持分頁編程,此外,還具有硬件數(shù)據(jù)保護(hù)、軟件數(shù)據(jù)保護(hù)、數(shù)據(jù)查詢和自舉模塊等其他功能。根據(jù)筆者的使用情況,本文對(duì)閃速存儲(chǔ)器的結(jié)構(gòu)特點(diǎn)、使用方法等作了簡要介紹,并以筆者開發(fā)的某測(cè)試儀器為例說明的接口及使用方法。

          2 芯片簡介

          2.1 芯片的結(jié)構(gòu)與特點(diǎn)

          AT29C040的結(jié)構(gòu)類似于SRAM,它有8條數(shù)據(jù)線(D0~D7)、19條地址線(A0~A18)、3條控制線(/OE、/CE、/WE)以及電源、地線共32個(gè)引腳,具體引腳分布如圖所示。

          AT29C040閃速存儲(chǔ)器有如下幾個(gè)特點(diǎn):

          (1)用5V單一電源供電,讀、寫操作使用同一電源,省去了一個(gè)12V的編程電源VPP ;

          (2)編程前不需要附加的擦除操作,在編程期間,擦除操作會(huì)在芯片內(nèi)部自動(dòng)進(jìn)行;

          (3)在單個(gè)編程周期內(nèi),每次寫一個(gè)扇區(qū)的數(shù)據(jù),大大縮短了編程時(shí)間。AT29C040的扇區(qū)編程時(shí)間為10ms,而其他扇區(qū)的編程時(shí)間為數(shù)百 ms;

          (4)扇區(qū)容量小,減少了寫數(shù)據(jù)時(shí)對(duì)系統(tǒng)內(nèi)存資源的要求;

          (5)軟件數(shù)據(jù)保護(hù)SDP(Software Data Protect)功能。為了避免人為疏忽或者系統(tǒng)上電、掉電等因素引起對(duì)閃速存儲(chǔ)器的誤寫操作, AT29C040設(shè)置了軟件數(shù)據(jù)保護(hù)功能。其原理是對(duì)閃速存儲(chǔ)器寫操作前,必須按一定順序送入三個(gè)字節(jié)的命令碼,然后才能寫入數(shù)據(jù),否則數(shù)據(jù)不能被寫入。

          2.2 芯片操作

          2.2.1 讀寫操作

          對(duì)AT29C040的讀操作非常簡單,類似于SRAM,不再贅述。這里主要討論一下對(duì)它進(jìn)行寫操作的方法。首先在系統(tǒng)RAM區(qū)為AT29C040產(chǎn)生一個(gè)扇區(qū)的數(shù)據(jù)映像,即先將待寫入的數(shù)據(jù)放入 RAM中,接著送三字節(jié)的命令碼到AT29C040中;然后將事先放在RAM中的數(shù)據(jù)傳送到AT29C040指定的扇區(qū)中;最后還要等待閃速存儲(chǔ)器的寫周期時(shí)間(10ms),以便將數(shù)據(jù)寫入存儲(chǔ)器中。其“寫” 操作時(shí)序如圖所示。

          2.2.2 數(shù)據(jù)輪詢

          在編程周期期間,如果讀取最后裝入的字節(jié)將使I/O7上出現(xiàn)所裝入數(shù)據(jù)的補(bǔ)碼,一旦編程周期結(jié)束,所有輸出線上的真數(shù)據(jù)有效,可以開始下一個(gè)編程周期。數(shù)據(jù)輪詢可以在編程周期的任何時(shí)刻開始,數(shù)據(jù)輪詢時(shí)序如圖3所示。圖中,各時(shí)間參數(shù)的含義分別是:tDH是數(shù)據(jù)保持時(shí)間; tOEH是OE信號(hào)保持時(shí)間;tWR 是寫信號(hào)恢復(fù)時(shí)間。

          2.3 軟件數(shù)據(jù)保護(hù)

          軟件數(shù)據(jù)保護(hù)是通過一連串地向2個(gè)特殊地址寫入3個(gè)特殊數(shù)據(jù)來完成的。關(guān)閉軟件數(shù)據(jù)保護(hù)也是通過一連串地向2個(gè)特殊地址寫入6個(gè)特殊數(shù)據(jù)來完成。如果不執(zhí)行這樣的操作,對(duì)29C040的訪問將不能正常進(jìn)行。該軟件保護(hù)算法可由用戶開啟或關(guān)閉。圖4和圖5分別是是軟件保護(hù)和關(guān)閉軟件保護(hù)的流程圖。

          有關(guān)29C040芯片其他特性以及一些相關(guān)參數(shù)在其芯片手冊(cè)里有很詳細(xì)的說明,這里不再描述,下面就其應(yīng)用作一介紹。

          3 與的接口

          3.1 硬件設(shè)計(jì)

          AT29C040和微處理器接口很簡便,和我們經(jīng)常擴(kuò)展的數(shù)據(jù)存儲(chǔ)器基本相似。稍微有所不同的是,由于它相當(dāng)于8個(gè)普通的64k字節(jié)空間的 RAM,所以地址最高3位分別由3根處理器地址線來控制,訪問的范圍是0 0000~7 FFFF。接口如圖。

          在硬件設(shè)計(jì)中,筆者使用的微處理器是80C51。由于擴(kuò)展的芯片較多,在各器件的片選時(shí),沒有使用138譯碼器,而是采用了一個(gè)可編程邏輯器件(PLD)。在圖6中,選中29C040時(shí), P13,P14的狀態(tài)是00,選中ROM和RAM則分別是01和10(為簡單起見,假設(shè)擴(kuò)展芯片僅是以上幾個(gè))。

          3.2 軟件設(shè)計(jì)

          在掌握了該芯片的主要特性之后,對(duì)它的使用就比較簡單了。下面我們提供了16進(jìn)制數(shù)0X45寫到29C040里的C語言程序。

          #include

          #include

          void delay(unsigned int l_time);

          void protect();

          void select_segment(unsigned char seg);

          unsigned char data cdat;

          void write_data(unsigned int m_addr,unsigned int s_sector,unsigned int acount);

          {

          unsigned int data addraa,addrbb; /* addraa 為內(nèi)存地址,addrbb 為29C020地址 */

          unsigned int data i,j;

          bit data flaga;

          flaga=EA;

          EA=0;

          addraa=m_addr;

          addrbb=s_sector*256;

          for(j=acount;j>0;j--)

          {

          protect();

          for(i=0;i256;i++)

          {

          P14=0;P13=1;

          cdat=XBYTE[addraa];

          select_segment(s_sector/256);

          /*s_sector 是256的整數(shù)倍*/

          XBYTE[addrbb]=cdat;

          P14=0;P13=1;

          addraa++;

          addrbb++;


          }

          s_sector++;

          delay(1000);

          }


          P14=0;P13=1;

          EA=flaga;

          }

          /* 選擇 29C040 段地址(高位地址),

          seg 為段地址*/

          void select_segment(unsigned char seg)

          {

          switch(seg)

          {

          case 0: P1=0x00;_nop_(); break; /* 29c040 a18a17a16= 000 00000-0ffff */

          case 1: P1=0x01;_nop_(); break; /* 29c040 a18a17a16= 001 10000-1ffff */

          case 2: P1=0x02;_nop_(); break; /* 29c040 a18a17a16= 010 20000-2ffff */

          case 3: P1=0x03;_nop_(); break; /* 29c040 a18a17a16= 011 30000-3ffff */

          case 4: P1=0x04;_nop_(); break; /* 29c040 a18a17a16= 100 40000-4ffff */

          case 5: P1=0x05;_nop_(); break; /* 29c040 a18a17a16= 101 50000-5ffff */

          case 6: P1=0x06;_nop_(); break; /* 29c040 a18a17a16= 110 60000-6ffff */

          case 7: P1=0x07;_nop_(); break; /* 29c040 a18a17a16= 111 70000-7ffff */

          }

          }

          void protect()

          {

          select_segment(0);/*必須寫到第0段*/

          XBYTE[0x5555]=0xaa;

          XBYTE[0x2aaa]=0x55;

          XBYTE[0x5555]=0xa0;

          P14=0;P13=1;

          }

          void delay(unsigned int l_time)/*寫完一個(gè)扇區(qū)后延時(shí)*/

          {

          unsigned int data lp;/* 4ms */

          for(lp=0;lp

          _nop_();

          }

          main()

          {

          unsigned int data i;

          P14=0;P13=1;

          for(i=0;i256;i++)

          {XBYTE[0x0200+i]=0x45;}

          write_data(0x0200,0,1);

          delay(1000);

          while(1);

          }

          4 結(jié)束語

          AT29C040在中的應(yīng)用不僅能使用戶快速地實(shí)現(xiàn)所需功能,而且電擦除的方式為程序和數(shù)據(jù)的存儲(chǔ)和更新提供了方便,隨著閃速存儲(chǔ)器器件朝著容量越來越大、工作電壓越來越低、支持共同的接口標(biāo)準(zhǔn)的方向發(fā)展,閃速存儲(chǔ)器硬件接口和軟件設(shè)計(jì)將越來越容易。


          參考文獻(xiàn):

          [1] 孫涵芳,徐愛卿.MCS51/96系列單片機(jī)原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,1988.

          [2] 余永權(quán).ATMEL FLASH 單片機(jī)原理及應(yīng)用[M].北京:電子工業(yè)出版社,1997.

          [3] 竇振中. 單片機(jī)外圍器件實(shí)用手冊(cè)——存儲(chǔ)器分冊(cè)[M]. 北京:北京航空航天大學(xué)出版社,1998.

          [4] AT29C040數(shù)據(jù)手冊(cè).www.atmel.com.

          [5].AT29C040datasheethttp://www.dzsc.com/datasheet/AT29C040_809355.html.

          [6].EPROMdatasheethttp://www.dzsc.com/datasheet/EPROM_1128137.html.

          [7].80C51datasheethttp://www.dzsc.com/datasheet/80C51_103447.html.

          [8].P13datasheethttp://www.dzsc.com/datasheet/P13_2043489.html.

          [9].29C020datasheethttp://www.dzsc.com/datasheet/29C020_952547.html.

          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理




          評(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); })();