HR 250-5000 為了解決這一問題,一個較好的方法是將FLASH的各個操作指令以及結(jié)構(gòu)特性按照統(tǒng)一的格式存放到FLASH中固定位置。系統(tǒng)初始化時,將這個結(jié)構(gòu)讀入系統(tǒng),通過分析這個結(jié)構(gòu),可以獲得關(guān)于芯片所有相關(guān)信息,包括操作指令,區(qū)塊分布等等。這樣,系統(tǒng)可以輕松實現(xiàn)對不同型號FLASH的所有操作,極大地提高了設(shè)備的擴展性。
3.2 雙模式文件系統(tǒng)設(shè)計
嵌入式系統(tǒng)中文件數(shù)據(jù)的存放一般有兩種結(jié)構(gòu),一種是索引格式的線性結(jié)構(gòu),一種是非線性的鏈表式結(jié)構(gòu)。這兩種結(jié)構(gòu)各有優(yōu)缺點。比如對于系統(tǒng)配置、點陣字庫等一些具有固定結(jié)構(gòu)的系統(tǒng)數(shù)據(jù),索引結(jié)構(gòu)比鏈表式結(jié)構(gòu)更有效率。但對于經(jīng)常更新的用戶數(shù)據(jù),鏈表式結(jié)構(gòu)要比索引結(jié)構(gòu)更靈活。如果系統(tǒng)能將兩種結(jié)構(gòu)集成,勢必能將性能發(fā)揮到最優(yōu)。
實現(xiàn)這種集成的方法是將設(shè)備定義成若干個分區(qū),每個分區(qū)相互獨立,不同分區(qū)可以使用不同的文件模式。這樣,不同類型的數(shù)據(jù)就可以根據(jù)自己的屬性選擇存放的分區(qū)。比如系統(tǒng)數(shù)據(jù)存放在使用索引線性結(jié)構(gòu)的分區(qū),用戶數(shù)據(jù)存放在使用鏈式非線性結(jié)構(gòu)的分區(qū)。
3.3 壞塊處理
FLASH中的壞塊處理是一件很棘手的問題,如果沒有有效的管理,對系統(tǒng)的穩(wěn)定性會造成嚴重影響。一個可行的解決方法是生成一張壞塊表,壞塊表中記錄所有壞塊的塊號,并且按塊號從小到大排序,壞塊表在讀寫過程中動態(tài)更新。當讀寫數(shù)據(jù)時,遍歷壞塊表中的塊號,將文件的邏輯地址轉(zhuǎn)換成對應FLASH 物理地址,以保證所用的FLASH地址空間不存在壞塊。
4 系統(tǒng)實現(xiàn)
4.1 結(jié)構(gòu)定義
系統(tǒng)的存儲結(jié)構(gòu)如圖1所示,在FLASH的Block0位置存放整個系統(tǒng)最重要的數(shù)據(jù)——系統(tǒng)記錄SR(System Record)。選擇Block0的原因是一般FLASH出廠時,都能保證Block0是完好的,因此可以避免壞塊問題帶來的不便。SR其實就是一個定義好的數(shù)據(jù)結(jié)構(gòu),它包括媒質(zhì)信息和文件系統(tǒng)信息兩部分。媒質(zhì)信息包括FLASH存儲器的類型、容量、塊類型的大小和數(shù)量(BlockInfo)、FLASH 操作命令(CommandInfo)等。文件系統(tǒng)信息包括版本信息、各邏輯分區(qū)的起始地址(物理地址)和結(jié)束地址。FLASH設(shè)備可以被分成一個或多個邏輯分區(qū),每個邏輯分區(qū)采用的操作方式可以互不相同,如圖1中Device0分區(qū)采用的是線性文件系統(tǒng),Device1分區(qū)采用的是鏈式文件系統(tǒng)。如果采用的是線性文件系統(tǒng),在分區(qū)信息后面加入文件索引表INDEX起始地址、大小等信息;如果采用的是鏈式文件系統(tǒng),則加入文件系統(tǒng)頁大小、文件分配表FAT和文件登記表FRT所在的位置等信息。
文件登記表FRT位于FAT后的頁中,存放著邏輯分區(qū)中文件的信息,如文件總數(shù)、每個文件的文件代號、位置、長度以及校驗模式。其中,校驗模式用來標識文件讀寫時采用差錯校驗的級別。不同類型的文件采用不同級別的校驗方式。0級不進行校驗,1級ECC校驗,2級逐個字節(jié)比較。
對于線性文件系統(tǒng)分區(qū),所有文件順序存儲,讀取數(shù)據(jù)時,直接通過INDEX索引得到某個文件的邏輯起始地址,然后從這個地址開始順序搜索,獲取某個偏移位置下的n個連續(xù)Byte。鏈式文件系統(tǒng)是將地址空間分成若干個等分,即Sector,它是操作的最小單位;一個大文件可以分布在不連續(xù)的多個 Sector中,然后通過FAT表將它們連接起來;在FLASH介質(zhì)上實現(xiàn)鏈式文件系統(tǒng),Sector大小的選擇是一個關(guān)鍵,由于FLASH的寫操作,擦操作是以Page,Block為單位的,設(shè)小了使大塊結(jié)構(gòu)的FLASH寫操作復雜,設(shè)多了又浪費空間,因此最好的選擇是將Sector大小設(shè)為擦操作的最小單位16K。
整個邏輯分區(qū)中,INDEX,FAT,FRT表中的內(nèi)容非常重要,一旦因為異常產(chǎn)生錯誤,可能會影響到所有文件;所以,這三個文件都做了備份處理,備份存放于不同的Block中。同時,在對他們處理時,改寫表中的更新狀態(tài)。0xff表示開始更新,0x00表示更新結(jié)束。在文件系統(tǒng)初始化時,讀取它們的更新狀態(tài),如果表中的更新狀態(tài)為0xff,說明該表存在操作異常,可用備份表更正。
----商務熱線---廈門興銳達自動化設(shè)備有限公司
聯(lián)系人:王文光
++QQ:2851759104
手機:15359273780
電話:0592-5580707 400-855-5103轉(zhuǎn)001
傳真:0592-5361289
郵箱:2851759103@qq.com
網(wǎng)址:http://www.xmxrdauto.com
FOXBORO IPM2-P0904HA ?。保?
SANYO DENKI 103H548-0410 1
SUMTAK IRH320-1000-203 1
AB 1756-L55M13 5
Yaskawa CP-9200SH/CPU 1
Yaskawa CP-9200SH/SVA 1
AB 1756-M14 1
AB 1756-M13 1
ABB AF100K02 2
siemens 6EW1860-3AA 1
AB 2711-K10C15 1
AB 1756-L62/B 1
AB 80190-320-03-R 1
TELTONE TLS-5D-01 1
AB 1756-L61 1
2013.10.28--11.2
MODICON 416NHM30030 1
AB 1756-L61/B 1
AB 1756-L55M13 1
FOXBORO P0914SY FBM204 15
FOXBORO P0914YM FCM10E 4
FOXBORO P0916TA FBM242 3