?

STM32與eMMC通信的存儲系統設計

2019-01-17 03:11,,,
單片機與嵌入式系統應用 2018年12期
關鍵詞:存儲設備扇區字節

,,,

(1.中北大學 信息與通信工程學院,太原 030051;2.北京航空航天大學;3.北京鐳航世紀科技有限公司)

引 言

在目前的存儲系統中,存儲介質扮演著非常重要的角色,如固態硬盤SSD、NAND Flash、eMMC等。這些存儲介質各具特色:SSD具有寫入速度快、功耗低、讀取延遲小等優勢,但其封裝體積較大;NAND Flash芯片具有存儲容量大、價格便宜等優點,但存在兼容性差、操作復雜度高、需要過多關注壞塊管理、損耗均衡以及誤碼率等一些固有的缺陷[1]。在充分考慮存儲芯片的封裝體積、容量、帶寬要求等參數后,本系統選用eMMC作為存儲設備。eMMC是一種內嵌式存儲芯片,具有接口簡單、存儲容量大、傳輸速度快和集成度高等優點[2],eMMC將NAND Flash和主控芯片封裝成一個微型的BGA芯片,內部集成Flash控制器,主要包括ECC糾錯機制、平均擦寫存儲區塊技術、壞區管理、掉電保護等控制技術。

為了滿足存儲系統快速啟動、緊急掉電數據保護、便捷導出等設計要求,本系統采用STM32F7作為控制器,使用SDIO接口掛載eMMC,并通過高速USB接口將其實現為USB大容量存儲設備,計算機可通過USB接口直接對記錄文件進行導出操作。記錄文件通過自己建立的文件系統進行初始化,記錄過程中數據直接由eMMC讀寫驅動寫入文件數據區。這樣存儲系統可以在不進行USB大容量存儲設備枚舉的情況下實現快速啟動進行數據記錄,并且在緊急掉電情況下記錄文件不會受到損壞,同時數據仍然可以通過USB對大容量存儲設備的訪問實現導出。

1 系統硬件設計

系統選用由意法半導體公司生產的采用Cortex-M7內核的STM32系列32位處理器STM32F7,該處理器性能優異、功耗超低、集成度高,搭配SDIO控制接口,提供高速USB接口,并內置高速USB PHY,極大地簡化了外圍電路設計。選用鎂光公司的MTFC64GAKAEEY-4M IT作為存儲芯片,存儲容量為64 GB,可支持的最大時鐘頻率為52 MHz,SDR模式下連續寫數據能力最大可達40 MB/s,連續讀數據能力最大可達90 MB/s[4]。

圖1 系統總體框圖

存儲系統主要由STM32控制模塊、eMMC存儲模塊和電源模塊三部分組成。系統總體框圖如圖1所示。

其中,控制模塊通過SDIO接口與eMMC進行通信,SDIO接口包括時鐘信號CLK、命令信號CMD和4位數據線DAT0~DAT3[5]。

2 eMMC驅動設計

圖2 多塊讀過程時序

數據記錄和文件系統的實現均以存儲設備的底層驅動為基礎,本系統存儲設備為eMMC,其底層驅動主要包括eMMC初始化,eMMC的讀、寫等。

2.1 eMMC初始化

設備的初始化過程為:eMMC收到軟件復位命令CMD0或者進行硬件復位后,就切換到Idle狀態,STM32首先發送CMD1命令來獲取eMMC的工作條件;然后通過發送廣播命令CMD2,eMMC向STM32回應其獨一無二的設備識別號;完成識別之后,eMMC切換到Identification狀態;接著STM32發送CMD3命令為eMMC分配唯一的相對地址,用于數據傳輸模式下對eMMC進行尋址選定,eMMC只要收到相對地址RCA,其狀態就切換到Stand-by,eMMC初始化完成。

2.2 eMMC讀/寫驅動操作

eMMC和STM32之間的數據傳輸是通過DAT數據線進行的,本系統數據寬度為4位,數據讀寫過程在SDR模式下進行。

2.2.1 讀驅動

數據讀過程包括單塊讀和多塊讀兩種類型,本系統采用多塊讀方式。多塊讀過程包括兩種形式:一種形式是通過CMD18命令預先指定讀取的塊數,所有數據塊讀取結束之后自動返回到數據傳輸狀態;另外一種形式是開放式讀取,不設定讀取塊數,設備會持續發出數據直到收到主機的停止傳輸命令,本文采用第一種方式。本系統設定連續讀數據長度為32塊。

多塊讀流程為:STM32首先發送CMD16命令設置單塊的長度為512字節,設置結束后,發送eMMC芯片多塊讀命令CMD18,包含讀起始地址參數,并指定連續讀數據長度為32塊。多塊讀只需發送一次CMD18命令,每讀取一塊,讀取塊數就加1,數據線間隔NAC個時鐘周期之后接著讀取下一塊數據,直至讀取到第32塊,多塊讀結束[6]。多塊讀過程時序如圖2所示。

2.2.2 寫驅動

數據寫過程包括單塊寫和多塊寫兩種類型,本系統采用多塊寫方式。多塊寫分為兩種方式,一種是設置預定塊數的寫入,另一種是開放式流寫入,本系統采用第一種方式[5],設定連續寫數據長度為32塊。

多塊寫流程為:STM32首先發送CMD16命令設置單塊長度為512字節,設置結束后,發送多塊寫命令CMD25,包含起始扇區地址,并指定連續寫數據長度為32塊。待eMMC芯片收到響應后,就可以進行寫操作,一旦CMD25響應錯誤或超時,則需要再次發送。當設定為寫入塊數方式時,命令結束NWR個時鐘周期之后則開始寫入數據。每一塊后面都會進行CRC校驗,以確保寫入數據正確[7]。每正確寫入一塊,寫入塊數就加1,直至寫數據到第32塊時,數據將開始編程寫入Flash陣列。多塊寫過程時序如圖3所示。

圖3 多塊寫過程時序

3 FAT32文件系統設計

為了有效管理eMMC寫入的數據,使記錄數據能夠以文件形式被訪問和導出,必須將eMMC中的數據以文件形式存儲,需要在eMMC中創建常用的可以被Windows系統訪問的文件系統。本設計中采用FAT32文件系統。

3.1 FAT32文件系統簡介

FAT32文件系統是Windows98操作系統為改善磁盤管理而推出的一項新的文件管理系統。FAT32文件系統實際上就是用32位數據來描述磁盤簇分配[8]。FAT32分區的數據結構由MBR、DBR、保留扇區、FAT表和目錄及數據區5部分組成。FAT32文件系統的結構特點如下:

① MBR即主引導扇區,位于整個硬盤的0 磁道0 柱面1 扇區,包括硬盤主引導記錄MBR和分區表DPT兩部分,主要用于檢查分區表是否正確并確定引導分區的地址,同時便于在程序結束時把引導分區的啟動程序調入內存加以執行。

② DBR即操作系統引導扇區。一般占用512字節,該扇區由跳轉指令、操作系統名稱和版本號、BPB區、擴展BPB區、結束標志和DOS引導程序區組成。其中BPB記錄本分區的每簇扇區數、每扇區字節數、FAT表數、FAT表扇區數及根目錄簇號等重要參數。表1為FAT32文件系統的DBR數據結構。

表1 FAT32文件系統的DBR數據結構

③ 保留扇區位于FAT32文件系統起始部分,由若干個扇區組成,該扇區的大小記錄在DBR扇區中。

④ FAT表的含義是文件分配表,該區是FAT32文件系統管理磁盤空間和文件的最重要區域。它通過位示圖法來保存邏輯盤數據區各簇使用情況信息。文件所占用的存儲空間及空閑空間的管理都是通過它來實現的。FAT32一般包含兩份FAT,FAT1是第一份,即主FAT,位于邏輯32扇區。在FAT表中,每簇占用4字節,其中開頭的8字節用來存放該盤介質類型編號。如果某個文件占用很多簇,則第一個FAT項用于記錄下一個FAT項簇號,如果這個文件結束了,則用“0FFF FFFF”表示。

⑤ 目錄及數據區主要由根目錄、子目錄和文件內容三個部分組成[11]。在存儲時以簇為單位,其中2號簇被分配給根目錄使用。每個目錄項占用32個字節,可以是長文件名目錄項、文件目錄項、子目錄項等。本系統使用短文件名。

3.2 本文件系統設計

本系統在eMMC上移植FAT32文件系統。系統上電后,計算機通過高速USB接口將eMMC識別為一個USB大容量存儲設備,因而不需要進行分區。系統數據帶寬為5 MB/s,存儲時間為3 min,則單個文件占用的最大存儲容量為900 MB,本系統設定的單個文件固定大小為2 000 MB。設定FAT32文件系統的DBR參數如下:每扇區字節數為512、每個簇占用32個扇區、保留扇區數為32、FAT表數為1、每個FAT表所用扇區數為28 225、根目錄第1簇的簇號為2,計算出單個文件占用128 000個簇,系統文件使用短文件名。

4 測 試

4.1 文件系統

系統上電后,計算機可將eMMC識別為一個USB大容量存儲設備,可用容量為55.1 GB,計算機識別eMMC如圖4所示。

圖4 計算機識別eMMC

打開USB設備,可以看到設備內存在兩個文件DATA_001和DATA_002,并且每個文件大小為2 048 000 KB,即2 000 MB,與系統設定的文件大小一致,文件內容如圖5所示。

圖5 文件內容

用WinHex打開USB設備,可以看到文件系統結構如圖6所示。

圖6 文件系統結構

使用WinHex打開啟動扇區,FAT32文件系統的引導扇區DBR數據如圖7所示。

圖7 引導扇區DBR

可以看到每扇區字節數為512、每個簇為32扇區、保留扇區數為32、FAT表數為1即FAT1、每個FAT的扇區數為28 225、根目錄起始簇號是2,與設定的參數一致。

4.2 存 儲

(1)根目錄起始偏移地址定位

根目錄起始扇區=保留扇區數+FAT×1+(起始簇-2)×每簇的扇區數,由引導扇區DBR中可知根目錄起始簇號為2,所以求得根目錄起始扇區為32+28 225+(2-2)×32=28 257,則FAT表所在的起始偏移位置為DCC200。DCC200處的內容如圖8所示,可以看到根目錄起始扇區與圖6顯示一致。

圖8 根目錄起始偏移地址

(2)第一個文件位置的定位

將系統的多路串口數據以數據流形式寫入數據區。第一個文件開始扇區=根目錄開始扇區+(簇編號-2)×每簇的扇區數,第一個文件簇編號為128,則第一個文件扇區為28 257+(128-2)×32=32 289,則第一個文件所在的起始偏移位置為FC400,第一個文件數據如圖9所示,可以看出第一個文件扇區地址與圖6顯示的一致,且數據為連續數據流。

圖9 第一個文件數據

4.3 數據導出

系統記錄的數據是直接通過eMMC寫驅動寫入記錄文件數據區,可以通過USB直接復制記錄文件實現數據導出。復制文件DATA_001到計算機桌面,數據導出過程如圖10所示。

圖10 數據導出過程

結 語

猜你喜歡
存儲設備扇區字節
分階段調整增加扇區通行能力策略
No.8 字節跳動將推出獨立出口電商APP
No.10 “字節跳動手機”要來了?
U盤故障排除經驗談
簡談MC7字節碼
Windows 7下USB存儲設備接入痕跡的證據提取
基于Flash芯片的新型存儲設備數據恢復技術研究
基于貝葉斯估計的短時空域扇區交通流量預測
重建分區表與FAT32_DBR研究與實現
用批處理管理計算機USB設備的使用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合