基于FLASH介質嵌入式存儲方案的設計與實現
1 引言 FLASH(閃速存儲器)作為一種安全、快速的存儲體,具有體積小、容量大、成本低、掉電數據不丟失等一系列優(yōu)點,已成為嵌入式系統(tǒng)中數據和程序最主要的載體。由于FLASH在結構和操作方式上與硬盤、E2ROM等其他存儲介質有較大區(qū)別,使用FLASH時必須根據其自身特性,對存儲系統(tǒng)進行特殊設計,以保證系統(tǒng)的性能達到最優(yōu)。 2 FLASH的特點 1.區(qū)塊結構 2.先擦后寫 3.操作指令 4.位反轉 5.壞塊 3 關鍵設計 對于NOR FLASH,數據的讀操作可以通過獨立的數據總線和地址總線快速完成,然而NOR FLASH的其他操作需要通過特殊的指令來完成,更糟糕的是不同廠商生產的芯片這些指令互不相同。這就導致了設備的不兼容。 對于NAND FLASH,也存在這樣的問題。NAND FLASH可以根據相同的指令讀取芯片的廠商號和設備號,從而通過識別設備號調用對應的時序流程實現操作。但是,系統(tǒng)中太多的判斷,會使得程序的結構變得非常復雜。所以,在一定的條件下,NAND FLASH設備還是不兼容的。 為了解決這一問題,一個較好的方法是將FLASH的各個操作指令以及結構特性按照統(tǒng)一的格式存放到FLASH中固定位置。系統(tǒng)初始化時,將這個結構讀入系統(tǒng),通過分析這個結構,可以獲得關于芯片所有相關信息,包括操作指令,區(qū)塊分布等等。這樣,系統(tǒng)可以輕松實現對不同型號FLASH的所有操作,極大地提高了設備的擴展性。 3.2 雙模式文件系統(tǒng)設計 嵌入式系統(tǒng)中文件數據的存放一般有兩種結構,一種是索引格式的線性結構,一種是非線性的鏈表式結構。這兩種結構各有優(yōu)缺點。比如對于系統(tǒng)配置、點陣字庫等一些具有固定結構的系統(tǒng)數據,索引結構比鏈表式結構更有效率。但對于經常更新的用戶數據,鏈表式結構要比索引結構更靈活。如果系統(tǒng)能將兩種結構集成,勢必能將性能發(fā)揮到最優(yōu)。 實現這種集成的方法是將設備定義成若干個分區(qū),每個分區(qū)相互獨立,不同分區(qū)可以使用不同的文件模式。這樣,不同類型的數據就可以根據自己的屬性選擇存放的分區(qū)。比如系統(tǒng)數據存放在使用索引線性結構的分區(qū),用戶數據存放在使用鏈式非線性結構的分區(qū)。 3.3 壞塊處理 4 系統(tǒng)實現 | |
系統(tǒng)的存儲結構如圖1所示,在FLASH的Block0位置存放整個系統(tǒng)最重要的數據——系統(tǒng)記錄SR(System Record)。選擇Block0的原因是一般FLASH出廠時,都能保證Block0是完好的,因此可以避免壞塊問題帶來的不便。SR其實就是一個定義好的數據結構,它包括媒質信息和文件系統(tǒng)信息兩部分。媒質信息包括FLASH存儲器的類型、容量、塊類型的大小和數量(BlockInfo)、FLASH 操作命令(CommandInfo)等。文件系統(tǒng)信息包括版本信息、各邏輯分區(qū)的起始地址(物理地址)和結束地址。FLASH設備可以被分成一個或多個邏輯分區(qū),每個邏輯分區(qū)采用的操作方式可以互不相同,如圖1中Device0分區(qū)采用的是線性文件系統(tǒng),Device1分區(qū)采用的是鏈式文件系統(tǒng)。如果采用的是線性文件系統(tǒng),在分區(qū)信息后面加入文件索引表INDEX起始地址、大小等信息;如果采用的是鏈式文件系統(tǒng),則加入文件系統(tǒng)頁大小、文件分配表FAT和文件登記表FRT所在的位置等信息。
文件登記表FRT位于FAT后的頁中,存放著邏輯分區(qū)中文件的信息,如文件總數、每個文件的文件代號、位置、長度以及校驗模式。其中,校驗模式用來標識文件讀寫時采用差錯校驗的級別。不同類型的文件采用不同級別的校驗方式。0級不進行校驗,1級ECC校驗,2級逐個字節(jié)比較。 對于線性文件系統(tǒng)分區(qū),所有文件順序存儲,讀取數據時,直接通過INDEX索引得到某個文件的邏輯起始地址,然后從這個地址開始順序搜索,獲取某個偏移位置下的n個連續(xù)Byte。鏈式文件系統(tǒng)是將地址空間分成若干個等分,即Sector,它是操作的最小單位;一個大文件可以分布在不連續(xù)的多個 Sector中,然后通過FAT表將它們連接起來;在FLASH介質上實現鏈式文件系統(tǒng),Sector大小的選擇是一個關鍵,由于FLASH的寫操作,擦操作是以Page,Block為單位的,設小了使大塊結構的FLASH寫操作復雜,設多了又浪費空間,因此最好的選擇是將Sector大小設為擦操作的最小單位16K。 整個邏輯分區(qū)中,INDEX,FAT,FRT表中的內容非常重要,一旦因為異常產生錯誤,可能會影響到所有文件;所以,這三個文件都做了備份處理,備份存放于不同的Block中。同時,在對他們處理時,改寫表中的更新狀態(tài)。0xff表示開始更新,0x00表示更新結束。在文件系統(tǒng)初始化時,讀取它們的更新狀態(tài),如果表中的更新狀態(tài)為0xff,說明該表存在操作異常,可用備份表更正。 4.2 層次接口
1.操作系統(tǒng)層 在整個存儲系統(tǒng)中,操作系統(tǒng)扮演的是使用者的角色。當需要數據時,它通過調用文件系統(tǒng)層提供的接口函數獲取數據,它不關心數據的來源和正確性。 2.文件系統(tǒng)層 3.驅動層 5 結論 |
評論