科普篇:關(guān)于Flash的介紹
一、Flash Memory簡(jiǎn)介
Flash Memory 是一種非易失性的存儲(chǔ)器。在嵌入式系統(tǒng)中通常用于存放系統(tǒng)、應(yīng)用和數(shù)據(jù)等。在 PC 系統(tǒng)中,則主要用在固態(tài)硬盤(pán)以及主板 BIOS 中。
另外,絕大部分的 U 盤(pán)、SDCard 等移動(dòng)存儲(chǔ)設(shè)備也都是使用 Flash Memory 作為存儲(chǔ)介質(zhì)。
二、Flash Memory的主要特性
與傳統(tǒng)的硬盤(pán)存儲(chǔ)器相比,F(xiàn)lash Memory 具有質(zhì)量輕、能耗低、體積小、抗震能力強(qiáng)等的優(yōu)點(diǎn),但也有不少局限性,主要如下:
? 需要先擦除再寫(xiě)入
Flash Memory 寫(xiě)入數(shù)據(jù)時(shí)有一定的限制。它只能將當(dāng)前為 1 的比特改寫(xiě)為 0,而無(wú)法將已經(jīng)為 0 的比特改寫(xiě)為 1,只有在擦除的操作中,才能把整塊的比特改寫(xiě)為 1。
? 塊擦除次數(shù)有限
Flash Memory 的每個(gè)數(shù)據(jù)塊都有擦除次數(shù)的限制(十萬(wàn)到百萬(wàn)次不等),擦寫(xiě)超過(guò)一定次數(shù)后,該數(shù)據(jù)塊將無(wú)法可靠存儲(chǔ)數(shù)據(jù),成為壞塊。
為了最大化的延長(zhǎng) Flash Memory 的壽命,在軟件上需要做擦寫(xiě)均衡(Wear Leveling),通過(guò)分散寫(xiě)入、動(dòng)態(tài)映射等手段均衡使用各個(gè)數(shù)據(jù)塊。同時(shí),軟件還需要進(jìn)行壞塊管理(Bad Block Management,BBM),標(biāo)識(shí)壞塊,不讓壞塊參與數(shù)據(jù)存儲(chǔ)。(注:除了擦寫(xiě)導(dǎo)致的壞塊外,F(xiàn)lash Memory 在生產(chǎn)過(guò)程也會(huì)產(chǎn)生壞塊,即固有壞塊。)
? 讀寫(xiě)干擾
由于硬件實(shí)現(xiàn)上的物理特性,F(xiàn)lash Memory 在進(jìn)行讀寫(xiě)操作時(shí),有可能會(huì)導(dǎo)致鄰近的其他比特發(fā)生位翻轉(zhuǎn),導(dǎo)致數(shù)據(jù)異常。這種異常可以通過(guò)重新擦除來(lái)恢復(fù)。Flash Memory 應(yīng)用中通常會(huì)使用 ECC 等算法進(jìn)行錯(cuò)誤檢測(cè)和數(shù)據(jù)修正。
? 電荷泄漏
存儲(chǔ)在 Flash Memory 存儲(chǔ)單元的電荷,如果長(zhǎng)期沒(méi)有使用,會(huì)發(fā)生電荷泄漏,導(dǎo)致數(shù)據(jù)錯(cuò)誤。不過(guò)這個(gè)時(shí)間比較長(zhǎng),一般十年左右。此種異常是非永久性的,重新擦除可以恢復(fù)。
三、NOR Flash 和 NAND Flash
根據(jù)硬件上存儲(chǔ)原理的不同,F(xiàn)lash Memory 主要可以分為 NOR Flash 和 NAND Flash 兩類(lèi)。主要的差異如下所示:
NAND Flash 讀取速度與 NOR Flash 相近,根據(jù)接口的不同有所差異;
NAND Flash 的寫(xiě)入速度比 NOR Flash 快很多;
NAND Flash 的擦除速度比 NOR Flash 快很多;
NAND Flash 最大擦次數(shù)比 NOR Flash 多;
NOR Flash 支持片上執(zhí)行,可以在上面直接運(yùn)行代碼;
NOR Flash 軟件驅(qū)動(dòng)比 NAND Flash 簡(jiǎn)單;
NOR Flash 可以隨機(jī)按字節(jié)讀取數(shù)據(jù),NAND Flash 需要按塊進(jìn)行讀取。
大容量下 NAND Flash 比 NOR Flash 成本要低很多,體積也更小;
(注:NOR Flash 和 NAND Flash 的擦除都是按塊塊進(jìn)行的,執(zhí)行一個(gè)擦除或者寫(xiě)入操作時(shí),NOR Flash 大約需要 5s,而 NAND Flash 通常不超過(guò) 4ms。)
1、NOR Flash
NOR Flash 根據(jù)與 CPU 端接口的不同,可以分為 Parallel NOR Flash 和 Serial NOR Flash 兩類(lèi)。
Parallel NOR Flash 可以接入到 Host 的 SRAM/DRAM Controller 上,所存儲(chǔ)的內(nèi)容可以直接映射到 CPU 地址空間,不需要拷貝到 RAM 中即可被 CPU 訪問(wèn),因而支持片上執(zhí)行。Serial NOR Flash 的成本比 Parallel NOR Flash 低,主要通過(guò) SPI 接口與 Host 連接。
鑒于 NOR Flash 擦寫(xiě)速度慢,成本高等特性,NOR Flash 主要應(yīng)用于小容量、內(nèi)容更新少的場(chǎng)景,例如 PC 主板 BIOS、路由器系統(tǒng)存儲(chǔ)等。
2、NAND Flash
NAND Flash 根據(jù)每個(gè)存儲(chǔ)單元內(nèi)存儲(chǔ)比特個(gè)數(shù)的不同,可以分為 SLC(Single-Level Cell)、MLC(Multi-Level Cell) 和 TLC(Triple-Level Cell) 三類(lèi)。其中,在一個(gè)存儲(chǔ)單元中,SLC 可以存儲(chǔ) 1 個(gè)比特,MLC 可以存儲(chǔ) 2 個(gè)比特,TLC 則可以存儲(chǔ) 3 個(gè)比特。
NAND Flash 的一個(gè)存儲(chǔ)單元內(nèi)部,是通過(guò)不同的電壓等級(jí),來(lái)表示其所存儲(chǔ)的信息的。在 SLC 中,存儲(chǔ)單元的電壓被分為兩個(gè)等級(jí),分別表示 0 和 1 兩個(gè)狀態(tài),即 1 個(gè)比特。在 MLC 中,存儲(chǔ)單元的電壓則被分為 4 個(gè)等級(jí),分別表示 00 01 10 11 四個(gè)狀態(tài),即 2 個(gè)比特位。同理,在 TLC 中,存儲(chǔ)單元的電壓被分為 8 個(gè)等級(jí),存儲(chǔ) 3 個(gè)比特信息。
NAND Flash 的單個(gè)存儲(chǔ)單元存儲(chǔ)的比特位越多,讀寫(xiě)性能會(huì)越差,壽命也越短,但是成本會(huì)更低。Table 1 中,給出了特定工藝和技術(shù)水平下的成本和壽命數(shù)據(jù)。
相比于 NOR Flash,NAND Flash 寫(xiě)入性能好,大容量下成本低。目前,絕大部分手機(jī)和平板等移動(dòng)設(shè)備中所使用的 eMMC 內(nèi)部的 Flash Memory 都屬于 NAND Flash。PC 中的固態(tài)硬盤(pán)中也是使用 NAND Flash。
四、ROW flash 和 managed flash
由于 Flash Memory 存在按塊擦寫(xiě)、擦寫(xiě)次數(shù)的限制、讀寫(xiě)干擾、電荷泄露等的局限,為了最大程度的發(fā)揮 Flash Memory 的價(jià)值,通常需要有一個(gè)特殊的軟件層次,實(shí)現(xiàn)壞塊管理、擦寫(xiě)均衡、ECC、垃圾回收等的功能,這一個(gè)軟件層次稱(chēng)為 FTL(Flash Translation Layer)。
在具體實(shí)現(xiàn)中,根據(jù) FTL 所在的位置的不同,可以把 Flash Memory 分為 Raw Flash 和 Managed Flash 兩類(lèi)。
1、Raw Flash
在此類(lèi)應(yīng)用中,在 Host 端通常有專(zhuān)門(mén)的 FTL 或者 Flash 文件系統(tǒng)來(lái)實(shí)現(xiàn)壞塊管理、擦寫(xiě)均衡等的功能。Host 端的軟件復(fù)雜度較高,但是整體方案的成本較低,常用于價(jià)格敏感的嵌入式產(chǎn)品中。
通常我們所說(shuō)的 NOR Flash 和 NAND Flash 都屬于這類(lèi)型。
2、Managed Flash
Managed Flash 在其內(nèi)部集成了 Flash Controller,用于完成擦寫(xiě)均衡、壞塊管理、ECC校驗(yàn)等功能。相比于直接將 Flash 接入到 Host 端,Managed Flash 屏蔽了 Flash 的物理特性,對(duì) Host 提供標(biāo)準(zhǔn)化的接口,可以減少 Host 端軟件的復(fù)雜度,讓 Host 端專(zhuān)注于上層業(yè)務(wù),省去對(duì) Flash 進(jìn)行特殊的處理。