NAND Flash檔案系統方案及其可靠性設計

2021-08-01 12:00:31 字數 3774 閱讀 7479

nand flash檔案系統方案及其可靠性設計

隨著嵌入式系統在消費電子,資料採集和工業控制等領域得到越來越廣泛的應用。各個領域都對嵌入式系統提出了更高的要求。作為嵌入式系統中最重要的組成部分,儲存系統呈現出了較快的發展速度。nand flash作為一種安全、快速的儲存體,具有體積小、容量大、成本低、以及更多的擦除次數等一系列優點,已成為嵌入式系統中資料和程式最主要的載體。由於nand flash在結構和操作方式上與硬碟、e2rom等其他儲存介質有較大區別,使用nand flash時必須根據其自身特性,對檔案系統進行特殊設計,以保證系統的效能達到最優。同時由於工藝和使用環境的問題,nand flash儲存器中不可避免的會出現壞塊,因此必須提出有效的壞塊處理方法,以解決壞塊問題,實現儲存系統的高可靠性。 

1 nand flash特點 

1.1 區塊結構 

nand flash儲存器內部分為若干個儲存單元塊(block),每個儲存單元塊又分為若干個頁(page),儲存單元塊是最小的擦除單位,頁是寫入資料的最小單位。 

1.2 先擦後寫 

由於flash的寫操作只能將資料位從1寫成0,不能從0寫成1,所以在對儲存器進行寫入之前必須先執行擦操作,將預寫入的資料位初始化為1。擦操作的最小單位是乙個區塊,而不是單個位元組。 

1.3 操作指令 

nand flash的操作不能像ram那樣,直接對目標位址進行匯流排操作。比如執行一次寫操作,它必須完成一段時序才能將資料寫入到flash中。 

1.4 壞塊 

nand flash的壞塊是隨機分布的,可能在出廠時就存在壞塊,也可能在使用過程中,導致某些區塊的損壞。區塊一旦損壞,將無法進行修復。如果對已損壞的區塊進行操作,可能會帶來不可**的錯誤。 

2 nand flash 檔案系統的設計 

將整個檔案系統分為兩個層次,第一層,直接和物理硬體接觸,管理flash物理儲存器,第二層,在基層之上,實現檔案管理,如實現fat。 

2.1 第一層 

2.1.1 實體地址到邏輯位址的對映 

為了在nand flash實體地址和fat操作的邏輯位址之間建立乙個好的對映關係,須對nand flash的儲存空間在邏輯上進行了重新定義。物理上整個flash劃分為若干儲存單元塊,每個儲存單元塊內部分成若干物理頁,每個物理頁又可以分為基本的資料區和其它資訊保留區(如安全性)。邏輯上將整個儲存器劃分為若干簇,以簇作為最小儲存單位。確定好簇和物理頁及物理區塊的對應關係後,實體地址到邏輯位址的對映也就確定了。 

2.1.2可靠性設計 

乙個完善的檔案系統需要有良好的可靠性。籠統的講,可靠性的實現,需要儲存器資訊的支援。 

2.1.3 均衡擦寫次數 

由於nand flash有一定的使用壽命,所以要盡量避免頻繁地對同一塊位址操作,以免造成區域性單元提前損壞,可以設計演算法,將nand flash中要更新的資料直接寫入乙個空塊中,降低由於nand flash先擦除後寫入的特性帶來的對塊的頻繁擦除。 

2.2 fat設計 

在nand flash上,建立了fat檔案系統來對檔案操作進行管理。將fat檔案系統具體分為以下四部分: 

2.2.1 fat的引導區 

該引導區存放**所需的資訊及最重要的檔案系統資訊。這些資訊包括了nand flash儲存器的型別、容量以及劃分成多少個簇;每個簇包含多少扇區、fat表數目、保留扇區數、根目錄的首簇號及根目錄入口數、版本資訊等等。引導扇區是在格式化nand flash時生成的。

2.2.2 fat的檔案分配表 

檔案分配表存放檔案所占用的儲存空間簇鏈以及nand flash儲存器的占用和空閒空間的情況。為了防止檔案分配表損壞而引起檔案的丟失,可以在系統中儲存兩個相同的檔案分配表 

(下轉第1324頁) 

(上接第1320頁) 

fat1和fat2,以改善其安全性。在檔案系統的操作中,程式對fat表結構的兩個備份進行順次修改,以此確保flash儲存器上總是存有一整套完好的檔案分配表。系統對fat表的訪問原理如下:訪問檔案時先從要目錄中找到該檔案的目錄項,從中讀出首簇號。然後在fat中找到從該首簇號開始的簇鏈,簇鏈上的簇號即為檔案依次存放的位置,這樣便可以進行資料讀寫了。 

2.2.3 fat的根目錄區 

fat的根目錄區是固定大小的緊跟在fat表後的區域。fat16中將從fat區之後緊跟的32個扇區作為根目錄區,可以儲存512個目錄項。每個目錄項記錄了該檔案的檔名、檔案屬性、檔案大小、檔案建立的日期和時間以及檔案在資料區中所佔的首簇號,即該檔案在fat表中的入口等資料。 

2.2.4 fat的資料區 

資料區存在檔案的資料內容。檔案系統對資料區的儲存空間是按簇進行劃分和管理的。 

3 nand flash可靠性設計 

由於工藝和使用環境的問題,nand flash 儲存器中不可避免的會出現壞塊,這一弱點長期影響儲存的可靠性,帶來不可**的後果,因此如果能解決壞塊問題,將大大提公升nand flash 的可靠性。本文提出一種在檔案系統底層解決壞塊問題的方法,即利用flash儲存器上未使用的空間來代替壞塊,同時在fat表中標記出損壞的壞塊資訊,避免以後對壞塊進行讀寫。具體方案如下。 

3.1 壞塊發現 

nand flash對儲存器的寫入採用先擦後寫的流程,擦除的最小單位為1個block,寫入的最小單位為乙個page。在寫入資料時,先在記憶體中申請1個block大小的緩衝區,然後在儲存空間找到要寫入資料的page所在的block,將該block全部讀入緩衝區,在緩衝區中將資料寫入相應的page,寫完後,將該block寫入flash,若在寫入flash時多次報錯則判定該block為壞塊 

3.2 壞塊處理 

3.2.1 在記憶體裡建立檔案系統的反向簇鏈,方便進行壞塊的替換。 

3.2.2 備份壞塊對應簇的fat表項,在fat表中標記出該壞塊的資訊。 

3.2.3 尋找替換空間 

以1個block包含32個page,1個簇包含16個page,即1個block包含2個簇為例進行說明,壞塊n包含x,x+1簇,首先從flash的末尾處開始尋找空閒塊,找到即進行整塊的替換,見圖1。 

圖1 替代塊 

若一直尋找到資料區的開頭都沒有空閒塊,則重新尋找空閒簇,以簇為單位進行替換,如圖2,假設y,z分別為x,x+1的替換簇,由於簇在物理空間上並不一定連續,因此在進行簇的替換時可能會出現3種情況: 

情況1:替換簇不在壞塊中,即y,z不在壞塊n中 

處理方法:直接進行簇的替換,將備份的索引號,直接賦值給替換簇的fat表項,同時更新反向簇鏈。 

情況2:替換簇在壞塊中,即y或者z也在壞塊n中,這時要再分兩種情況 

情況2.1 替換簇在被替換簇之前 

處理方法:因為替換簇自己在之前已經被替換,所以要備份之前更新fat表時替換的新簇簇號,根據兩壞簇間距離,到替換簇號備份中查詢其應對應的簇號,來更新當前簇的鏈結,同時更新反向fat表。 

情況2.2 替換簇在被替換簇之後 

處理方法:因為替換簇是壞簇,其替換的位置未知,所以只更新反向fat表,其本身的fat表項到更新替換簇的前續節點時再做更新。最後查詢反向fat表,將替換的各個新簇接回其前續節點。 

圖2 替代簇 

如果fat表中已經沒有空閒簇則報錯,該方案完成。 

使用一塊32m的nand flash,將測試**先寫入一塊資料,然後讀出資料進行校驗的方法對上述方案進行論證,通過兩個星期反覆的讀寫,結論為:在沒有採用壞塊處理程式之前,由於壞塊的存在,導致寫入的資料在大約12m之後全部丟失,採用壞塊處理程式之後,執行的兩周內沒有任何校驗錯誤。由此可見其可靠性得到很大提公升。 

4 結語 

通過上述對nand flash檔案系統的設計,使得nand flash的效能大大優化,能夠滿足各個領域對嵌入式儲存器越來越高的要求,同時在面對nand flash所固有的壞塊問題上,通過上述壞塊處理的演算法,很好的解決了在nand flash 儲存介質上運用fat檔案系統的壞塊問題,增加了整個嵌入式系統的儲存可靠性。

檔案系統 why檔案系統

為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...

檔案系統 檔案系統的架構

vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...

檔案系統 編寫檔案系統

8.5 編寫乙個檔案系統 如果寫乙個實際檔案系統,但是涉及的東西太多,不容易簡明扼要的理解檔案系統的實現。linux核心中提供的romfs檔案系統是個非常理想的例子,既有實際應用架構,也清晰明了,故以romfs為例項分析檔案系統的實現。一 linux檔案系統的實現要素 編寫新檔案系統涉及一些基本物件...