APP下载

基于FSMC接口的CF卡数据存储系统设计

2019-06-20刘振海骆冬根王改董浩洪津

现代电子技术 2019年10期

刘振海 骆冬根 王改 董浩 洪津

摘  要: 针对现有的嵌入式存储系统中存在的存储速度慢、接口复杂等问题,提出并实现一种基于Compact FLASH(CF)卡和STM32微处理器的数据存储系统,并进行了FatFs文件系统移植。该系统通过STM32微处理器带有的灵活的静态存储器控制器(FSMC)接口实现Memory模式下CF卡存储器的扩展,同时,测试并分析实现最大写入速度的条件。测试结果表明,在CF卡Memory模式下,每次申请扇区数为128时,可以达到最大10 MB/s的平均连续写入速度;该方案存储速度快、实现简单,适用于对存储速度和容量均有要求的场合。

关键词: 数据存储系统; STM32微处理器; FSMC接口; Compact FLASH卡; Memory模式; FatFs

中图分类号: TN919?34; TP274; TP216          文献标识码: A                 文章编号: 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两种操作模式,硬件电路接口简单,但软件协议复杂,且支持SD模式的控制器较少,一般应用中采用SPI模式[1?5]。SPI模式的缺点是无法实现较高的读/写速度,数据写入速度通常在3 MB/s以内[5],只适用于对读/写速度要求不高的系统。比较而言,CF卡接口使用8/16位的并行数据总线,意味着控制器端在相同的频率下可以实现更高的数据读/写速度,可以通过普通I/O口模拟[6?7]或带有专用外设的控制器[8?9]实现CF卡控制,且接口协议简单,软件实现较为方便。

本文在STM32F103ZET6微處理器基础上给出一种基于FSMC接口的CF卡数据存储方案,解决了开发中的关键问题,并进行了FatFs文件系统移植。目前该方案已在某型航空遥感系统中得到应用。

1  存储器接口

1.1  CF卡

CF卡最先是由SanDisk公司推出的,并于1995年形成行业标准,由CF卡联盟(CFA)负责规范制定和升级维护,其容量由最初的4 MB增加到现在的256 GB,读/写速度也大大提升。CF卡内嵌控制芯片和闪存模块,其中控制芯片用来实现与外部主机的连接及控制数据在闪存模块中的传输,而闪存模块用于存储信息[10]。CF卡兼容3.3 V和5 V两种工作电压,并支持3种接口访问模式,分别为符合PCMCIA规范的PC CARD Memory 模式,I/O模式以及符合ATA规范的True IDE模式。

1.2  FSMC存储器控制器

STM32F103ZET6是基于ARM Cortex?M3内核的32位低功耗微处理器,主频达72 MHz,带有丰富的GPIO和外设,并且集成了FSMC模块。该模块支持PC卡/CF卡,SRAM,PSRAM,NOR和NAND FLASH等存储器,可以将AHB总线协议转换成相应的外部设备协议,以满足访问外设时的时序要求。

Cortex?M3支持4 GB映射存储空间,由FSMC管理0x6000000~0x9FFFFFFF对应的共1 GB地址空间,用来扩展外部存储器。FSMC共分4个子模块,分别为AHB总线接口(包括FSMC的配置寄存器)、NOR FLASH/PSRAM控制器、NAND FLASH/PC Card控制器和外部存储器接口。FSMC拥有4个Bank连接外部存储器,每个Bank固定大小为256 MB,又划分为4 个64 MB 的Region,每个Bank和Region有独立的寄存器。其中,Bank4支持的设备类型为PC卡/CF卡,Region1对应通用存储空间。Bank4对应存储映射和时序寄存器见表1。

FSMC只支持PCMCIA规范下的PC CARD Memory 模式和I/O模式,而不支持ATA规范下的True IDE模式[11]。Memory 模式为上电默认模式,若进入I/O模式需对FSMC配置寄存器的conf5~conf0做进一步配置。本方案采用Memory 模式。

表1  Bank4对应存储映射和时序寄存器

[Bank 映射地址范围 存储空间 时序寄存器 其他寄存器 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  硬件接口电路设计

Memory 模式下CF卡与STM32F103ZET6的连接关系如图1所示。

图1中,-CD1和-CD2脚在CF卡内部被接地,同为低电平表示CF卡已可靠加载。STM32F103ZET6通过 CD脚来检测CF卡,高电平有效,-CD1和-CD2信号需经过或非门反相后连接CD。需要注意的是,微处理器在进行CF卡初始化操作前应先确定CF卡已加载,否则程序会进入hard fault中断。置高-OE信号将使CF卡加电即进入Memory模式。在Memory模式下只需访问CF卡通用存储空间,因此将44脚(-REG)配置为高电平。-OE,-WE为存储器模式下的读/写使能信号,用于从CF卡中读/写数据。-CE2,-CE1为CF卡选择信号并指示是8位还是16位操作。CF卡端地址线A3和A10接地,使用A0~A2完成CF卡各Task file寄存器的选择。CF的37脚(READY)在存储器模式下为空闲/忙信号,当该脚被置高时表示CF卡已准备好接收新的数据,被置低则表示当前CF卡忙,不能进行数据传输操作。-WAIT(42脚)为CF卡输出信号,用来指示外部主控延迟当前操作。

图1  Memory模式接口电路连接关系图

3  软件设计

为了便于文件操作和管理,并能够被PC机识别,需要文件系统来实现。目前主流文件系统有μC/FS,FatFs等。其中FatFs为免费、开源且被广泛使用的嵌入式文件系统,支持FAT12,FAT16和FAT32文件格式。因此,本系统采用FatFs文件系统并进行了移植,程序部分包括FSMC外设的配置、CF卡底层驱动程序的编写和FatFs文件系统的移植。

3.1  FSMC外设的配置

为了使FSMC产生的驱动时序能满足CF卡Memory模式的要求,需要进行FSMC相关时序寄存器的合理配置。该模式下只需访问通用存储空间,其对应时序寄存器为FSMC_PMEM4,定义如表2所示。

根据Memory模式下CF卡读写时序要求[10]计算FSMC时序寄存器各参数取值,且参数MEMWAIT4和MEMSET4数值应减一。FSMC实际的时序输出结果与设置结果有偏差,应以实测时序为准。使用的STM32固件库由ST官方提供,版本为V3.5。FSMC初始化时各时序寄存器配置分别为:SetupTime=0x01,WaitSetupTime=0x03,HoldSetupTime=0x02,HiZSetupTime= 0x00。

表2  通用存儲空间时序寄存器FSMC_PMEM4定义

[位号 参数 名称 参数定义 Bits31:24 MEMHIZ4 数据总线

高阻时间 执行对CF卡的写操作后,数据总线需要保持一段时间的高阻状态 Bits23:16 MEMHOLD4 保持时间 读/写操作时,以HCLK数目定义发送命令后地址/数据信号保持时间 Bits15:8 MEMWAIT4 等待时间 读/写操作时,以HCLK(+1)数目定义保持命令的最小时间             Bits7:0 MEMSET4 建立时间  读/写操作时,以HCLK(+1)数目    定义发送命令前建立地址信号