|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于AT29C040A |
| 作者:bighill 欄目:單片機(jī) |
29C040A 是8M的閃存,是以扇區(qū)存儲(chǔ)的,將它用于單片機(jī)擴(kuò)展數(shù)據(jù)存儲(chǔ)器時(shí),是不是一定要加另外的片子,我的意思是,直接來一個(gè)數(shù)據(jù)存一個(gè),行不行? |
| 2樓: | >>參與討論 |
| 作者: hotpower 于 2005/1/7 1:56:00 發(fā)布:
8M/2 |
|
| 3樓: | >>參與討論 |
| 作者: sheepbaa 于 2005/1/7 9:07:00 發(fā)布:
用頁方式寫 可以按字節(jié)方式讀,但只能用頁方式寫, |
|
| 4樓: | >>參與討論 |
| 作者: mabaoqiu 于 2005/1/7 9:20:00 發(fā)布:
不行! |
|
| 5樓: | >>參與討論 |
| 作者: bighill 于 2005/1/7 11:40:00 發(fā)布:
糟了 完了,那不是很摻,扳子都投出去了,怎么辦? 救命啊 |
|
| 6樓: | >>參與討論 |
| 作者: 后學(xué) 于 2005/1/7 11:55:00 發(fā)布:
4M bit = 512 byte |
|
| 7樓: | >>參與討論 |
| 作者: hj_sheng 于 2005/1/7 12:25:00 發(fā)布:
不行 AT29C040是頁寫入的,每頁512字節(jié),更改每頁中的任一字節(jié),其它字節(jié)必須重寫一遍,否則將全部置0xFF,如你用的CPU中RAM夠大也行,先讀出來一頁的內(nèi)容,然后把需要改的數(shù)據(jù)改完,再全部寫進(jìn)云. |
|
| 8樓: | >>參與討論 |
| 作者: bighill 于 2005/1/7 12:34:00 發(fā)布:
說明 AT29C040是4Mbit的,剛開始說錯(cuò)了。每扇區(qū)256個(gè)字節(jié),共有2048個(gè)扇區(qū)。共 2048*256*8=4Mbit. 我的CPU是89C51的。 |
|
| 9樓: | >>參與討論 |
| 作者: bighill 于 2005/1/8 10:04:00 發(fā)布:
還有沒有人發(fā)表點(diǎn)看法? 還有沒有人發(fā)表點(diǎn)看法啊? |
|
| 10樓: | >>參與討論 |
| 作者: dong 于 2005/1/8 10:48:00 發(fā)布:
AT29C040是頁寫入的。 你可以擦除一塊后,逐個(gè)寫入。但不能更改,更改就要整塊擦除重寫。 如果你要逐個(gè)字節(jié)更改,換28c040等。 |
|
| 11樓: | >>參與討論 |
| 作者: longsyz 于 2005/1/8 11:14:00 發(fā)布:
什么價(jià)錢啊,單個(gè),:) |
|
| 12樓: | >>參與討論 |
| 作者: ODQQDO 于 2005/1/8 15:00:00 發(fā)布:
看看是否有幫助。 閃速存儲(chǔ)器AT29C040與單片機(jī)的接口設(shè)計(jì) 張晶,曾憲云 (廣東工業(yè)大學(xué)自動(dòng)化學(xué)院,廣東 廣州510090) 摘要:介紹了ATMEL.html">ATMEL公司的新一代大容量快閃存儲(chǔ)器AT29C040的使用方法,并以筆者開發(fā)的某測(cè)試儀器為例,給出了實(shí)際應(yīng)用的硬件電路及軟件設(shè)計(jì)。 關(guān)鍵詞:快閃存儲(chǔ)器;數(shù)據(jù)輪詢;數(shù)據(jù)保護(hù);單片機(jī)接口 中圖分類號(hào):TP334.7 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1003-353X(2003)05-0075-04 1 引言 自1984年第一塊閃速存儲(chǔ)器問世以來,閃速存儲(chǔ)器就以其EPROM的可編程能力和EEPROM的電可擦除性能,以及在線電可改寫特性而得到了廣泛的應(yīng)用和發(fā)展。隨著制造工藝和材料的改進(jìn),閃速存儲(chǔ)器比EPROM和EEPROM、SRAM及DRAM等存儲(chǔ)器的優(yōu)勢(shì)越來越明顯。 ATMEL.html">ATMEL公司于1998年推出了新一代大容量快閃存儲(chǔ)器AT29C040,由于它采用了Fowler-Nordheim隧道效應(yīng)技術(shù),使編程電流比第一代閃存降低了一個(gè)數(shù)量級(jí)。該芯片只需要+5V電源并支持分頁編程,此外,還具有硬件數(shù)據(jù)保護(hù)、軟件數(shù)據(jù)保護(hù)、數(shù)據(jù)查詢和自舉模塊等其他功能。根據(jù)筆者的使用情況,本文對(duì)AT29C040閃速存儲(chǔ)器的結(jié)構(gòu)特點(diǎn)、使用方法等作了簡(jiǎn)要介紹,并以筆者開發(fā)的某測(cè)試儀器為例說明AT29C040與單片機(jī)的接口及使用方法。 2 芯片簡(jiǎn)介 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的讀操作非常簡(jiǎn)單,類似于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 與單片機(jī)的接口 3.1 硬件設(shè)計(jì) AT29C040和微處理器接口很簡(jiǎn)便,和我們經(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(為簡(jiǎn)單起見,假設(shè)擴(kuò)展芯片僅是以上幾個(gè))。 3.2 軟件設(shè)計(jì) 在掌握了該芯片的主要特性之后,對(duì)它的使用就比較簡(jiǎn)單了。下面我們提供了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;i<256;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;i<256;i++) {XBYTE[0x0200+i]=0x45;} write_data(0x0200,0,1); delay(1000); while(1); } 4 結(jié)束語 AT29C040在單片機(jī)中的應(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. 本文摘自《半導(dǎo)體技術(shù)》 |
|
| 13樓: | >>參與討論 |
| 作者: bighill 于 2005/1/8 18:44:00 發(fā)布:
21上就有 AT29C040A ATMEL 人民幣 30.00 |
|
| 14樓: | >>參與討論 |
| 作者: bighill 于 2005/1/8 18:47:00 發(fā)布:
哦 謝謝各位 上邊的那篇文章我見過 他就是另外擴(kuò)展了個(gè)ram 最好有軟件解決的辦法,因?yàn)榘遄佣家酝冻隽耍視r(shí)間也來不及了 現(xiàn)在還在想辦法 |
|
| 15樓: | >>參與討論 |
| 作者: isoar 于 2005/1/8 19:41:00 發(fā)布:
讀回來要加RAM,怎么都得改板,原來的板只能宣布死亡了。 死因:設(shè)計(jì)失誤 死亡時(shí)間:2005年X月X日X分 |
|
| 16樓: | >>參與討論 |
| 作者: soho 于 2005/1/9 0:36:00 發(fā)布:
換CPU |
|
| 17樓: | >>參與討論 |
| 作者: xwj 于 2005/1/9 2:33:00 發(fā)布:
不加RAM也可以的 先把要修改的頁中不要修改的部分拷入另一頁,在補(bǔ)入要修改的字節(jié) 然后在把這一頁拷回去 或者仿照文件系統(tǒng)修改鏈表也行 |
|
| 18樓: | >>參與討論 |
| 作者: 12864 于 2005/1/9 4:10:00 發(fā)布:
有很多字節(jié)寫入的FLASH,直接替換即可 不過擦除還是按扇區(qū)的 |
|
| 19樓: | >>參與討論 |
| 作者: shixiudong 于 2005/1/9 4:51:00 發(fā)布:
這樣救你的電路板: 這樣救你的電路板: 方法: 換用華邦的單片機(jī)W78E516B。 原理: W78E516B內(nèi)含512字節(jié)RAM, 比一般51單片機(jī)多了256字節(jié)。你就用這多出來的256字節(jié)RAM作為AT29C040A的扇區(qū)修改緩沖區(qū)。這樣,不影響你原來的程序,就使你的電路板正常工作了。 注意: AT29C040A的一個(gè)扇區(qū)256字節(jié),你用如下次序編程: 讀整個(gè)扇區(qū)到單片機(jī)內(nèi)部的扇區(qū)緩沖區(qū)-〉修改你需要的那個(gè)字節(jié)-〉擦除整個(gè)扇區(qū)-〉把256字節(jié)扇區(qū)緩沖區(qū)寫入到AT29C040A中-〉等待扇區(qū)編程完成-〉結(jié)束。 W78E516B內(nèi)部多出來的256字節(jié)RAM,位于MOVX @Ri,A和MOVX A,@Ri空間。 價(jià)格25元人民幣/片左右,華邦的代理商都有貨。 史修棟 MSN: shixiudong@hotmail.com |
|
| 20樓: | >>參與討論 |
| 作者: bighill 于 2005/1/9 19:24:00 發(fā)布:
哦 不加RAM也可以的 先把要修改的頁中不要修改的部分拷入另一頁,在補(bǔ)入要修改的字節(jié) 然后在把這一頁拷回去 補(bǔ)入的數(shù)據(jù)寫在哪呢?現(xiàn)在有個(gè)辦法不知道行不行,把已經(jīng)寫入的數(shù)據(jù)先讀一遍,寫一遍,在把新的數(shù)據(jù)加入,就是在也寫操作時(shí)邊寫邊讀,不知道行不行啊? 或者仿照文件系統(tǒng)修改鏈表也行,這個(gè)我不太清楚誒 還望指教 |
|
| 21樓: | >>參與討論 |
| 作者: bighill 于 2005/1/9 19:26:00 發(fā)布:
謝謝 換用華邦的單片機(jī)W78E516B。 該款單片機(jī)的封裝是怎樣的?和c51的一樣嗎? 我的板子是dip封裝的, |
|
| 22樓: | >>參與討論 |
| 作者: bighill 于 2005/1/10 13:05:00 發(fā)布:
哦 頂一下 |
|
| 23樓: | >>參與討論 |
| 作者: bighill 于 2005/1/10 13:46:00 發(fā)布:
謝了 to shixiudong 那個(gè)W78E516B 我看了一下,它的用法和c51是一樣的嗎?我看封裝dip是一樣的。還有他有個(gè)p4,但在dip中沒有,在PLCC中又有,高不太明白,可否指教一下。 |
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |