,,,
(1.中北大學(xué) 信息與通信工程學(xué)院,太原 030051;2.北京航空航天大學(xué);3.北京鐳航世紀(jì)科技有限公司)
在目前的存儲系統(tǒng)中,存儲介質(zhì)扮演著非常重要的角色,如固態(tài)硬盤SSD、NAND Flash、eMMC等。這些存儲介質(zhì)各具特色:SSD具有寫入速度快、功耗低、讀取延遲小等優(yōu)勢,但其封裝體積較大;NAND Flash芯片具有存儲容量大、價格便宜等優(yōu)點(diǎn),但存在兼容性差、操作復(fù)雜度高、需要過多關(guān)注壞塊管理、損耗均衡以及誤碼率等一些固有的缺陷[1]。在充分考慮存儲芯片的封裝體積、容量、帶寬要求等參數(shù)后,本系統(tǒng)選用eMMC作為存儲設(shè)備。eMMC是一種內(nèi)嵌式存儲芯片,具有接口簡單、存儲容量大、傳輸速度快和集成度高等優(yōu)點(diǎn)[2],eMMC將NAND Flash和主控芯片封裝成一個微型的BGA芯片,內(nèi)部集成Flash控制器,主要包括ECC糾錯機(jī)制、平均擦寫存儲區(qū)塊技術(shù)、壞區(qū)管理、掉電保護(hù)等控制技術(shù)。
為了滿足存儲系統(tǒng)快速啟動、緊急掉電數(shù)據(jù)保護(hù)、便捷導(dǎo)出等設(shè)計要求,本系統(tǒng)采用STM32F7作為控制器,使用SDIO接口掛載eMMC,并通過高速USB接口將其實(shí)現(xiàn)為USB大容量存儲設(shè)備,計算機(jī)可通過USB接口直接對記錄文件進(jìn)行導(dǎo)出操作。記錄文件通過自己建立的文件系統(tǒng)進(jìn)行初始化,記錄過程中數(shù)據(jù)直接由eMMC讀寫驅(qū)動寫入文件數(shù)據(jù)區(qū)。這樣存儲系統(tǒng)可以在不進(jìn)行USB大容量存儲設(shè)備枚舉的情況下實(shí)現(xiàn)快速啟動進(jìn)行數(shù)據(jù)記錄,并且在緊急掉電情況下記錄文件不會受到損壞,同時數(shù)據(jù)仍然可以通過USB對大容量存儲設(shè)備的訪問實(shí)現(xiàn)導(dǎo)出。
系統(tǒng)選用由意法半導(dǎo)體公司生產(chǎn)的采用Cortex-M7內(nèi)核的STM32系列32位處理器STM32F7,該處理器性能優(yōu)異、功耗超低、集成度高,搭配SDIO控制接口,提供高速USB接口,并內(nèi)置高速USB PHY,極大地簡化了外圍電路設(shè)計。選用鎂光公司的MTFC64GAKAEEY-4M IT作為存儲芯片,存儲容量為64 GB,可支持的最大時鐘頻率為52 MHz,SDR模式下連續(xù)寫數(shù)據(jù)能力最大可達(dá)40 MB/s,連續(xù)讀數(shù)據(jù)能力最大可達(dá)90 MB/s[4]。
圖1 系統(tǒng)總體框圖
存儲系統(tǒng)主要由STM32控制模塊、eMMC存儲模塊和電源模塊三部分組成。系統(tǒng)總體框圖如圖1所示。
其中,控制模塊通過SDIO接口與eMMC進(jìn)行通信,SDIO接口包括時鐘信號CLK、命令信號CMD和4位數(shù)據(jù)線DAT0~DAT3[5]。
圖2 多塊讀過程時序
數(shù)據(jù)記錄和文件系統(tǒng)的實(shí)現(xiàn)均以存儲設(shè)備的底層驅(qū)動為基礎(chǔ),本系統(tǒng)存儲設(shè)備為eMMC,其底層驅(qū)動主要包括eMMC初始化,eMMC的讀、寫等。
設(shè)備的初始化過程為:eMMC收到軟件復(fù)位命令CMD0或者進(jìn)行硬件復(fù)位后,就切換到Idle狀態(tài),STM32首先發(fā)送CMD1命令來獲取eMMC的工作條件;然后通過發(fā)送廣播命令CMD2,eMMC向STM32回應(yīng)其獨(dú)一無二的設(shè)備識別號;完成識別之后,eMMC切換到Identification狀態(tài);接著STM32發(fā)送CMD3命令為eMMC分配唯一的相對地址,用于數(shù)據(jù)傳輸模式下對eMMC進(jìn)行尋址選定,eMMC只要收到相對地址RCA,其狀態(tài)就切換到Stand-by,eMMC初始化完成。
eMMC和STM32之間的數(shù)據(jù)傳輸是通過DAT數(shù)據(jù)線進(jìn)行的,本系統(tǒng)數(shù)據(jù)寬度為4位,數(shù)據(jù)讀寫過程在SDR模式下進(jìn)行。
2.2.1 讀驅(qū)動
數(shù)據(jù)讀過程包括單塊讀和多塊讀兩種類型,本系統(tǒng)采用多塊讀方式。多塊讀過程包括兩種形式:一種形式是通過CMD18命令預(yù)先指定讀取的塊數(shù),所有數(shù)據(jù)塊讀取結(jié)束之后自動返回到數(shù)據(jù)傳輸狀態(tài);另外一種形式是開放式讀取,不設(shè)定讀取塊數(shù),設(shè)備會持續(xù)發(fā)出數(shù)據(jù)直到收到主機(jī)的停止傳輸命令,本文采用第一種方式。本系統(tǒng)設(shè)定連續(xù)讀數(shù)據(jù)長度為32塊。
多塊讀流程為:STM32首先發(fā)送CMD16命令設(shè)置單塊的長度為512字節(jié),設(shè)置結(jié)束后,發(fā)送eMMC芯片多塊讀命令CMD18,包含讀起始地址參數(shù),并指定連續(xù)讀數(shù)據(jù)長度為32塊。多塊讀只需發(fā)送一次CMD18命令,每讀取一塊,讀取塊數(shù)就加1,數(shù)據(jù)線間隔NAC個時鐘周期之后接著讀取下一塊數(shù)據(jù),直至讀取到第32塊,多塊讀結(jié)束[6]。多塊讀過程時序如圖2所示。
2.2.2 寫驅(qū)動
數(shù)據(jù)寫過程包括單塊寫和多塊寫兩種類型,本系統(tǒng)采用多塊寫方式。多塊寫分為兩種方式,一種是設(shè)置預(yù)定塊數(shù)的寫入,另一種是開放式流寫入,本系統(tǒng)采用第一種方式[5],設(shè)定連續(xù)寫數(shù)據(jù)長度為32塊。
多塊寫流程為:STM32首先發(fā)送CMD16命令設(shè)置單塊長度為512字節(jié),設(shè)置結(jié)束后,發(fā)送多塊寫命令CMD25,包含起始扇區(qū)地址,并指定連續(xù)寫數(shù)據(jù)長度為32塊。待eMMC芯片收到響應(yīng)后,就可以進(jìn)行寫操作,一旦CMD25響應(yīng)錯誤或超時,則需要再次發(fā)送。當(dāng)設(shè)定為寫入塊數(shù)方式時,命令結(jié)束NWR個時鐘周期之后則開始寫入數(shù)據(jù)。每一塊后面都會進(jìn)行CRC校驗(yàn),以確保寫入數(shù)據(jù)正確[7]。每正確寫入一塊,寫入塊數(shù)就加1,直至寫數(shù)據(jù)到第32塊時,數(shù)據(jù)將開始編程寫入Flash陣列。多塊寫過程時序如圖3所示。
圖3 多塊寫過程時序
為了有效管理eMMC寫入的數(shù)據(jù),使記錄數(shù)據(jù)能夠以文件形式被訪問和導(dǎo)出,必須將eMMC中的數(shù)據(jù)以文件形式存儲,需要在eMMC中創(chuàng)建常用的可以被Windows系統(tǒng)訪問的文件系統(tǒng)。本設(shè)計中采用FAT32文件系統(tǒng)。
FAT32文件系統(tǒng)是Windows98操作系統(tǒng)為改善磁盤管理而推出的一項(xiàng)新的文件管理系統(tǒng)。FAT32文件系統(tǒng)實(shí)際上就是用32位數(shù)據(jù)來描述磁盤簇分配[8]。FAT32分區(qū)的數(shù)據(jù)結(jié)構(gòu)由MBR、DBR、保留扇區(qū)、FAT表和目錄及數(shù)據(jù)區(qū)5部分組成。FAT32文件系統(tǒng)的結(jié)構(gòu)特點(diǎn)如下:
① MBR即主引導(dǎo)扇區(qū),位于整個硬盤的0 磁道0 柱面1 扇區(qū),包括硬盤主引導(dǎo)記錄MBR和分區(qū)表DPT兩部分,主要用于檢查分區(qū)表是否正確并確定引導(dǎo)分區(qū)的地址,同時便于在程序結(jié)束時把引導(dǎo)分區(qū)的啟動程序調(diào)入內(nèi)存加以執(zhí)行。
② DBR即操作系統(tǒng)引導(dǎo)扇區(qū)。一般占用512字節(jié),該扇區(qū)由跳轉(zhuǎn)指令、操作系統(tǒng)名稱和版本號、BPB區(qū)、擴(kuò)展BPB區(qū)、結(jié)束標(biāo)志和DOS引導(dǎo)程序區(qū)組成。其中BPB記錄本分區(qū)的每簇扇區(qū)數(shù)、每扇區(qū)字節(jié)數(shù)、FAT表數(shù)、FAT表扇區(qū)數(shù)及根目錄簇號等重要參數(shù)。表1為FAT32文件系統(tǒng)的DBR數(shù)據(jù)結(jié)構(gòu)。
表1 FAT32文件系統(tǒng)的DBR數(shù)據(jù)結(jié)構(gòu)
③ 保留扇區(qū)位于FAT32文件系統(tǒng)起始部分,由若干個扇區(qū)組成,該扇區(qū)的大小記錄在DBR扇區(qū)中。
④ FAT表的含義是文件分配表,該區(qū)是FAT32文件系統(tǒng)管理磁盤空間和文件的最重要區(qū)域。它通過位示圖法來保存邏輯盤數(shù)據(jù)區(qū)各簇使用情況信息。文件所占用的存儲空間及空閑空間的管理都是通過它來實(shí)現(xiàn)的。FAT32一般包含兩份FAT,F(xiàn)AT1是第一份,即主FAT,位于邏輯32扇區(qū)。在FAT表中,每簇占用4字節(jié),其中開頭的8字節(jié)用來存放該盤介質(zhì)類型編號。如果某個文件占用很多簇,則第一個FAT項(xiàng)用于記錄下一個FAT項(xiàng)簇號,如果這個文件結(jié)束了,則用“0FFF FFFF”表示。
⑤ 目錄及數(shù)據(jù)區(qū)主要由根目錄、子目錄和文件內(nèi)容三個部分組成[11]。在存儲時以簇為單位,其中2號簇被分配給根目錄使用。每個目錄項(xiàng)占用32個字節(jié),可以是長文件名目錄項(xiàng)、文件目錄項(xiàng)、子目錄項(xiàng)等。本系統(tǒng)使用短文件名。
本系統(tǒng)在eMMC上移植FAT32文件系統(tǒng)。系統(tǒng)上電后,計算機(jī)通過高速USB接口將eMMC識別為一個USB大容量存儲設(shè)備,因而不需要進(jìn)行分區(qū)。系統(tǒng)數(shù)據(jù)帶寬為5 MB/s,存儲時間為3 min,則單個文件占用的最大存儲容量為900 MB,本系統(tǒng)設(shè)定的單個文件固定大小為2 000 MB。設(shè)定FAT32文件系統(tǒng)的DBR參數(shù)如下:每扇區(qū)字節(jié)數(shù)為512、每個簇占用32個扇區(qū)、保留扇區(qū)數(shù)為32、FAT表數(shù)為1、每個FAT表所用扇區(qū)數(shù)為28 225、根目錄第1簇的簇號為2,計算出單個文件占用128 000個簇,系統(tǒng)文件使用短文件名。
系統(tǒng)上電后,計算機(jī)可將eMMC識別為一個USB大容量存儲設(shè)備,可用容量為55.1 GB,計算機(jī)識別eMMC如圖4所示。
圖4 計算機(jī)識別eMMC
打開USB設(shè)備,可以看到設(shè)備內(nèi)存在兩個文件DATA_001和DATA_002,并且每個文件大小為2 048 000 KB,即2 000 MB,與系統(tǒng)設(shè)定的文件大小一致,文件內(nèi)容如圖5所示。
圖5 文件內(nèi)容
用WinHex打開USB設(shè)備,可以看到文件系統(tǒng)結(jié)構(gòu)如圖6所示。
圖6 文件系統(tǒng)結(jié)構(gòu)
使用WinHex打開啟動扇區(qū),F(xiàn)AT32文件系統(tǒng)的引導(dǎo)扇區(qū)DBR數(shù)據(jù)如圖7所示。
圖7 引導(dǎo)扇區(qū)DBR
可以看到每扇區(qū)字節(jié)數(shù)為512、每個簇為32扇區(qū)、保留扇區(qū)數(shù)為32、FAT表數(shù)為1即FAT1、每個FAT的扇區(qū)數(shù)為28 225、根目錄起始簇號是2,與設(shè)定的參數(shù)一致。
(1)根目錄起始偏移地址定位
根目錄起始扇區(qū)=保留扇區(qū)數(shù)+FAT×1+(起始簇-2)×每簇的扇區(qū)數(shù),由引導(dǎo)扇區(qū)DBR中可知根目錄起始簇號為2,所以求得根目錄起始扇區(qū)為32+28 225+(2-2)×32=28 257,則FAT表所在的起始偏移位置為DCC200。DCC200處的內(nèi)容如圖8所示,可以看到根目錄起始扇區(qū)與圖6顯示一致。
圖8 根目錄起始偏移地址
(2)第一個文件位置的定位
將系統(tǒng)的多路串口數(shù)據(jù)以數(shù)據(jù)流形式寫入數(shù)據(jù)區(qū)。第一個文件開始扇區(qū)=根目錄開始扇區(qū)+(簇編號-2)×每簇的扇區(qū)數(shù),第一個文件簇編號為128,則第一個文件扇區(qū)為28 257+(128-2)×32=32 289,則第一個文件所在的起始偏移位置為FC400,第一個文件數(shù)據(jù)如圖9所示,可以看出第一個文件扇區(qū)地址與圖6顯示的一致,且數(shù)據(jù)為連續(xù)數(shù)據(jù)流。
圖9 第一個文件數(shù)據(jù)
系統(tǒng)記錄的數(shù)據(jù)是直接通過eMMC寫驅(qū)動寫入記錄文件數(shù)據(jù)區(qū),可以通過USB直接復(fù)制記錄文件實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出。復(fù)制文件DATA_001到計算機(jī)桌面,數(shù)據(jù)導(dǎo)出過程如圖10所示。
圖10 數(shù)據(jù)導(dǎo)出過程