NAND FALSH基礎知識總結

  1. NAND Flash簡介算法

    Flash全稱爲Flash Memory,屬於非易失性存儲設備(Non-volatile Memory Device)。Flash主要分兩種,NAND Flash和NOR Flash。編程

    NOR的成本相對高,容量相對小,優勢是讀寫數據時候,不容易出錯。NAND Flash成本相對低,缺點是使用中數據讀寫容易出錯,因此通常都須要有對應的軟件或者硬件的數據校驗算法,統稱爲ECC。但優勢是,相對來講容量比較大。緩存

  2. 基礎原理安全

    2.1 NAND 佈局架構

    NAND Flash內部由幾個芯片(chip)組成,每一個chip包含了幾片(Plane),每一片中包含不少塊(Block),每一塊又包含不少頁(Page),如圖 21所示。常見的NAND Flash,內部只有一個chip,每一個chip只有一個plane。佈局

    每個頁,對應還有一塊區域,叫作空閒區域(spare area)/冗餘區域(redundant area),通常叫作OOB(Out Of Band),這個區域,是最初基於NAND Flash的硬件特性:數據在讀寫時候相對容易錯誤,因此爲了保證數據的正確性,必需要有對應的檢測和糾錯機制,此機制被叫作EDC(Error Detection Code)/ECC(Error Code Correction,或者Error Checking and Correcting),因此設計了多餘的區域,用於放置數據的校驗值。spa

     

    圖 2-1 NAND Flash結構設計

    老的NAND Flash,頁大小是256B,512B,這類的NAND Flash被稱做small block,地址週期只有4個。對於如今常見的NAND Flash多數是2KB,被稱做big block,對應的發讀寫命令地址,一共5個週期(cycle),更新的NAND Flash是4KB。NAND Flash擦除操做的基本/最小單位爲塊,寫入操做的基本/最小單位爲頁。 ip

    對於NAND Flash讀取和編程操做來講,通常最小單位是頁,因此,NAND Flash在硬件設計時候,就考慮到這一特性,對於每一片(Plane),都有一個對應的PAGE Buffer,專門用於存放,將要寫入到物理存儲單元中去的或者剛從存儲單元中讀取出來的一頁數據。只有寫到了這個頁緩存中,你發了對應的編程第二階段的確認命令0x10以後,實際的編程動做纔開始,纔開始把頁緩存中的數據,一點點寫到物理存儲單元中去。經過PAGE Buffer還能夠實現對NAND Flash的多片同時編程。flash

     

    2.2 NAND Flash ID

    Read ID是NAND Flash基礎命令之一,用於讀取存儲在NAND中的ID。讀取的ID中包含多個字節,通常最少是4個,新的芯片,支持5個甚至更多,如圖 2-2所示。從這些字節中,能夠解析出不少相關的信息,好比此NAND Flash內部是幾個芯片(chip)所組成的, 是SLC仍是MLC,如圖 2-3所示;如頁大小,塊大小,OOB大小等,如圖 2-4所示;以及每一個chip包含了幾片(Plane),每片的大小,如圖 2-5所示。

    圖 2-2 Read ID Byte

    圖 2-3 Read ID Byte 3 Description

    圖 2-4 Read ID Byte 4 Description

    圖 2-5 Read ID Byte 5 Description

    2.3 NAND Flash引腳功能

    NAND Flash的引腳功能如表 2-1所示:

    表 2-1 NAND Flash引腳說明

    引腳

    描述

    I/O0 ~ I/O7

    用於輸入地址/數據/命令,輸出數據,有8位和16位的

    CLE

    命令鎖存使能,在輸入命令以前,要先在模式寄存器中,設置CLE使能

    ALE

    地址鎖存使能,在輸入地址以前,要先在模式寄存器中,設置ALE使能

    CE#

    芯片使能,在操做Nand Flash以前,要先選中此芯片,才能操做

    RE#

    Read Enable,讀使能,在讀取數據以前,要先使CE#有效

    WE#

    讀使能,在讀取數據以前,要先使CE#有效

    WP#

    寫保護

    R/B#

    就緒/忙,主要用於在發送完編程/擦除命令後,檢測這些操做是否完成,忙,表示編程/擦除操做仍在進行中,就緒表示操做完成

    Vcc

    電源

    Vss

    接地

    N.C

    未定義,未鏈接

    2.4 NAND Flash的典型特性

    1.頁擦除時間是200us,有些慢的有800us。

    2.塊擦除時間是1.5ms。

    3.頁數據讀取到數據寄存器的時間通常是20us。

    4.串行訪問(Serial access)讀取一個數據的時間是25ns,而一些舊的nand flash是30ns,甚至是50ns。

    5.輸入輸出端口是地址和數據以及命令一塊兒multiplex複用的

    2.5 NAND Flash中的壞塊(Bad Block)

    NAND Flash中,一個塊中含有1個或多個位是壞的,就成爲其爲壞塊。壞塊的穩定性是沒法保證的,也就是說,不能保證你寫入的數據是對的,或者寫入對了,讀出來也不必定對的。而正常的塊,確定是寫入讀出都是正常的。

    約定俗成的,small block的NAND,壞塊標記在byte 5;large block的NAND,壞塊標記在byte0。壞塊標記若是不是0xFF,就說明是壞塊。

    關於壞塊標記,實際狀況更復雜些:對於2K頁的NAND Flash,標記位置都是頁內OOB開始處,都是非0xFF表示壞塊。可是,對因而第幾頁,不一樣NAND Flash就有不一樣的規定了:有些NAND Flash,是標記在壞塊的第一個頁或者是第二個頁。另外一些,是在一個塊內的最後一頁或倒數第二頁作此標記。因此,真正比較完整的檢查壞塊的作法,至少要檢測塊內第一,第二,倒數第一,倒數第二頁,是不是0xFF,才能比較全面的判斷是不是壞塊的。

    2.6 NAND Flash壞塊管理

    對於壞塊的管理,在SylixOS系統中,叫作壞塊管理(BBM,Bad Block Management),對應的會有一個表去記錄好塊,壞塊的信息,以及壞塊是出廠就有的,仍是後來使用產生的,這個表叫作壞塊表(BBT,Bad Block Table)。SylixOS內核MTD架構下的NAND Flash驅動,和Uboot中NAND Flash驅動中,在加載完驅動以後,若是你沒有加入參數主動要求跳過壞塊掃描的話,那麼都會去主動掃描壞塊,創建必要的BBT的,以備後面壞塊管理所使用。

    2.7 常見NAND Flash操做

    NAND Flash的常見操做如圖 2-6所示:

    圖 2-6 NAND Flash常見命令

    不少操做命令有2個Cycle。開始設置,最後確認的命令方式,是爲了不因爲外部因爲無心的/未預料而產生的噪音而誤操做,這樣使得數據更安全。

    2.8 NAND Flash的地址週期

    在須要輸入地址時,small block,地址週期只有4個,如圖 2-7所示。而big block,對應的發讀寫命令地址,一共5個週期(cycle),如圖 2-8所示。

    圖 2-7 4週期地址輸入

    圖 2-8 5週期地址輸入

    如NAND Flash地址週期共有5個,2個列(Column)週期,3個行(Row)週期。列地址A0~A10,就是頁內地址,地址範圍是從0到2047,而對出的A11,理論上能夠表示2048~4095,可是實際上,咱們最多也只用到了2048~2112,用於表示頁內的OOB區域,其大小是64字節。A12~A30,稱做頁號,頁的號碼,能夠定位到具體是哪個頁。而其中,A18~A30,表示對應的塊號,即屬於哪一個塊。

    2.8 NAND Flash的頁編程(寫操做)

    NADN FLASH的寫操做叫作編程Program,通常狀況下,是以頁爲單位的。時序圖如圖 2-9所示:

     

    圖 2-9 NAND Flash寫操做時序

    2.9 NAND FALSH的讀操做

    NAND Flash的讀操做以頁爲單位,時序圖如圖 2-10所示:

    圖 2-10 NAND Flash讀操做時序

    2.10 NAND Flash的擦除

    NAND Flash的擦除以塊爲單位,在寫操做以前,必須先進行擦除,時序圖如圖 2-11所示:

    圖 2-11 NAND Flash擦除操做時序

  3. 參考資料

    《Spansion® SLC NAND Flash Memory for Embedded》

相關文章
相關標籤/搜索