歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Nand Flash詳細分析

Nand Flash詳細分析

日期:2017/3/1 10:07:58   编辑:Linux編程
  1. NAND技術在設計之初是為了數據存儲應用,nand的寫回速度比較快,芯片面積小,特別容量大有很大的優勢
  1. NAND的地址分為三部分:塊號,塊內頁號,頁內字節號;正因為如此,NAND的一次數據訪問,要經過3次尋址,先後確定塊號,塊內頁號,頁內字節號,至少占用了三個時間周期。因此:NAND FLASH的一個劣勢出來了:隨機字節讀寫速度慢。但是nand flash平均每MB成本比nor flash少了三,四倍。所有NAND FLASH的容量可以做的比較大。
  1. Nand flash 的數據是以bit的方式保存在memory cell,一個cell裡面只能存儲一個bit。這些cell以8個或者16個為單元,連成bit line,形成所謂的byte(X8)/word(X16),這就是NAND Device的位寬。這些line會再組成page,page又分為main area(一般用來做普通數據的存儲區)和spare area(一般用於在讀寫操作的時候存放效驗碼等額外數據用的),最後再又多個page形成一個block。
  2. NAND flash以頁為單位讀寫數據,而以塊為單位擦除數據。按照這樣的組織方式可以形成所謂的三類地址:

――Block address――page address――column address

對於NANDFLASH來說,地址,命令和數據都只能在I/O[7:0]上傳遞,數據寬度為8bits或16bits。

下面解釋一下塊地址,列地址,行地址,還有頁寄存器(page Register)的含義:

在擦除數據的時候塊地址會被用到。

  1. 塊地址(block address):如果一個塊有32個page,一個page有512個byte。那麼一個block有32×512個byte。所以塊地址由A[14]以上的位來表示。32Mbytes的有32*1024*1024/32/512 = 2048個block。需要占用11個bit,即A[24:14]。

對Nand flash的訪問中,地址由列地址和行地址兩部分組成。

列地址(column address):列地址表示在頁內以byte(如果是X16,則以word)為單元的頁內偏移量;

行地址(頁地址)(row address):指page在整個nand芯片中的索引。

以下列舉3個不同大小型號的nand flash進行說明:

SAMSUNG_K9F5608X0D(512Bytes(沒有包括16Bytes spare)*32pages*2048blocks=32Mbytes)需要3個地址周期

列地址:A[7:0] 第一個地址周期發出,對於X8的nandflash來說,如果要把A[8]也編進列地址裡面去,那麼整個地址傳輸需要4個周期完成,所以為了節省一個周期,K9F5608X0D把頁內分為A(1 half array)區,B(2 half array)區。A區0-255字節,B區256-511字節。訪問某頁時必須通過A[8]選定特定的區,A[8]則由操作指令決定的,00h,在A區;01h在B區。所以傳輸地址時A[8]不需要傳輸。對於X16的nand flash來說,由於一個page 的main area 的容量為256word,仍相當於512byte。但是,這個時候沒有所謂的1st halfpage 和2nd halfpage 之分了,所以,bit8就變得沒有意義了,也就是這個時候 A8 完全不用管,地址傳遞仍然和x8 器件相同。除了這一點之外,x16的NAND使用方法和 x8 的使用方法完全相同。

行地址:A[24:9]由第2,3個地址周期發出;

SAMSUNG_K9F1208(512Bytes(不包括16Bytes spare)*32pages*4096blocks=64MBytes)需要4個地址周期

列地址:A[7:0] 第一個地址周期發出,同上;

行地址:A[25:9]由第2,3,4個地址周期發出,A[25]以上的各位必須被設置為L;

SAMSUNG_K9F1G08U0B(2048Bytes(不包括64Bytes spare)*64pages*1024blocks=128MBytes)需要4個地址周期

這裡有個問題2048不是用11bits就可以表示了嗎?為什麼還要用到A[11:0]這12bits?????此處求解


列地址:A[11:0] 第1,2個地址周期發出,如圖*L位要置為low;

行地址:A[27:12]由第3,4個地址周期發出;

④頁寄存器:由於對nand flash讀取和編程操作,一般最小單位是page。所以nand在硬件設計時候,對每一片都有一個對應的區域用於存放將要寫入到物理存儲單元中區的或者剛從存儲單元中讀取出來的一頁的數據,這個數據緩存區就是頁緩存,也叫頁寄存器。所以實際上寫數據只是寫到這個頁緩存中,只有等你發了對應的編程第二階段的確認命令0x10之後,實際的編程動作才開始把頁緩存一點點的寫到物理存儲單元中去,這也就是為什麼發完0x10之後需要等待一段時間的原因。

Copyright © Linux教程網 All Rights Reserved