1. 程式人生 > >Flash Memory 簡介【轉】

Flash Memory 簡介【轉】

本文轉載自:https://linux.codingbelief.com/zh/storage/emmc/

Flash Memory 是一種非易失性的儲存器。在嵌入式系統中通常用於存放系統、應用和資料等。在 PC 系統中,則主要用在固態硬碟以及主機板 BIOS 中。另外,絕大部分的 U 盤、SDCard 等移動儲存裝置也都是使用 Flash Memory 作為儲存介質。

Flash Memory 的主要特性

與傳統的硬碟儲存器相比,Flash Memory 具有質量輕、能耗低、體積小、抗震能力強等的優點,但也有不少侷限性,主要如下:

  1. 需要先擦除再寫入
    Flash Memory 寫入資料時有一定的限制。它只能將當前為 1 的位元改寫為 0,而無法將已經為 0 的位元改寫為 1,只有在擦除的操作中,才能把整塊的位元改寫為 1。

  2. 塊擦除次數有限
    Flash Memory 的每個資料塊都有擦除次數的限制(十萬到百萬次不等),擦寫超過一定次數後,該資料塊將無法可靠儲存資料,成為壞塊。
    為了最大化的延長 Flash Memory 的壽命,在軟體上需要做擦寫均衡(Wear Leveling),通過分散寫入、動態對映等手段均衡使用各個資料塊。同時,軟體還需要進行壞塊管理(Bad Block Management,BBM),標識壞塊,不讓壞塊參與資料儲存。(注:除了擦寫導致的壞塊外,Flash Memory 在生產過程也會產生壞塊,即固有壞塊。)

  3. 讀寫干擾
    由於硬體實現上的物理特性,Flash Memory 在進行讀寫操作時,有可能會導致鄰近的其他位元發生位翻轉,導致資料異常。這種異常可以通過重新擦除來恢復。Flash Memory 應用中通常會使用 ECC 等演算法進行錯誤檢測和資料修正。

  4. 電荷洩漏
    儲存在 Flash Memory 儲存單元的電荷,如果長期沒有使用,會發生電荷洩漏,導致資料錯誤。不過這個時間比較長,一般十年左右。此種異常是非永久性的,重新擦除可以恢復。

NOR Flash 和 NAND Flash

根據硬體上儲存原理的不同,Flash Memory 主要可以分為 NOR Flash 和 NAND Flash 兩類。 主要的差異如下所示:

  • NAND Flash 讀取速度與 NOR Flash 相近,根據介面的不同有所差異;
  • NAND Flash 的寫入速度比 NOR Flash 快很多;
  • NAND Flash 的擦除速度比 NOR Flash 快很多;
  • NAND Flash 最大擦次數比 NOR Flash 多;
  • NOR Flash 支援片上執行,可以在上面直接執行程式碼;
  • NOR Flash 軟體驅動比 NAND Flash 簡單;
  • NOR Flash 可以隨機按位元組讀取資料,NAND Flash 需要按塊進行讀取。
  • 大容量下 NAND Flash 比 NOR Flash 成本要低很多,體積也更小;

(注:NOR Flash 和 NAND Flash 的擦除都是按塊塊進行的,執行一個擦除或者寫入操作時,NOR Flash 大約需要 5s,而 NAND Flash 通常不超過 4ms。)

NOR Flash

NOR Flash 根據與 CPU 端介面的不同,可以分為 Parallel NOR Flash 和 Serial NOR Flash 兩類。
Parallel NOR Flash 可以接入到 Host 的 SRAM/DRAM Controller 上,所儲存的內容可以直接對映到 CPU 地址空間,不需要拷貝到 RAM 中即可被 CPU 訪問,因而支援片上執行。Serial NOR Flash 的成本比 Parallel NOR Flash 低,主要通過 SPI 介面與 Host 連線。


圖片: Parallel NOR Flash 與 Serial NOR Flash

鑑於 NOR Flash 擦寫速度慢,成本高等特性,NOR Flash 主要應用於小容量、內容更新少的場景,例如 PC 主機板 BIOS、路由器系統儲存等。

更多 NOR Flash 的相關細節,請參考 NOR Flash 章節。

NAND Flash

NAND Flash 需要通過專門的 NFI(NAND Flash Interface)與 Host 端進行通訊,如下圖所示:


圖:NAND Flash Interface

NAND Flash 根據每個儲存單元記憶體儲位元個數的不同,可以分為 SLC(Single-Level Cell)、MLC(Multi-Level Cell) 和 TLC(Triple-Level Cell) 三類。其中,在一個儲存單元中,SLC 可以儲存 1 個位元,MLC 可以儲存 2 個位元,TLC 則可以儲存 3 個位元。

NAND Flash 的一個儲存單元內部,是通過不同的電壓等級,來表示其所儲存的資訊的。在 SLC 中,儲存單元的電壓被分為兩個等級,分別表示 0 和 1 兩個狀態,即 1 個位元。在 MLC 中,儲存單元的電壓則被分為 4 個等級,分別表示 00 01 10 11 四個狀態,即 2 個位元位。同理,在 TLC 中,儲存單元的電壓被分為 8 個等級,儲存 3 個位元資訊。


圖片: SLC、MLC 與 TLC

NAND Flash 的單個儲存單元儲存的位元位越多,讀寫效能會越差,壽命也越短,但是成本會更低。Table 1 中,給出了特定工藝和技術水平下的成本和壽命資料。

Table 1

  SLC MLC TLC
製造成本 30-35 美元 / 32GB 17 美元 / 32GB 9-12 美元 / 32GB
擦寫次數 10萬次或更高 1萬次或更高 5000次甚至更高
儲存單元 1 bit / cell 2 bits / cell 3 bits / cell

(注:以上資料來源於網際網路,僅供參考)

相比於 NOR Flash,NAND Flash 寫入效能好,大容量下成本低。目前,絕大部分手機和平板等移動裝置中所使用的 eMMC 內部的 Flash Memory 都屬於 NAND Flash。PC 中的固態硬碟中也是使用 NAND Flash。

更多 NAND Flash 的相關細節,請參考 NAND Flash 章節。

Raw Flash 和 Managed Flash

由於 Flash Memory 存在按塊擦寫、擦寫次數的限制、讀寫干擾、電荷洩露等的侷限,為了最大程度的發揮 Flash Memory 的價值,通常需要有一個特殊的軟體層次,實現壞塊管理、擦寫均衡、ECC、垃圾回收等的功能,這一個軟體層次稱為 FTL(Flash Translation Layer)。

在具體實現中,根據 FTL 所在的位置的不同,可以把 Flash Memory 分為 Raw Flash 和 Managed Flash 兩類。


圖片: Raw Flash 和 Managed Flash

Raw Flash
在此類應用中,在 Host 端通常有專門的 FTL 或者 Flash 檔案系統來實現壞塊管理、擦寫均衡等的功能。Host 端的軟體複雜度較高,但是整體方案的成本較低,常用於價格敏感的嵌入式產品中。
通常我們所說的 NOR Flash 和 NAND Flash 都屬於這型別。

Managed Flash
Managed Flash 在其內部集成了 Flash Controller,用於完成擦寫均衡、壞塊管理、ECC校驗等功能。相比於直接將 Flash 接入到 Host 端,Managed Flash 遮蔽了 Flash 的物理特性,對 Host 提供標準化的介面,可以減少 Host 端軟體的複雜度,讓 Host 端專注於上層業務,省去對 Flash 進行特殊的處理。
eMMCSD CardUFS、U 盤等產品是屬於 Managed Flash 這一類。

參考資料

    1. NOR NAND Flash Guide: Selecting a Flash Storage Solution [PDF]
    2. Wiki: Common Flash Memory Interface [Web]
    3. Quick Guide to Common Flash Interface [PDF]
    4. MICRON NOR Flash Technology [Web]
    5. MICRON NAND Flash Technology [Web]
    6. Wiki:快閃記憶體 [Web]
    7. Wiki:Flash File System [Web]
    8. Wear Leveling in Micron® NAND Flash Memory [PDF]
    9. Understanding Flash: The Flash Translation Layer [Web]
    10. 談NAND Flash的底層結構和解析 [Web]
    11. 快閃記憶體基礎 [Web]
    12. Open NAND Flash Interface (ONFI) [Web]