nand flash地址机制
????
?
??????? 這就是 K9F2G08U0A的內部結構,具體的各個部件的介紹,就不詳細介紹了,想了解的話可以參考偉東山的《嵌入式linux應用開發完全手冊》。
????? 現在就看一下重點的,NandFlash的存儲單元的組織結構,K9F2G08U0A的存儲單元的組織結構如下:
結合上面的圖,我們現在來分析一下:
????? NandFlash的存儲單元是由Block組成的,Block又是由Page組成的,數據就是存儲在Page上。
?? K9F2G08U0A的總容量是256M,由圖可以看出,它一共有2048塊,每一塊有64頁,每一頁有(2K+64)Bytes。每一頁又分為main區和spare區,2K就是指main區,64就是指spare區。
2K是指每一頁上存放數據的有效空間,64是指每一頁附加的空間,它不能用來存放我們寫入的數據,它主要是用來存放ECC校驗和壞塊標記的信息數據。
????? 還有一個比較重要的知識就是對NandFlash的訪問,你不會訪問它,那你肯定不會用它!
??? 首先要明白NandFlash是以頁(Page)為最小單位進行讀寫的,以塊(Block)為最小單位進行擦除的,也就是說當我們給定了讀取的起始位置后,讀操作將從該位置開始,連續讀取到本Page的最后一個 Byte為止(可以包括Spare Field)。
??? 在弄清楚怎么讀寫NandFlash之前,還有一個準備工作要做,那就是我們要告訴NandFlash,我要讀寫哪個地方的數據,如果我們不告訴它地址,那它就不知道我們到讀哪些數據。那如何計算我們要傳入的地址呢?以一個例子來說明
???? 以K9F2G08U0A為例,此nand flash,一共有2048個塊,每個塊內有64頁,每個頁是2K+64 Bytes,假設,我們要訪問其中的第1500個塊中的第25頁中的1208字節處的地址,此時,我們就要先把具體的地址算出來:
物理地址=塊大小×塊號+頁大小×頁號+頁內地址=1500×128K+25×2K+1208=0xBB8CCB8(196660408),接下來,我們就看看,怎么才能把這個實際的物理地址,轉化為nand Flash所要求的格式。在解釋地址組成之前,先要來看看其datasheet中關于地址周期的介紹:
???
由上圖可以看出,K9F2G08U0A是用5個周期來實現,由于NAND flash以頁為單位讀寫數據,而以塊為單位擦除數據。按照這樣的組織方式可以形成所謂的三類地址:
Column Address:Starting Address of the Register. 翻成中文為列地址,地址的低8位 ,即頁內偏移地址
Page Address :頁地址
Block Address :塊地址
? 我們知道K9F2G08U0A的每一頁有(2K+64)=2112Byte,2112byte 需要12bit來表示,對于2112byte系列的NAND,這2112byte被分成1st half Page Register和2nd half Page Register,各自的訪問由地址指針命令來選擇,A[11:0]就是所謂的column address(列地址),在進行擦除操作時不需要它,因為以塊為單位擦除。64個page需要6bit來表示,占用A[17:12],即該page在塊內的相對地址,也就是確定位于哪一頁。A11這一位地址被用來設置2048byte的1st half page還是2nd half page,0表示1st,1表示2nd。Block的地址是由A18以上的bit來表示,也就是確定位于哪一塊。用A[0:28]這29位,就可以將K9F2G08U0A這256M的數據存儲空間全部訪問到。
2的29次方是2GBit,256MByte=2GBit。
?????NAND Flash 的地址表示為: Block Address|Page Address in block|Column Address 地址傳送順序是Column Address,Page Address,Block Address。
由于地址只能在I/O[7:0]上傳遞,因此,必須采用移位的方式進行。 以K9F2G08U0A 為例:
第1 步是傳遞column address,就是NAND_ADDR[7:0],不需移位即可傳遞到I/O[7:0]上。
第2 步就是將NAND_ADDR 右移8位,將NAND_ADDR[11:8]傳到I/O[7:0]上;
第3 步將NAND_ADDR[19:12]放到I/O上;
第4步需要將NAND_ADDR[27:20]放到I/O上;
第5步需要將?NAND_ADDR[28]放到I/O上;
因此,整個地址傳遞過程需要5步才能完成,即5-step addressing。 如果NAND Flash 的容量是32MB(256Mbit)以下,那么,block adress最高位只到bit24,因此尋址只需要3步。
?? 簡單解釋完了地址組成,那么就很容易分析上面例子中的地址了:
0xBB8CCB8 = 00001011? 1011 1000? 1100 1100??1011 1000,分別分配到5個地址周期就是:
??????????????? B????? B???? 8????C???C????B???? 8????
第一個周期:A[0:7]? 也就是B8
第二個周期:A[8:11]? 取四位 1100, 再添4位0,也就是0000 1100?? 即0C
第三個周期:A[12:19]? 取八位 1000 1100? 即8C
第四個周期:A[20:27]? 取八位 1011 1011? 即BB
第五個周期:A[28]???? 取一位 0,補齊八位 即 0000 0000 也就是00
再往回分析,NandFlash收到前兩個周期的地址A[0:11]?也就是0CB8,即 1100 1011 1000,分析:A[10:0]= 100 1011 1000=1208, 表示第1208個Byte
? 收到后三個周期后,即 0000 0000 1011 1011 1000 1100,A[16:11]=011001=25,表示第25頁
????? 0000 0000 1011 1011 100 處理后為????0101 1101 1100 =1500,表示第1500塊
總結
以上是生活随笔為你收集整理的nand flash地址机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WIN7注册表无法保存对权限的更改
- 下一篇: SFP-GE模块(1310nm, LC)