精品麻豆一区二区三区乱码-人妻在线免费观看一区二区-欧美日韩在线观看精品99-美女极度色诱视频国产免费

 找回密碼
 請(qǐng)用中文注冊(cè)用戶!

QQ登錄

只需一步,快速開(kāi)始

查看: 1636|回復(fù): 0

輕量級(jí) NAND 壞塊管理方法分析及改進(jìn)

[復(fù)制鏈接]
1#
小濤 發(fā)表于 2018-6-14 16:49:27 | 只看該作者 |倒序?yàn)g覽 |閱讀模式

注冊(cè)登錄后可以在線提問(wèn),行業(yè)從業(yè)者將幫助您解答!

您需要 登錄 才可以下載或查看,沒(méi)有賬號(hào)?請(qǐng)用中文注冊(cè)用戶!

×

NAND Flash 在嵌入式系統(tǒng)中有著廣泛的應(yīng)用,負(fù)載平均和壞塊管理是與之相關(guān)的兩個(gè)核心議題。Uboot Linux 系統(tǒng)對(duì) NAND 的操作都封裝了對(duì)這兩個(gè)問(wèn)題的處理方法。 本文首先介紹了現(xiàn)有的幾類(lèi)壞塊管理(BBM)方法,通過(guò)分析典型嵌入式系統(tǒng)的 NAND 存儲(chǔ)表,指出了輕量級(jí)管理方法的優(yōu)勢(shì)所在,分析了當(dāng)前廣泛使用的輕量級(jí)管理方法,指出其缺陷所在并詳細(xì)說(shuō)明了改進(jìn)方法。
NAND 及其壞塊
NAND Flash 是一種高密度低成本的存儲(chǔ)體,它在各種各樣的嵌入式系統(tǒng)中獲得了廣泛的應(yīng)用, USB 存儲(chǔ)設(shè)備、SD 卡、手機(jī)、相機(jī)和固態(tài)硬盤(pán)等各種設(shè)備中使用的都是 NAND 芯片。其內(nèi)部結(jié)構(gòu)是按照塊/頁(yè)進(jìn)行組織的,一個(gè) NAND 芯片包含若干個(gè)塊,而塊內(nèi)部又是由若干個(gè)頁(yè)構(gòu)成的。NAND 芯片出廠時(shí)就可能包含若干個(gè)壞塊,在使用過(guò)程中也可能會(huì)產(chǎn)生新的壞塊,當(dāng)一個(gè)塊被標(biāo)記為壞塊后,不應(yīng)再對(duì)其寫(xiě)入數(shù)據(jù),以免出現(xiàn)數(shù)據(jù)丟失。由于 NAND 擦寫(xiě)次數(shù)是有限的,而且會(huì)在使用過(guò)程中產(chǎn)生新的壞塊,一般都需要額外的軟件或硬件來(lái)配合它進(jìn)行使用。
NAND 壞塊管理方法分類(lèi)
目前,NAND 壞塊管理方法可分為如下幾類(lèi):
· 基于 FTL 芯片的壞塊管理
它使用一個(gè)額外的 FTL (Flash Translation Layer)芯片對(duì) NAND 進(jìn)行管理,對(duì)外部屏蔽了壞塊信息,U 盤(pán)、SD 卡、MMC 卡以及固態(tài)硬盤(pán)都使用這種管理方法。這種方式簡(jiǎn)化了 NAND 操作,但也使壞塊信息對(duì)外部而言不可見(jiàn),如果系統(tǒng)中出現(xiàn)了可能和壞塊相關(guān)的問(wèn)題,定位和調(diào)試變得困難,另外,FTL 芯片也需要額外的硬件成本。
· 基于NAND 文件系統(tǒng)的壞塊管理
JFFS2YAFFS2、 FlashFx 這些專(zhuān)門(mén)針對(duì) NAND 的文件系統(tǒng)可以對(duì)壞塊進(jìn)行管理。
· NAND 管理中間件
有一些中間件(Middleware)專(zhuān)門(mén)用于 NAND 管理,比如 UBI。
· 輕量級(jí) NAND 壞塊管理
對(duì) NAND 進(jìn)行管理的硬件或軟件模塊,不僅提供壞塊管理,同時(shí)也支持對(duì) NAND 的擦寫(xiě)操作進(jìn)行負(fù)載平均。而輕量級(jí)的壞塊管理只專(zhuān)注于壞塊,并不提供擦寫(xiě)負(fù)載平均的支持,而且,它也不依賴于任何第三方的庫(kù)。因此,輕量級(jí)的壞塊管理方式降低了系統(tǒng)的復(fù)雜度,而且免去了加載文件系統(tǒng)或初始化中間件的時(shí)間,在嵌入式系統(tǒng)中有著廣泛的應(yīng)用。
1 展示了幾種典型的嵌入式系統(tǒng)中 NAND 內(nèi)部的內(nèi)容布局。如果需要頻繁地對(duì) NAND 寫(xiě)入各種數(shù)據(jù),最好使用 NAND 文件系統(tǒng)或者 NAND 管理中間件對(duì)需要寫(xiě)入的區(qū)域進(jìn)行管理。而那些很少需要更新的區(qū)域,比如 bootloader、VPD Kernel,只需進(jìn)行輕量級(jí)的壞塊管理,不需要進(jìn)行負(fù)載平均。很多的嵌入式系統(tǒng)中,需要寫(xiě)入 NAND 的數(shù)據(jù)量很少,頻度也較低,比如車(chē)載一體機(jī)POS金融終端、PLC 等,這些系統(tǒng)完全可以僅使用輕量級(jí)的壞塊管理方式。
Uboot 的輕量級(jí)壞塊管理方法
NAND 壞塊管理都是基于壞塊表(BBT)的,通過(guò)這張表來(lái)標(biāo)識(shí)系統(tǒng)中的所有壞塊。所以,不同的管理方法之間的差異可以通過(guò)以下幾個(gè)問(wèn)題來(lái)找到答案。
· 如何初始化和讀取壞塊表?
· 產(chǎn)生新的壞塊時(shí),如何標(biāo)記并更新壞塊表?
· 如何保存壞塊表?是否有保存時(shí)斷電保護(hù)機(jī)制?
· 對(duì) NAND 寫(xiě)入數(shù)據(jù)時(shí),如果當(dāng)前塊是壞塊,如何找到可替換的好塊?
Uboot 是目前使用最為廣泛的 bootloader,它提供了兩種輕量級(jí)壞塊管理方法,可稱之為基本型和改進(jìn)型。通過(guò)下表,我們可以看到兩者的差異。
1. Uboot 的兩種壞塊管理方法對(duì)比
基本型
改進(jìn)型
初始化、讀取 BBT
系統(tǒng)每次初始化時(shí),掃描整個(gè) NAND,讀取所有塊的出廠壞塊標(biāo)志,建立 BBT,占用較多啟動(dòng)時(shí)間。
系統(tǒng)第一次初始化時(shí),掃描整個(gè)清單 1. BBM 頭信個(gè) NAND 建立 BBT。之后每次初始化時(shí),掃描 BBT 所在區(qū)域,如果發(fā)現(xiàn)當(dāng)前塊的簽名和壞塊表的簽名(一個(gè)特定的字符串)相符,就讀取當(dāng)前塊的數(shù)據(jù)作為 BBT。
更新 BBT
擦寫(xiě)操作產(chǎn)生新的壞塊時(shí),更新內(nèi)存中的 BBT,同時(shí)將壞塊的出廠壞塊標(biāo)記從 0xFF 改為 0x00。
擦寫(xiě)出錯(cuò)后仍然對(duì)壞塊進(jìn)行操作—更改出廠壞塊標(biāo)記,存在安全風(fēng)險(xiǎn)。而且,也無(wú)法區(qū)分哪些是出廠壞塊,哪些是使用過(guò)程中產(chǎn)生的壞塊。
擦寫(xiě)操作產(chǎn)生新的壞塊時(shí),更新內(nèi)存中的 BBT,同時(shí)將更新后的 BBT 立刻寫(xiě)入 NAND 或其他 NVRAM 中。
保存 BBT
不保存
在 NAND 或其他 NVRAM 中保存一份,無(wú)掉電保護(hù)機(jī)制。
壞塊替換方法
如果當(dāng)前塊是壞塊,將數(shù)據(jù)寫(xiě)入下一個(gè)塊。
如果當(dāng)前塊是壞塊,將數(shù)據(jù)寫(xiě)入下一個(gè)塊。
雖然 uboot 的改進(jìn)型壞塊管理方法的做了一些改進(jìn),但它仍然有三個(gè)主要的缺點(diǎn)。
1. 出現(xiàn)壞塊,則將數(shù)據(jù)順序?qū)懭胂乱粋€(gè)好塊。如果 NAND 中存放了多個(gè)軟件模塊,則每個(gè)模塊都需要預(yù)留一個(gè)較大的空間作為備用的好塊,這會(huì)浪費(fèi)較多的 NAND 空間。通常,每個(gè)模塊預(yù)留的備用好塊數(shù)為 NAND 芯片所允許的最大壞塊數(shù),該值因不同的芯片而有所不同,典型值為 20 80。假設(shè) NAND 是大頁(yè)類(lèi)型,總共有 N 個(gè)模塊,則總共需要預(yù)留的空間大小為 N*80*128KB。
2. 讀取 BBT 時(shí)僅檢查簽名,沒(méi)有對(duì) BBT 的數(shù)據(jù)做校驗(yàn)。
3. 沒(méi)有掉電保護(hù)機(jī)制。如果在保存 BBT 時(shí)斷電,BBT 將丟失。
改進(jìn)的輕量級(jí)壞塊管理方法
針對(duì)現(xiàn)有管理方法的缺陷,本文提出了一種更加安全高效的管理方法,將從以下三個(gè)方面闡述其實(shí)現(xiàn)原理。
共用好塊池機(jī)制
首先,使用一個(gè)統(tǒng)一的備用好塊池,為所有存放在 NAND 中的模塊提供可替換的好塊。這樣,就不需要在每個(gè)模塊后面放置一個(gè)保留區(qū),提高了 NAND 的空間利用率。


為了實(shí)現(xiàn)共用好塊池,需要建立一個(gè)從壞塊到好塊的映射,所以,除了 BBT 之外,還需定義一個(gè)替換表(SBT)。這樣一來(lái),當(dāng)讀第 i 個(gè)塊的數(shù)據(jù)時(shí),如果發(fā)現(xiàn) BBT 中記錄該塊為壞塊,就去 SBT 中查詢其替換塊;如果寫(xiě)第 i 個(gè)塊出錯(cuò),需要在 BBT 中標(biāo)記該塊為壞塊,同時(shí)從好塊池中獲取一個(gè)新的好塊,假設(shè)其序號(hào)為 j,然后將此好塊的序號(hào) j 寫(xiě)入 SBT 中的第 i 個(gè)字節(jié),而且 SBT 的第 j 個(gè)字節(jié)寫(xiě)序號(hào) i。SBT 中的這種雙向映射可確保數(shù)據(jù)的可靠性。此外,好塊池中的塊也有可能成為壞塊,如果掃描時(shí)發(fā)現(xiàn)是壞塊,則將 SBT 中的對(duì)應(yīng)位置標(biāo)記為 0x00,如果是在寫(xiě)的過(guò)程中出錯(cuò),則除了在 SBT 對(duì)應(yīng)位置標(biāo)記 0x00 之外,還要更新雙向映射數(shù)據(jù)。
3. BBT/SBT 映射示意圖
安全的 BBT/SBT 數(shù)據(jù)校驗(yàn)機(jī)制
傳統(tǒng)方法僅檢查 BBT 所在塊的簽名,將讀到的前幾個(gè)字節(jié)和一個(gè)特征字符串進(jìn)行比較,如果一致,就認(rèn)為當(dāng)前塊的數(shù)據(jù)為 BBT,然后讀取接下來(lái)的 BBT 數(shù)據(jù),但并不對(duì) BBT 的數(shù)據(jù)做校驗(yàn)。如果 BBT 保存在 NAND 中,數(shù)據(jù)的有效性是可以得到驗(yàn)證的,因?yàn)?NAND 控制器或驅(qū)動(dòng)一般都會(huì)對(duì)數(shù)據(jù)做 ECC 校驗(yàn)。但是,大多數(shù)控制器使用的 ECC 算法也僅僅能糾正一個(gè) bit、發(fā)現(xiàn) 2 兩個(gè) bit 的錯(cuò)誤。如果 BBT 保存在其他的沒(méi)有 ECC 校驗(yàn)機(jī)制的存儲(chǔ)體中,比如 NOR Flash,沒(méi)有對(duì) BBT 的數(shù)據(jù)進(jìn)行校驗(yàn)顯然是不安全的。
為了更加可靠和靈活地驗(yàn)證 BBT/SBT 數(shù)據(jù),定義下面這個(gè)結(jié)構(gòu)體來(lái)描述 BBM 信息。
清單 1. BBM 頭信息
typedef struct {
UINT8     acSignature[4];/* BBM 簽名 */
UINT32    ulBBToffset;/* BBT 偏移 */
UINT32    ulSBToffset;/* SBT 偏移 */
UINT16    usBlockNum;/* BBM 管理的 block 數(shù)目 */   
UINT16    usSBTstart;/* SBT 所在位置的起始 block 序號(hào) */
UINT16    usSBtop;/* SBT top block */
UINT16    usSBnum;/* SBT number */
UINT32    ulBBTcrc;/* BBT 數(shù)據(jù) CRC 校驗(yàn)碼 */
UINT32    ulSBTcrc;/* SBT 數(shù)據(jù) CRC 校驗(yàn)碼 */
UINT32    ulHeadcrc;/* BBM 頭信息 CRC 校驗(yàn)碼 */
} BBM_HEAD
使用三重 CRC 校驗(yàn)機(jī)制,無(wú)論 BBT 保存在哪種存儲(chǔ)體中,都可以更加嚴(yán)格地驗(yàn)證數(shù)據(jù)的有效性。
安全的掉電保存機(jī)制
傳統(tǒng)的方法僅保存一份 BBT 數(shù)據(jù),如果在寫(xiě) BBT 時(shí)系統(tǒng)掉電,則 BBT 丟失,系統(tǒng)將可能無(wú)法正常啟動(dòng)或工作。為安全起見(jiàn),本文所述方法將同時(shí)保留三個(gè)備份,如果在寫(xiě)某個(gè)備份時(shí)掉電,則還有兩個(gè)完好的備份。最壞的情況是,如果在寫(xiě)第一個(gè)備份時(shí)掉電,則當(dāng)前最新的一個(gè)壞塊信息丟失。
讀取壞塊表時(shí),順序讀取三個(gè)備份,如果發(fā)現(xiàn)三個(gè)備份的數(shù)據(jù)不一致,用記錄的壞塊數(shù)最多的備份為當(dāng)前的有效備份,同時(shí)立刻更新另外兩備份。


本版積分規(guī)則

QQ|返回首頁(yè)|有問(wèn)題掃碼關(guān)注公眾號(hào)|LED控制卡 ( 魯ICP備18053106號(hào) 魯公安網(wǎng)備案號(hào)37170202666047 ) keywords:LED顯示屏 LED控制卡 LED顯示屏配件 麒麟電子

GMT+8, 2025-9-18 06:57

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回復(fù) 返回頂部 返回列表