首页 工作计划 工作总结 事迹材料 心得体会 述职报告 疫情防控 思想汇报 自查报告 党建材料 策划方案 教案设计 范文大全
  • 工作计划
  • 工作总结
  • 事迹材料
  • 心得体会
  • 述职报告
  • 疫情防控
  • 思想汇报
  • 自查报告
  • 党建材料
  • 策划方案
  • 教案设计
  • 范文大全
  • 基于FSMC接口的CF卡数据存储系统设计

    时间:2022-11-10 19:05:04 来源:正远范文网 本文已影响 正远范文网手机站


    打开文本图片集

    摘  要: 针对现有的嵌入式存储系统中存在的存储速度慢、接口复杂等问题,提出并实现一种基于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)数目    定义发送命令前建立地址信号

    的时间 ]

    3.2  底层驱动程序设计

    FatFs文件系统只包括系统层(FatFs module)和应用层(API),进行文件系统移植的关键是编写相应的底层驱动程序。底层驱动程序需要实现CF卡底层操作的基本功能,包括CF卡的检测、状态查询、单扇区/多扇区读/写等功能。启动CF卡初始化操作之前应确认CF是否正确加载,以免使系统进入hard fault中断。CF卡的状态查询、数据读/写等需要通过其Task file寄存器进行操作,Memory模式下对通用存储空间的寻址通过地址线A0~A2进行,实现0x00~0x07寄存器的访问。需要注意的是,ST官方资料显示FSMC不支持对奇地址的直接访问(对应数据总线的D15~D8),-CE2无法置为低电平[11]。对于读操作,一个解决方法是对偶地址进行16 bit读取,然后取出高字节数据。实现从CF卡指定的寄存器(数据寄存器除外)中读出一个字节数据的程序如下:

    uint8_t CF_ReadParameter(uint32_t ReadAddr)

    { uint8_t  Para8 = 0;

    uint16_t Para16 = 0;

    if(!(ReadAddr & 0x01))                        //奇偶地址判断

    { Para8 = *(__IO uint8_t *) (Bank4_PCCARD_ADDR + ReadAddr);                                                        //偶地址

    }else{

    Para16 = *(__IO uint16_t *) (Bank4_PCCARD_ADDR + ReadAddr ⁃ 0x01);                                               //奇地址

    Para8 = (uint8_t)(Para16 >> 8);              //取出高字节

    }return Para8;}

    输入参数ReadAddr为偏移地址,Bank4_PCCARD_

    ADDR对应地址0x90000000,为Bank4首地址。该语句使用指针常量,通过把整型数强制转换成地址指针类型,再取出该指针对应地址下存储的数据。该操作使得对CF卡Task file寄存器的访问变成了对FSMC相应存储空间的访问,即实现了CF卡存储空间到FSMC存储空间的映射。经实际测试发现对奇地址的写入与读出不同,可以直接进行。向CF卡指定的寄存器(数据寄存器除外)中写入一个字节的数据的程序如下:

    void CF_WriteParameter(uint32_t WriteAddr, uint8_t Para)

    {*(__IO uint8_t *) (Bank4_PCCARD_ADDR + WriteAddr) = Para;}

    数据寄存器在读/写前需要先进行相关寄存器的配置,包括扇区计数寄存器、扇区号寄存器、柱面寄存器、驱动器/磁头寄存器以及命令寄存器等。进行单扇区读、写的命令分别为0x20和0x30,多扇区读、写命令分别为0xC4和0xC5。CF卡包括物理(CHS)寻址或逻辑块寻址(LBA)两种方式,但一般采用LBA方式,主要是CF卡操作中无需转换磁头和磁道。两种方式的选择需要在驱动器/磁头寄存器中进行配置。

    数据读/写与参数读/写类似,程序中只需将偏移地址换成数据寄存器的偏移地址0x00即可,且能进一步写出单扇区和多扇区读/写函数。其中,CF卡状态判断可通过检测READY信号进行。

    3.3  FatFs文件系统移植

    移植的FatFs文件系统版本为R0.10a。移植的第一步是确认integer.h里定义的数据类型与使用的处理器是否一致。第二步是完成ffconf.h文件配置。_USE_

    LFN用于選择文件名类型,长文件名对应非零值;_MIN_SS和_MAX_SS表示所用存储器扇区字节数,一般为512;_WORD_ACCESS表示处理器数据访问类型,0表示按字节访问,1表示按字访问,与处理器高低字节的存储顺序相关,STM32微处理器为小端模式,该项可设为0或1,设置为1可以提高代码执行效率。第三步最为关键,涉及FatFs与第3.2节所述的底层驱动程序之间的接口,主要为5个硬件相关函数,分别为:disk_initialize(),disk_status(),disk_read(),disk_write()和get_fattime ()。其中,get_fattime()函数实现获取的时间与文件系统返回格式间的转换,其他函数可依照第3.2节所述进行编写。

    4  测  试

    首先对CF卡进行写入速度测试,选择的CF卡标称读取和写入速度分别为120 MB/s和85 MB/s,容量为32 GB。测试方法为,每次申请写入的扇区数分别为256个(5 000次循环)、128个、64个、16个和4个,每次写入数据量为625 MB,通过硬件系统带有的DS1305EN实时时钟,在每次开始写入数据前和全部写完后通过串口输出实时时钟时间,两个数值之差即为全部写入用时,并进行多次测试。写入速度如图2所示。

    图2  申请不同扇区数时写入速度测试结果

    可以发现,每次申请128个扇区时写入速度最快,可以达到约10 MB/s的速度,申请扇区数较小时会严重影响数据写入效率。文件系统管理的最小单元为簇,因此可通过将CF卡格式化为每簇64 KB(即128个扇区)来提高读/写速度。进一步测试发现,在进行CF卡数据写入时有两个需要处理器等待CF卡响应的时间:一个是每次数据写入完成后到CF卡可再次进行Task file寄存器配置的申请时间,通过查询状态寄存器是否为0x50可判断;另一个是每次配置完Task file寄存器并等待CF卡接收数据的申请时间,通过查询状态寄存器是否为0x58或READY信号是否置高可判断。测试发现两个时间中最大时间可达到约25 ms,这对于读/写速度要求较高的系统来说,则需要在硬件上增加缓存以防数据丢失。

    5  结  语

    本文给出FSMC与CF卡基于Memory模式下的硬件接口方案,实现了底层驱动程序的开发,并进行了FatFs文件系统的移植;此外,研究了单次申请扇区数对数据写入速度的影响及CF卡申请时间对缓存的潜在需求。实测显示,该方案实现的平均连续写入速度可达10 MB/s,特别适合应用到对存储速度和容量均有要求的场合。

    参考文献

    [1] 王监.基于Micro SD卡的存储系统设计[J].现代导航,2017,8(4):293⁃296.

    WANG Jian. Design of storage system based on Micro SD card [J]. Modern navigation, 2017, 8(4): 293⁃296.

    [2] 夏兰,贾晓冬.基于MSP430和SD卡的心电信号采集系统设计[J].现代电子技术,2015,38(21):20⁃23.

    XIA Lan, JIA Xiaodong. Design of ECG signal acquisition system based on MSP430 and SD card [J]. Modern electronics technique, 2015, 38(21): 20⁃23.

    [3] 蔡红专,刘强,陈琎.嵌入式系统中基于SPI协议的SD卡扩展实现[J].微型机与应用,2014,33(19):23⁃26.

    CAI Hongzhuan, LIU Qiang, CHEN Jin. The agreement extension of embedded systems based on SD card and SPI [J]. Microcomputer & its applications, 2014, 33(19): 23⁃26.

    [4] 刘智勇,陈鹏飞,宿磊,等.基于STM32芯片的U盤/SD卡文件传输技术研究[J].现代电子技术,2014,37(18):107⁃109.

    LIU Zhiyong, CHEN Pengfei, SU Lei, et al. Study on file transmission between U disk and SD card based on STM32 chip [J]. Modern electronics technique, 2014, 37(18): 107⁃109.

    [5] 李鸿征.高性能Micro SD卡读写器的设计与开发[J].焦作大学学报,2017,31(4):63⁃66.

    LI Hongzheng. Design and development for high⁃performance micro SD card reader [J]. Journal of Jiaozuo University, 2017, 31(4): 63⁃66.

    [6] 夏光辉,秦建军,王大成.基于FPGA的双CF卡数据采集系统设计[J].电子设计工程,2016,24(4):19⁃21.

    XIA Guanghui, QIN Jianjun, WANG Dacheng. Design of dual CF card data acquisition system based on FPGA [J]. Electronic design engineering, 2016, 24(4): 19⁃21.

    [7] 熊海军,王耀青.一种基于FPGA的多路串口控制器设计[J].测控技术,2013,32(9):137⁃139.

    XIONG Haijun, WANG Yaoqing. Design of multi⁃channel serial controller based on FPGA [J]. Measurement & control technology, 2013, 32(9): 137⁃139.

    [8] 田晓明,陈怡伶.基于ARM的嵌入式系统CF卡存储技术[J].中国测试,2010,36(3):86⁃88.

    TIAN Xiaoming, CHEN Yiling. Memory technology of CF card based on ARM embedded system [J]. China measurement & test, 2010, 36(3): 86⁃88.

    [9] 吴东兴,徐造林.基于CF卡的嵌入式文件系统设计[J].计算机技术与发展,2009,19(2):91⁃93.

    WU Dongxing, XU Zaolin. Embedded file system design based on CompactFLASH card [J]. Computer technology and development, 2009, 19(2): 91⁃93.

    [10] CompactFLASH Association. CF+ & CompactFLASH specification revision 4.1a [EB/OL]. [2008⁃12⁃22]. https:///soft/39/2013/20130506316542.html.

    推荐访问:接口 存储系统 数据 设计 FSMC