STM32的FatFS在数据采集系统中的应用
2015-07-02秦伟
秦 伟
(中煤科工集团重庆研究院有限公司,重庆400037)
秦 伟
(中煤科工集团重庆研究院有限公司,重庆400037)
针对单片机大容量数据采集系统,设计了一种以STM32F107微控制器为核心,以大容量SD卡为存储介质的数据采集系统。简述了开源的FatFS文件系统在STM32处理器上的移植及其底层驱动函数的编写,利用24位∑-Δ模/数转换器实现了高精度数据采集,利用FatFS文件系统实现了采集数据的大容量存储和管理,为数据后续处理和传输提供了便利。
STM32;FatFS文件系统;SD卡;高精度数据采集
引 言
近年来,数据采集及其应用得到了人们越来越广泛的关注,数据采集系统也有了迅速的发展,特别是以单片机为核心的数据采集系统,由于其超高的性价比,已经广泛应用于很多领域。但是传统的以51单片机为核心的数据采集系统受限于有限的存储空间和通信方式,存在实时性差、采集容量小等缺点,已无法满足数据量越来越大的现代社会的需求,大容量数据存储已成为微控制器应用的瓶颈。为突破容量的限制,一般采用外扩存储器,比如U盘、SD卡等,并移植文件系统便于对数据进行后续管理和处理。
1 采集系统方案设计
本系统由模拟量输入模块、USB传输模块、大容量存储模块和人机交互模块组成,系统框图如图1所示。模拟信号经信号调理输入模块处理后,通过模数转换器ADC转换为数字信号,再由STM32微控制器进行滤波等数据处理后,存储在SD卡里,并通过串口传输到上位机进行数据分析。
图1 采集系统方案图
1.1 STM32F107微控制器[1]
系统采用了ST公司基于ARM Cortex-M3内核的32位增强型闪存微控制器STM32F107作为控制核心。Cortex-M3内核专门用于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域的要求,采用哈佛结构,能够达到1.25 DMIPS/MHz和0.19 mW/MHz,有单周期乘法指令和硬件除法指令。该芯片最高工作频率可达到72 MHz,具有256 KB的闪存以及64 KB的SRAM,以及性能出众的片上外设(如USB、USART、SPI、I2C、GPIO、PWM、10/100M Ethernet MAC等),最大限度地实现集成,丰富的片上资源大大简化了系统硬件,同时降低了系统功耗,待机电流仅为2 μA 。
1.2 24位A/D转换器控制原理[2]
图2 A/D转换器读取时序图
1.3 SD卡简介[4]
SD卡是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型Flash存储器件。SD卡允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。SD卡使用卡内智能控制模块进行Flash操作控制,包括协议、安全算法、数据存取、ECC算法、 缺陷处理和分析、电源管理、时钟管理。SD卡被广泛使用在便携装置,如数码相机、个人数码设备和多媒体播放器等,目前SD卡容量已经进入以G为单位的时代。
1.4 FatFS文件系统[5]
图3 FatFs 模块层次结构图
FatFS是一种开源的FAT 文件系统模块,专门为小型的嵌入式系统而设计。它完全采用标准C格式语法编写,完全独立于I/O 层,只需做简单的修改即可移植到8051、PIC、AVR、SH、Z80、H8 和ARM 等系列单片机上。FatFS的特点是分离缓冲FAT结构的每个文件,可以快速访问多个文件,支持多个驱动器和分区,支持FAT12、FAT16和FAT32,支持8.3格式的文件名,优化了8/16位微控制器。FatFS的设计思想是小块的数据可以通过Buffer存储,大块的数据直接存取,提高了存取速度和效率。FatFS模块层次结构如图3所示。
2 SD卡操作
SD卡协议采用命令的方式进行数据操作[6],因此SD卡和STM32F107的通信采用发送应答机制,每发送一个命令,SD卡都会给出一个应答,以告知主机该命令的执行情况,或者返回主机请求的数据。SPI模式下常用的命令如表1所列。
2.1 SD卡初始化操作[7]
因为系统使用的是SPI模式,所以先得让卡进入SPI模式,方法如下:在SD卡收到复位(CMD0)时,CS引脚为低电平,则SPI模式被启用。不过在发送复位命令之前,要发送至少74个时钟周期,以保证SD卡内部供电电压的上升。在卡初始化的时候,时钟周期最大不能超过400 kHz,初始化完成后,才能切换到SPI高速模式。初始化流程如图4所示。
2.2 SD卡读写操作
通过SD卡初始化,可以得知卡的类型(V1、V2、V2HC或MMC),完成初始化后,可以开始通过命令读写数据。SD卡读取数据通过命令CMD17来实现,流程如图5所示。
图4 SD卡初始化流程图
命 令参 数回 应描 述CMD0(0x00)NONER1复位SD卡CMD8(0x08)VHS+CheckpatternR7发送接口状态命令CMD9(0x09)NONER1读取卡特定数据寄存器CMD10(0x0A)NONER1读取卡标志数据寄存器CMD16(0x10)块大小R1设置块大小(字节数)CMD17(0x11)地址R1读取一个块的数据CMD24(0x18)地址R1写入一个块的数据CMD41(0x29)NONER3发送给主机容量支持信息和激活卡初始化过程CMD55(0x37)NONER1告诉SD卡,下一个是特定应用命令CMD58(0x3A)NONER3读取OCR寄存器
图5 SD卡读取数据流程图
SD卡写数据和读取数据差不多,只不过是通过命令CMD24来实现。
3 FatFS文件系统移植[8]
FatFS文件系统,最顶层是应用层,使用时无需理会FatFS内部结构和复杂的Fat协议,只需要调用FatFS模块提供的API接口函数即可,比如f_open、f_read、f_write和f_close等,就像在PC机上读写文件那样简单。中间层是FatFS模块,实现了Fat文件读写协议,使用时不作修改,包含头文件即可。
需要编写移植代码的是FatFS模块提供的底层接口,它包括存储介质读写接口(disk I/O)和供给文件创建修改时间的实时时钟(RTC)。
从网站上下载FatFS的R0.09a版本源代码,解压后有两个文件夹:doc和src。前者是FatFS的说明文档,后者是源代码文件夹,移植时,只需要修改两个文件:ffconf.h和diskio.c。
首先,修改数据类型,修改integer.h,使其中定义的数据类型与keil mdk4.74编译器相对应。
其次,修改文件ffconf.h,按照需求配置相关功能。例如,_VOLUMES用于设置FatFS支持的逻辑设备数目,本系统只有一个存储设备(SD卡),所以_VOLUMES设置为1,其他设置可参考注释进行修改。
最后,编写底层函数,因为FatFS模块完全与磁盘I/O层分开,因此需要下面的函数来实现底层物理磁盘的读写与获取当前时间。打开diskio.c,进行底层驱动编写,编写6个接口函数,如图6所示。
图6 底层接口函数
DSTATUS disk_initialize()函数初始化磁盘驱动器,本系统采用SD卡作为存储介质,因此该函数主要就是对SD卡进行初始化操作,初始化成功后返回状态0。需要注意的是应用程序不能调用此函数,否则文件卷上的FAT结构可能会损坏。
DSTATUS disk_status()函数返回当前驱动器的状态,例如磁盘驱动初始化是否成功,驱动器中有无设备,设备是否写保护等。
DRESULT disk_read()函数从磁盘驱动器上读取扇区内容,调用SPI读取单个或多个块的内容。
DRESULT disk_write()函数调用SPI向磁盘写入一个或多个扇区。
DRESULT disk_ioctl()函数通过底层SPI驱动可以读取存储设备中的一些特殊寄存器(SD卡中的OCR、CID、RCA等),获得相关信息后,后续操作才能执行成功,比如格式化操作等。
DWORD get_fattime()函数获取当前时间。
通过以上3个步骤,完成了对FatFS文件系统的移植,在应用程序中可以调用该文件系统的API函数。
4 硬件电路设计
4.1 SD卡电路连接
图7为SD卡的硬件连接电路图。使用了STM32F107的SPI3,引脚PC3为SD卡片选,配置为推挽输出;PC12为MOSI,配置为推挽复用;PC11为MISO,配置为推挽复用,PC2引脚用来检测SD是否插入,配置为输入模式,硬件上拉;PC10引脚为SPI时钟信号,配置为推挽输出。
图7 SD卡硬件连接图
4.2 采集电路设计
采集电路包括输入信号滤波、限幅、单端转差分等预处理电路,ADC和STM32F107之间通过SPI1接口连接,电路图如图8所示。A/D转换完成后,会在DOUT引脚产生一个下降沿,触发STM32F107的外部中断,在中断程序里,通过SPI1读取数据。读取多个数据完成后,再写入到SD卡。
结 语
本文完成了开源软件FatFS文件系统在STM32F107微控制器上的移植,设计了基于24位高精度A/D转换器。
图9 采集电路原理图
ADS1252的数据采集电路,将SD卡作为存储介质,对基于单片机的大容量数据采集系统具有借鉴意义。
[1] ST.STM32F10xxx 参考手册中文版[EB/OL]. [2015-01].http://download.csdn.net/detail/winnerben/2887762.
[2] 张中平.∑-Δ模数转换器的原理及应用[J].电子器件,2003,12,26(4).
[3] Texas Instruments.ADS1252 datasheet [EB/OL].(2009-09-27)[2015-01].http://download.csdn.net.
[4] ScanDisk Corpate.SD memory card specification part 1:physical layer specification version 1.0,2000.
[5] 邓剑.FAT文件系统原理及实现[J].计算机与数字工程,2005,9(33):105-108.
[6] ScanDisk Corpate.SD memory card specification part 5:SPI bus protocol,2000.
[7] 周熠.基于SPI协议的MMC卡读写机制的实现[J].计算机仿真,2005,1(22):97-99.
[8] FatFS官方应用详解[EB/OL].[2015-01].http://www.docin.com/p-723009741.html.
秦伟(工程师),主要研究方向为矿山救援技术和工程物探仪器。
Marvell新一代ZigBee无线微控制器SoC促进智能家居和IoT创新
美满电子科技(Marvell)近日推出新一代业界领先的88MZ300 802.15.4/ZigBee无线微控制器SoC。该SoC是Marvell面向IoT解决方案的无线微控制器系列的最新成员。这款高性能、低功耗、高性价比的SoC提供卓越的射频(RF)性能,与Marvell前一代88MZ100 SoC相比,传输距离延长一倍以上,功耗降低50%,同时由于芯片的高集成度而最大限度地减少了所需外部器件数量。88MZ300 SoC支持包括即将出台的ZigBee 3.0和Thread协议在内的开放标准,连同ZigBee至Wi-Fi桥接参考设计以及由硬件制造商和系统集成合作伙伴组成的生态系统,能够帮助设备制造商(OEM)迅速将最新的创新性物联网应用推向市场。
Marvell公司副总裁兼移动与物联网业务部总经理Philip Poulidis表示:“Marvell不断展示家庭自动化、联网照明及IoT领域的创新,88MZ300 ZigBee无线微控制器在性能和成本上引领802.15.4技术。88MZ300与Kinoma以及不久前推出的智能家居云中心(Smart Home Cloud Center)相结合,为家庭自动化和IoT市场提供了一款整体解决方案。我们期望随着88MZ300的采用,会出现一系列激动人心的新产品。”
88MZ300以Marvell大获成功的88MZ100 ZigBee无线微控制器为基础开发,提供XIP(Execute In Place)功能,允许直接在闪存中执行代码,从而降低了系统成本,同时实现了可扩展的存储器架构,为代码较长的应用以及未来的软件升级提供了方便。这对设备制造商很有好处,因为设备制造商设计产品时需要应对协议标准不断演变的问题。88MZ300接收(RX)电流为8.5 mA,待机电流为1 μA,因此功耗超低;另外该SoC可用1.8~3.6 V 的各种电源工作,因此允许使用小型电池,并延长了电池寿命。此外,88MZ300提供2.4 GHz Wi-Fi与蓝牙共存性能,显著改善了数据链路质量,减少了信息损失,进而提升了用户体验。基于88MZ300的IoT解决方案不仅提供成熟可靠、基于开放标准的网络协议栈,还提供与Marvell智能家居云中心平台以及Kinoma软件兼容的交钥匙型硬件设计。
Qin Wei
(China Coal Technology Engineering Group Chongqing Research Institute,Chongqing 400037,China)
Aiming at the large-capacity data acquisition system,the paper designs a system which takes STM32F107 microcontroller as the core,and adopts SD card as the storage medium.The article outlines the transplant of the open source Fat file system on the STM32 processor and the programming of the low-level driver functions.The system achieves high-precision data acquisition by using the 24-bits Σ-Δ ADC,and uses the Fat file system to achieve a large-capacity storage and management for the collected data,which provides a convenience for the subsequent processing and transmission of the data.
STM32;Fat file system;SD card;high-precision data acquisition
TP274.2
A
迪娜
2015-01-05)