一、Flash介紹
常用的flash類型有NOR Flash 和Nand Flash 兩種;
(1)Nor Flash
1、Nor Flash的接口和RAM完全相同,可以隨機訪問任意地址的數(shù)據,在其上進行讀操作的效率非常高,但是擦除和寫操作的效率很低,另外,Nor Flash的容量一般比較小,通常,Nor Flash用于存儲程序;
2、Nor Flash的塊大小范圍為64KB—128KB;
3、擦寫一個Nor Flash塊需要4s,
4、市場上Nor Flash 的容量通常為1MB—4MB
(2)Nand Flash
1、Nand Flash的接口僅僅包含幾個I/O引腳,需要串行地訪問,Nand Flash進行擦除和寫操作的效率很高,容量較大,
通常Nand Flash用于存儲數(shù)據;
2、Nand Flash的塊大小范圍為8KB—64KB;
3、擦寫一個Nand Flash塊需要2ms;
4、Nand Flash 一般以512字節(jié)為單位進行讀寫
5、 市場上 Nand Flash 的容量一般為 8M—512M
二、Nand Flash的物理結構
以三星公司生產的 K9F1208U0M 為例:
1、容量:64MB,
一共4個層;
每層1024個塊(block);
1塊包含32頁
1頁包含 512 + 16 = 528個字節(jié)
2、外部接口:8個I/O口,5個使能信號(ALE、CLE、nWE、nRE、nCE),1個狀態(tài)引腳(RDY/B),1個寫保護引腳(nWE);
3、命令、地址、數(shù)據都通過8個I/O口輸入輸出;
4、寫入命令、地址、數(shù)據時,都需要將nWE、nCE信號同時拉低;數(shù)據在WE上升沿被鎖存;
5、CLE、ALE用來區(qū)分I/O引腳上傳輸?shù)氖菙?shù)據還是地址;
6、64MB的空間需要26位地址,因此以字節(jié)為單位訪問Flash時需要4個地址序列;
7、讀/寫頁在發(fā)出命令后,需要4個地址序列,而擦除塊在發(fā)出擦除命令后僅需要3個地址序列;
三、Nand Flash訪問方法
操作Nand Flash時,先傳輸命令,然后傳輸?shù)刂罚詈笞x、寫數(shù)據,期間要檢查flash的狀態(tài);
K9F1208U0M 一頁大小為528字節(jié),而列地址A0——A7可以尋址的范圍是256字節(jié),所以將一頁分為A、B、C三個區(qū):
A區(qū):0—255字節(jié)
B區(qū):256—511字節(jié)
C區(qū):512—527字節(jié)
(1)復位
命令:FFh
步驟:發(fā)出命令即可復位Nand Flash芯片;
(2)讀操作
命令:
00h——讀A區(qū)
01h——讀B區(qū)
50h——讀C區(qū)
操作步驟:
1、發(fā)出命令 00h、01h 或50h, 00h將地址位A8設為0, 01h將A8設為1 ;
2、依次發(fā)出4個地址序列;
3、檢測R/nB,待其為高電平時,就可以讀取數(shù)據了;
(3)flash編程
命令:
80h——10h :寫單頁;
80h——11h :對多個層進行些頁操作;
操作步驟:
1、寫單頁步驟:
【1】發(fā)出80h命令后;
【2】發(fā)送4個地址序列;
【3】向flash發(fā)送數(shù)據;
【4】發(fā)出命令10h啟動寫操作,flash內部自動完成寫、校驗操作;
【5】通過命令70h讀取狀態(tài)位,查詢寫操作是否完成;
2、多頁寫
【1】發(fā)出80h、4個地址序列、最多528字節(jié)的數(shù)據;
【2】發(fā)出11h命令;
【3】接著在相鄰層執(zhí)行【1】、【2】兩步操作;
【4】第四頁的最后使用10h代替11h,啟動flash內部的寫操作;
【5】可以通過71h查詢寫操作是否完成;
(4)復制
命令:
00h——8Ah——10h :單層頁內復制
03h——8Ah——11h :多層頁內復制
操作步驟:
1、單層頁內復制步驟:
【1】發(fā)出命令00h;
【2】4個源地址序列;
【2】接著發(fā)出8Ah;
【4】發(fā)出4個目的地址序列;
【5】發(fā)出10h命令,啟動寫操作;
【6】通過70h命令讀取狀態(tài)查詢操作是否完成;
2、多層頁內復制步驟:
【1】發(fā)出命令00h(第一層)、4個源頁地址序列;
【2】以后各層依次發(fā)出命令03h、4個源頁地址序列;
【3】發(fā)出命令8Ah、目的地址、命令11h;
【4】各層依次執(zhí)行【3】,在最后一頁的地址后,用10h代替11h,啟動寫操作;
【5】通過71h命令讀取狀態(tài)查詢操作是否完成;
(5)擦除
命令:
60h——D0h :單層內塊擦除
60h-60h ——D0h :多層內塊擦除
操作步驟:
1、單層內塊擦除:
【1】發(fā)出命令字60h;
【2】發(fā)出塊(block)地址,僅需3個地址序列;
【3】發(fā)出D0h,啟動擦除操作;
【4】發(fā)出70h命令查詢狀態(tài),是否完成擦除;
2、多層內塊擦除:
【1】發(fā)出命令字60h,3個塊地址序列;
【2】對每個層執(zhí)行【1】;
【3】發(fā)出命令D0h,啟動擦除操作;
【4】發(fā)出71h命令查詢狀態(tài),檢查是否完成擦除;
(6)讀取芯片ID
命令:90h
操作步驟:
1、發(fā)出命令90h;
2、發(fā)出4個地址序列(均設為0);
3、連續(xù)讀入5個數(shù)據,分別表示:廠商代碼、設備代碼、保留字節(jié)、多層操作代碼;
(7)讀狀態(tài)
命令:
70h——單層狀態(tài)
71h——多層狀態(tài)
操作步驟:寫入命令字之后,然后啟動讀操作即可讀入此寄存器。
-
FlaSh
+關注
關注
10文章
1642瀏覽量
148654 -
存儲器
+關注
關注
38文章
7528瀏覽量
164337
發(fā)布評論請先 登錄
相關推薦
評論