劉振海 駱冬根 王改 董浩 洪津
摘 ?要: 針對(duì)現(xiàn)有的嵌入式存儲(chǔ)系統(tǒng)中存在的存儲(chǔ)速度慢、接口復(fù)雜等問題,提出并實(shí)現(xiàn)一種基于Compact FLASH(CF)卡和STM32微處理器的數(shù)據(jù)存儲(chǔ)系統(tǒng),并進(jìn)行了FatFs文件系統(tǒng)移植。該系統(tǒng)通過STM32微處理器帶有的靈活的靜態(tài)存儲(chǔ)器控制器(FSMC)接口實(shí)現(xiàn)Memory模式下CF卡存儲(chǔ)器的擴(kuò)展,同時(shí),測(cè)試并分析實(shí)現(xiàn)最大寫入速度的條件。測(cè)試結(jié)果表明,在CF卡Memory模式下,每次申請(qǐng)扇區(qū)數(shù)為128時(shí),可以達(dá)到最大10 MB/s的平均連續(xù)寫入速度;該方案存儲(chǔ)速度快、實(shí)現(xiàn)簡(jiǎn)單,適用于對(duì)存儲(chǔ)速度和容量均有要求的場(chǎng)合。
關(guān)鍵詞: 數(shù)據(jù)存儲(chǔ)系統(tǒng); STM32微處理器; FSMC接口; Compact FLASH卡; Memory模式; FatFs
中圖分類號(hào): TN919?34; TP274; TP216 ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ? ? ? ? ? ? ? 文章編號(hào): 1004?373X(2019)10?0015?04
Design of CF card data storage system based on FSMC interface
LIU Zhenhai1,2, LUO Donggen1, WANG Gai1, DONG Hao1, HONG Jin1
(1. Key Laboratory of Optical Calibration and Characterization, Anhui Institute of Optics and Fine Mechanics, Chinese Academy of Sciences, Hefei 230031, China; 2. University of Chinese Academy of Sciences, Beijing 100039, China)
Abstract: In allusion to the slow storage speed and complex interface problems existing in the current embedded storage system, a data storage system based on the Compact FLASH (CF) card and STM32 microprocessor is proposed and implemented, and the FatFs file system is transplanted. In the system, the CF card memory expansion in the Memory mode is realized by using the flexible static memory controller (FSMC) interface provided by the STM32 microprocessor. The conditions for achieving the maximum write?in speed are tested and analyzed. The test results show that the average continuous write?in speed of the system can reach up to 10 MB/s as the sector number applied for each time is 128 in the Memory mode of the CF card, and the scheme has a fast storage speed, is easy to be implemented, and applicable in occasions where both the storage speed and capacity requirements are needed.
Keywords: data storage system; STM32 microprocessor; FSMC interface; Compact FLASH card; Memory mode; FatFs
SD卡和Micro SD卡工作模式類似,支持SD和SPI兩種操作模式,硬件電路接口簡(jiǎn)單,但軟件協(xié)議復(fù)雜,且支持SD模式的控制器較少,一般應(yīng)用中采用SPI模式[1?5]。SPI模式的缺點(diǎn)是無法實(shí)現(xiàn)較高的讀/寫速度,數(shù)據(jù)寫入速度通常在3 MB/s以內(nèi)[5],只適用于對(duì)讀/寫速度要求不高的系統(tǒng)。比較而言,CF卡接口使用8/16位的并行數(shù)據(jù)總線,意味著控制器端在相同的頻率下可以實(shí)現(xiàn)更高的數(shù)據(jù)讀/寫速度,可以通過普通I/O口模擬[6?7]或帶有專用外設(shè)的控制器[8?9]實(shí)現(xiàn)CF卡控制,且接口協(xié)議簡(jiǎn)單,軟件實(shí)現(xiàn)較為方便。
本文在STM32F103ZET6微處理器基礎(chǔ)上給出一種基于FSMC接口的CF卡數(shù)據(jù)存儲(chǔ)方案,解決了開發(fā)中的關(guān)鍵問題,并進(jìn)行了FatFs文件系統(tǒng)移植。目前該方案已在某型航空遙感系統(tǒng)中得到應(yīng)用。
1 ?存儲(chǔ)器接口
1.1 ?CF卡
CF卡最先是由SanDisk公司推出的,并于1995年形成行業(yè)標(biāo)準(zhǔn),由CF卡聯(lián)盟(CFA)負(fù)責(zé)規(guī)范制定和升級(jí)維護(hù),其容量由最初的4 MB增加到現(xiàn)在的256 GB,讀/寫速度也大大提升。CF卡內(nèi)嵌控制芯片和閃存模塊,其中控制芯片用來實(shí)現(xiàn)與外部主機(jī)的連接及控制數(shù)據(jù)在閃存模塊中的傳輸,而閃存模塊用于存儲(chǔ)信息[10]。CF卡兼容3.3 V和5 V兩種工作電壓,并支持3種接口訪問模式,分別為符合PCMCIA規(guī)范的PC CARD Memory 模式,I/O模式以及符合ATA規(guī)范的True IDE模式。
1.2 ?FSMC存儲(chǔ)器控制器
STM32F103ZET6是基于ARM Cortex?M3內(nèi)核的32位低功耗微處理器,主頻達(dá)72 MHz,帶有豐富的GPIO和外設(shè),并且集成了FSMC模塊。該模塊支持PC卡/CF卡,SRAM,PSRAM,NOR和NAND FLASH等存儲(chǔ)器,可以將AHB總線協(xié)議轉(zhuǎn)換成相應(yīng)的外部設(shè)備協(xié)議,以滿足訪問外設(shè)時(shí)的時(shí)序要求。
Cortex?M3支持4 GB映射存儲(chǔ)空間,由FSMC管理0x6000000~0x9FFFFFFF對(duì)應(yīng)的共1 GB地址空間,用來擴(kuò)展外部存儲(chǔ)器。FSMC共分4個(gè)子模塊,分別為AHB總線接口(包括FSMC的配置寄存器)、NOR FLASH/PSRAM控制器、NAND FLASH/PC Card控制器和外部存儲(chǔ)器接口。FSMC擁有4個(gè)Bank連接外部存儲(chǔ)器,每個(gè)Bank固定大小為256 MB,又劃分為4 個(gè)64 MB 的Region,每個(gè)Bank和Region有獨(dú)立的寄存器。其中,Bank4支持的設(shè)備類型為PC卡/CF卡,Region1對(duì)應(yīng)通用存儲(chǔ)空間。Bank4對(duì)應(yīng)存儲(chǔ)映射和時(shí)序寄存器見表1。
FSMC只支持PCMCIA規(guī)范下的PC CARD Memory 模式和I/O模式,而不支持ATA規(guī)范下的True IDE模式[11]。Memory 模式為上電默認(rèn)模式,若進(jìn)入I/O模式需對(duì)FSMC配置寄存器的conf5~conf0做進(jìn)一步配置。本方案采用Memory 模式。
表1 ?Bank4對(duì)應(yīng)存儲(chǔ)映射和時(shí)序寄存器
[Bank 映射地址范圍 存儲(chǔ)空間 時(shí)序寄存器 其他寄存器 Bank4
PC卡/CF卡 0x9C000000~0x9FFFFFFF I/O FSMC_PIO4(0xB0) FSMC_PCR4(0A0h)FSMC_SR4(0A4h) 0x98000000~0x9BFFFFFF 屬性 FSMC_PATT4(0xAC) 0x90000000~0x93FFFFFF 通用 FSMC_PMEM4(0xA8) ]
2 ?硬件接口電路設(shè)計(jì)
Memory 模式下CF卡與STM32F103ZET6的連接關(guān)系如圖1所示。
圖1中,-CD1和-CD2腳在CF卡內(nèi)部被接地,同為低電平表示CF卡已可靠加載。STM32F103ZET6通過 CD腳來檢測(cè)CF卡,高電平有效,-CD1和-CD2信號(hào)需經(jīng)過或非門反相后連接CD。需要注意的是,微處理器在進(jìn)行CF卡初始化操作前應(yīng)先確定CF卡已加載,否則程序會(huì)進(jìn)入hard fault中斷。置高-OE信號(hào)將使CF卡加電即進(jìn)入Memory模式。在Memory模式下只需訪問CF卡通用存儲(chǔ)空間,因此將44腳(-REG)配置為高電平。-OE,-WE為存儲(chǔ)器模式下的讀/寫使能信號(hào),用于從CF卡中讀/寫數(shù)據(jù)。-CE2,-CE1為CF卡選擇信號(hào)并指示是8位還是16位操作。CF卡端地址線A3和A10接地,使用A0~A2完成CF卡各Task file寄存器的選擇。CF的37腳(READY)在存儲(chǔ)器模式下為空閑/忙信號(hào),當(dāng)該腳被置高時(shí)表示CF卡已準(zhǔn)備好接收新的數(shù)據(jù),被置低則表示當(dāng)前CF卡忙,不能進(jìn)行數(shù)據(jù)傳輸操作。-WAIT(42腳)為CF卡輸出信號(hào),用來指示外部主控延遲當(dāng)前操作。
圖1 ?Memory模式接口電路連接關(guān)系圖
3 ?軟件設(shè)計(jì)
為了便于文件操作和管理,并能夠被PC機(jī)識(shí)別,需要文件系統(tǒng)來實(shí)現(xiàn)。目前主流文件系統(tǒng)有μC/FS,F(xiàn)atFs等。其中FatFs為免費(fèi)、開源且被廣泛使用的嵌入式文件系統(tǒng),支持FAT12,F(xiàn)AT16和FAT32文件格式。因此,本系統(tǒng)采用FatFs文件系統(tǒng)并進(jìn)行了移植,程序部分包括FSMC外設(shè)的配置、CF卡底層驅(qū)動(dòng)程序的編寫和FatFs文件系統(tǒng)的移植。
3.1 ?FSMC外設(shè)的配置
為了使FSMC產(chǎn)生的驅(qū)動(dòng)時(shí)序能滿足CF卡Memory模式的要求,需要進(jìn)行FSMC相關(guān)時(shí)序寄存器的合理配置。該模式下只需訪問通用存儲(chǔ)空間,其對(duì)應(yīng)時(shí)序寄存器為FSMC_PMEM4,定義如表2所示。
根據(jù)Memory模式下CF卡讀寫時(shí)序要求[10]計(jì)算FSMC時(shí)序寄存器各參數(shù)取值,且參數(shù)MEMWAIT4和MEMSET4數(shù)值應(yīng)減一。FSMC實(shí)際的時(shí)序輸出結(jié)果與設(shè)置結(jié)果有偏差,應(yīng)以實(shí)測(cè)時(shí)序?yàn)闇?zhǔn)。使用的STM32固件庫由ST官方提供,版本為V3.5。FSMC初始化時(shí)各時(shí)序寄存器配置分別為:SetupTime=0x01,WaitSetupTime=0x03,HoldSetupTime=0x02,HiZSetupTime= 0x00。
表2 ?通用存儲(chǔ)空間時(shí)序寄存器FSMC_PMEM4定義
[位號(hào) 參數(shù) 名稱 參數(shù)定義 Bits31:24 MEMHIZ4 數(shù)據(jù)總線
高阻時(shí)間 執(zhí)行對(duì)CF卡的寫操作后,數(shù)據(jù)總線需要保持一段時(shí)間的高阻狀態(tài) Bits23:16 MEMHOLD4 保持時(shí)間 讀/寫操作時(shí),以HCLK數(shù)目定義發(fā)送命令后地址/數(shù)據(jù)信號(hào)保持時(shí)間 Bits15:8 MEMWAIT4 等待時(shí)間 讀/寫操作時(shí),以HCLK(+1)數(shù)目定義保持命令的最小時(shí)間 ? ? ? ? ? ? Bits7:0 MEMSET4 建立時(shí)間 ?讀/寫操作時(shí),以HCLK(+1)數(shù)目 ? ?定義發(fā)送命令前建立地址信號(hào)