AM30L V0064D在單片機系統中的典型應用
摘要:AM30LV0064D是AMD公司生產(chǎn)的一種新型超與非(U1traNAND)結構的閃速存儲器(Flash)。本文介紹它的工作原理,以及它與AT89LS8252單片機的硬件接口電路和PLD內部邏輯控制設計的代碼,并對編程操作的軟件流程進(jìn)行了描述。
關(guān)鍵詞:AM30LV0064D U1traNAND 閃速存儲器
1 概述
AM30LV0064D是AMD公司生產(chǎn)的一種新型非易失性閃速存儲器?;蚍牵∟OR)結構的Flash具有高速的隨機存取功能,但成本較高;新的UltraNAND結構的Flash相對于NOR結構的Flash,具有價(jià)格低,容量特別大的優(yōu)勢,支持對存儲器高速地連續存取。諞芯片工作電壓范圍在2.7~3.6V,特別適用于需要批量存儲大量代碼或數據的語(yǔ)音、圖形、圖像處理場(chǎng)合,在便攜式移動(dòng)存儲和移動(dòng)多媒體系統中應用前景廣闊。
2 工作原理與命令字設置
AM30LV0064D采用與工業(yè)級NAND結構兼容的UltraNAND結構,內部包含1024個(gè)存儲塊(單元容量為8K字節+256字節緩存);存儲塊中的數據按頁(yè)存放,每頁(yè)可存儲512字節,還有16字節緩存用作與外部數據交換時(shí)的緩沖區,每塊共16頁(yè)。所以,主存儲區一共有16 384數據頁(yè),相當于64 Mbit的數據存儲器。
圖1為AM30LV0064D的內部結構和主要引腳示意圖。
圖1 AM30LV0064D的內部結構和主要引腳示意圖
AM30LV0064D的主要引腳定義:
CE--片選使能輸入;
ALE--地址輸入使能;
CLE--命令字輸入使能;
SE--緩沖區使能輸入,低電平有效;
RE--讀使能輸入,低電平有效;
WE--寫(xiě)使能輸入,低電平有效;
WP--寫(xiě)保護輸入,低電平有效;
RY/BY--內部空閑/忙信號輸出;
I/O7~0--8位數據輸入/輸出口;
VCC--3.3V核心電源;
VCCQ--I/O口電源;
VSS--地。
AM30LV0064D的讀、編程和擦寫(xiě)等操作都可以在3.3V單電源供電狀態(tài)下進(jìn)行,同時(shí)它提供的VCCQ引腳在接5V時(shí),I/O口可兼容5V電平。AM30LV0064D支持對主存高速地連續存取和編程操作,連續讀取數據的時(shí)間可小于50ns/字節(隨機讀取數據的響應時(shí)間為7μs,所以連續讀取時(shí)第一個(gè)數據的響應時(shí)間也是7μs);對Flash的編程是以頁(yè)為單位的,步驟是先寫(xiě)入數據,再執行編程命令,編程速度為200μs/頁(yè)(平均約400ns/字節);芯片擦除操作以存儲塊為單位,擦除其中某一塊對其它存儲塊的數據沒(méi)有影響,擦除時(shí)間2ms/存儲塊,而且還有延緩擦降/得擦除命令,允許用戶(hù)在必要時(shí)暫緩擦除操作,轉而處理對其它存儲塊進(jìn)行數據讀、寫(xiě)、編程等操作;此外,主機可以通過(guò)讀RY/BY引腳狀態(tài)的方法了解Flash內部操作是否已經(jīng)完成,RY/BY也可用于實(shí)現硬件判忙接口。AM30LV0064D還具有寫(xiě)保護功能,這一功能通過(guò)將WP引腳設為低電平實(shí)現。
圖2 AM30LV0064D應用電路
表1 地址分配表
I/O7 | I/O6 | I/O5 | I/O4 | I/O3 | I/O2 | I/O1 | I/O0 | |
第1周期 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
第2周期 | A16 | A15 | A14 | A13 | A12 | A11 | A10 | A9 |
第3周期 | A22 | A21 | A20 | A19 | A18 | A17 |
AM30LV0064D通過(guò)片選引腳CE使能,先是CLE和WE信號有效,通過(guò)I/O口寫(xiě)入命令字;接著(zhù)ALE和WE有效,寫(xiě)入數據存取的起始地址。最后根據命令要求,讀數據或數據。由于具有多元的控制總線(xiàn),對應AM30LV0064D的操作方式也是多樣的。根據命令字的定義可進(jìn)行以下操作,如表2所列。
表2 命令字定義表
命令字序列 | 總 線(xiàn) 周 期 | |||||||||||
1 | 2 | 3 | 4 | 5 | 6 | |||||||
操作 | 數據 | 操作 | 數據 | 操作 | 數據 | 操作 | 數據 | 操作 | 數據 | 操作 | 數據 | |
讀數據區-前半頁(yè) | 寫(xiě) | 00H | 寫(xiě) | SA | 寫(xiě) | SA | 寫(xiě) | SA | 讀 | 數據 | Etc. | Etc. |
讀數據-后半頁(yè) | 寫(xiě) | 01H | 寫(xiě) | SA | 寫(xiě) | SA | 寫(xiě) | SA | 讀 | 數據 | Etc. | Etc. |
讀數據-無(wú)縫隙讀 | 寫(xiě) | 02H | 寫(xiě) | SA | 寫(xiě) | SA | 寫(xiě) | SA | 讀 | 數據 | Etc. | Etc. |
讀預留區 | 寫(xiě) | 50H | 寫(xiě) | SA | 寫(xiě) | SA | 寫(xiě) | SA | 讀 | 數據 | Etc. | Etc. |
讀ID號 | 寫(xiě) | 90H | 寫(xiě) | 00H | 讀 | 01H | 讀 | E6H | ||||
讀狀態(tài) | 寫(xiě) | 70H | 讀 | SR | Etc. | Etc. | ||||||
輸入數據 | 寫(xiě) | 80H | 寫(xiě) | SA | 寫(xiě) | SA | 寫(xiě) | SA | 寫(xiě) | 數據 | Etc. | Etc. |
編程 | 寫(xiě) | 10H | ||||||||||
塊擦除 | 寫(xiě) | 60H | 寫(xiě) | BA | 寫(xiě) | BA | 寫(xiě) | D0H | ||||
延緩擦除 | 寫(xiě) | B0H | ||||||||||
重擦除 | 寫(xiě) | D0H | ||||||||||
復位 | 寫(xiě) | FFH |
注:SA表示起始地址,BA表示塊地址,Etc.表示操作同前一個(gè)周期。
3 應用電路設計
AM30LV0064D的外圍電路設計簡(jiǎn)單。其控制總線(xiàn)包括CE(片選)、CLE(命令字鎖存使能)、ALE(地址鎖存使能)、WE(寫(xiě)使能)、RE(讀使能)、SE(預留區使能)、WP(寫(xiě)保護)等。對于那些具有可編程的I/O口的微控制器或DSP來(lái)說(shuō),可以直接把引腳與控制線(xiàn)相連。如果沒(méi)有可編程的I/O口,則需要加一些簡(jiǎn)單的邏輯控制。下面介紹AM30LV0064D與AT89LS8252單片機接口時(shí)的一種應用設計電路。由于單片機缺少UltraNAND閃存所需的多元控制總線(xiàn),在本設計中,采用地址譯碼的方法增加了控制端口,這部分邏輯可以用1片PLD(可編程邏輯器件)完成。具體接口電路如圖2所示。
以下是PLD內部邏輯設計的源代碼:
PORT0=!A14!A13!A12!A11; /*讀寫(xiě)數據端口*/
PORT1=!A14!A13!A12!A11; /*CLE寫(xiě)端口*/
PORT2=!A14!A13!A12!A11; /*設置ALE端口*/
PORT3=!A14!A13!A12!A11; /*清ALE端口*/
PORT4=!A14!A13!A12!A11; /*設置SE端口*/
PORT5=!A14!A13!A12!A11; /*清SE端口*/
PORT6=!A14!A13!A12!A11; /*設置WP端口*/
PORT7=!A14!A13!A12!A11; /*清除WP端口*/
PORT8=!A14!A13!A12!A11; /*設置CE1端口*/
PORT9=!A14!A13!A12!A11; /*清除CE1端口*/
PORTA=!A14!A13!A12!A11; /*讀RY/BY狀態(tài)端口*/
PORTB=!A14!A13!A12!A11; /*設置CE2端口*/
PORTC=!A14!A13!A12!A11; /*清除CE2端口*/
/*邏輯方程*/
READY.OE=PORTAREAD;/*Ready只通過(guò)PORTA讀取*/
READY=RY_BY;
CLE=PORT1;
ALE=WRTIE PORT2#ALE!(WRITE PORT3)#ALE PORT2);
SE=WRITEPORT4#SE!(WRITE PORT5)#SE PORT4;
WP=WRITE PORT6#WP!(WRITE PORT7)# WP PORT6;
CE1=WRITE PORT8#CE !(WRITE PORT9)#CE PORT8;
CE2=WRITE PORTB#CE!(WRITE PORTC)#CE PORTB;
WE=WRITE (PORT0#PORT1);
RE=READPORT0;
4 軟件流程
下面重點(diǎn)介紹通過(guò)單片機對AM30LV0064D進(jìn)行數據編程的軟件流程:?jiǎn)纹瑱C啟動(dòng)編程程序,將IS61LV256中的數據讀出后再寫(xiě)到Flash中,每次寫(xiě)512字節的數據(半頁(yè)為256字節)。然后,對相應頁(yè)進(jìn)行編程,編程命令字寫(xiě)入后定期查詢(xún)RY/BY引腳,看編程是否已經(jīng)完成,如果完成再讀取Flash的狀態(tài)寄存器,可以知道編程是否成功。具體流程如圖3所示。
評論