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