日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nand flash地址机制

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nand flash地址机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
K9F2G08U0A是三星公司生產的總容量為256M的NandFlash,常用于手持設備等消費電子產品。還是那句話,搞底層就得會看datasheet,我們就從它的datasheet看起。

????

?

??????? 這就是 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地址机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。