nand flash位址機制

2021-06-01 12:28:41 字數 2636 閱讀 5551

k9f2g08u0a是三星公司生產的總容量為256m的nandflash,常用於手持裝置等消費電子產品。還是那句話,搞底層就得會看datasheet,我們就從它的datasheet看起。

現在就看一下重點的,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的每一頁有(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 位址資料的確定

nand flash使用8位資料線,同時作為位址線,命令線,資料線復用。類似於平時使用的點陣液晶顯示器的操作方式。這裡作為學習的記錄,說一下nand flash 的位址的確定方式。nand flash 的內部分為 block 塊 page 頁 其中 一塊nand flash 包含若干 block,每...

深度分析NandFlash 硬體實現機制

最近看了好久的nandflash,總算是有了一點感覺,但一直沒有系統的整理一下,腦子裡很亂,今天剛好公司的很多人都出去旅遊了,所以工作不是很忙,就在這裡好好整理一下吧。首先當然是最基礎的了,nandflash的硬體實現機制。flash 全名叫做 flash memory 屬於非易失性儲存裝置 non...

機制 位址轉換

利用位址轉換換 address translation 硬體對每次記憶體訪問進行處理 即指令獲取 資料讀取或寫入 將指令中的虛擬 virtual 位址轉換為資料實際儲存的物理 physical 位址。在每次記憶體引用時,硬體都會進行位址轉換,將應用程式的記憶體引用重定位到記憶體中實際的位置。使用者的...