标题:大容量SD卡在海洋数据存储中的应用单位:河北科技大学电气学院姓名:赵鸿健二〇一三年十一月大容量SD卡在海洋数据存储中的应用赵鸿健自动化SY12学号:120802235选课序号:【摘要】:设计了一种新型海洋要素数据(温度、盐度)采集系统的SD卡存储方案,同时给出了SD1.x与SD2.0的识别方法。该方案选用基于Cortex-M3内核的高性能处理器STM32F103VB作为主控制器,采用SPI总线与SD卡通信,使用FAT32文件系统,解决了海洋数据采集过程中数据存储量大、存储设备不易与PC机接口的问题。引言:海洋要素测量系统要求数据存储量大、安全性高,采用可插拔式存储卡是一种不错的选择。目前,可插拔式存储卡有CF卡、U盘及SD卡。CF卡不能与计算机直接通信;U盘需要外扩接口芯片才能与单片机通信,增加了外形尺寸及功耗;而SD卡具有耐用、可靠、安全、容量大、体积小、便于携带和兼容性好等优点,非常适合于测量系统长期的数据存储。正文1.本设计使用8GB的SDHC(,大容量SD存储卡),为了方便卡上数据在操作系统上的读取,以及数据的进一步分析和处理,在SDHC卡上建立了FAT32文件系统。1SD卡接口的硬件设计STM32F103xx增强型系列是意法半导体公司生产的基于Cortex-M3的高性能的32位RISC内核,工作频率为72MHz,内置高速存储器(128KB的闪存和20KB的SRAM),以及丰富的增强I/O端口和连接到2条APB总线的外设[2]。STM32F103xx系列工作于-40~+105e的温度范围,供电电压为2.0~3.6V,与SD卡工作电压兼容,一系列的省电模式可满足低功耗应用的要求。海洋要素测量系统要求数据存储量大、安全性高,采用可插拔式存储卡是一种不错的选择。目前,可插拔式存储卡有CF卡、U盘及SD卡。CF卡不能与计算机直接通信;U盘需要外扩接口芯片才能与单片机通信,增加了外形尺寸及功耗;而SD卡具有耐用、可靠、安全、容量大、体积小、便于携带和兼容性好等优点,非常适合于测量系统长期的数据存储。本设计使用8GB的SDHC(HighCapacitySDMemoryCard,大容量SD存储卡),为了方便卡上数据在操作系统上的读取,以及数据的进一步分析和处理,在SDHC卡上建立了FAT32文件系统。1SD卡接口的硬件设计STM32F103xx增强型系列是意法半导体公司生产的基于Cortex-M3的高性能的32位RISC内核,工作频率为72MHz,内置高速存储器(128KB的闪存和20KB的SRAM),以及丰富的增强I/O端口和连接到2条APB总线的外设。STM32F103xx系列工作于-40~+105℃的温度范围,供电电压为2.0~3.6V,与SD卡工作电压兼容,一系列的省电模式可满足低功耗应用的要求。SD卡支持SD模式和SPI模式两种通信方式。采用SPI模式时,占用较少的I/O资源。STM32F103VB包含串行外设SPI接口,可方便地与SD卡进行连接。通过4条信号线即可完成数据的传输,分别是时钟SCLK、主机输入从机输出MISO、主机输出从机输入MOSI和片选CS。STM32F103VB与SD卡卡座的接口电路如图1所示。SD卡的最高数据读写速度为10MB/s,接口电压为2.7~3.6V,具有9个引脚。SD卡使用卡座代替传输电缆,减少了环境干扰,降低了出错率,而且1对1传输没有共享信道的问题。SD卡在SPI模式下各引脚的定义如表1所列。2SD卡接口的软件设计本设计采用STM32F103VB自带的串行外设SPI接口与SD卡进行通信,这里只介绍SPI模式的通信方式。2.1SD卡的读写先对STM32F103VB的SPI_CRl(SPI控制寄存器)以及SPI_SR(SPI状态寄存器)进行初始化设置,使能SPI并使用主机模式;同时设置好时钟,在时钟上升沿锁存数据。SPI通道传输的基本单位是字节,由STM32F103VB控制其和SD卡之间的所有通信。要读写SD卡,首先要对其进行初始化。初始化成功后,即可通过发送相应的读写命令对SD卡进行读写。SD卡的读写流程如图2所示。的减肥黑色空间和富士康将恢复2.2SD1.x与SD2.0标准的识别由于大容量SDHC的出现,SD1.x满足不了SDHC的容量要求,标准已经升级为SD2.0。但也因此出现了许多电子设备无法驱动大容量SD卡的情况,如何识别SD1.x与SD2.0就显得尤为重要。SD2.0的SPI模式初始化流程如图3所示。判断是否为SD2.0卡,CMD8(SD2.0新增的命令)是关键。若卡是SD2.0,则发送CMD8将会返回有效响应;若是SD1.x,则返回非法响应,这样就可以识别SD卡的类型。SD1.x与SD2.0的最大不同在于命令地址的表示。SD1.x的地址单位是字节,而SD2.0的地址单位是扇区,地址仍然采用32位4个字节来表示。因此在读写操作时应该根据不同的卡对地址进行相应的处理,若是SD1.x则写入字节地址,若为SD2.0则写入扇区地址。3FAT32文件系统目前有3种FAT文件系统:FAT12、FAT1**FAT32。它们的区别在于文件分配表(FileAllocationTable,FAT)中每一表项的大小(也就是所占的位数):FAT12为12位,FATl6为16位,FAT32为32位。本设计选择FAT32文件系统。由于文件存储在硬盘上占用的存储器空间以簇为最小单位,FAT32文件系统不适合管理容量低于512MB的存储器。簇如果太大,存储小文件会浪费大量的存储空间;如果太小,FAT表会变大,不方便管理。综合考虑,FAT32每簇大小为4KB。3.1FAT32文件系统结构FAT32文件系统可以分为以下几部分;保留区(reservedregion),存放FAT文件系统的重要参数和引导程序;FAT区(FATregion),记录簇(cluster)的使用情况;根目录区(rootdirectoryregion),记录根目录信息,FAT32文件系统舍弃了这个区,根目录区可以指定为任意一个簇;文件目录数据区(fileanddirectorydataregion),是各种文件数据实际存放的区域。保留区中的BPB表从扇区0偏移11个字节开始,共占25字节。表2是格式化为FAT32文件系统的8GBSD卡首扇区中读出的BPB参数内容。在保留区之后是FAT区,存有文件分配表。一般文件系统中有2份文件分配表FAT1和FAT2,每份FAT表占用空间的大小可从BPB表中查得。由于采用的是SDHC卡和FAT32文件系统,紧接在FAT区之后的是文件目录数据区,真正意义上的数据从这个区开始,以簇编号,顺序上第1个簇编号为第2簇,此簇通常为FAT32根目录所用。FAT16从根目录所占的32个扇区之后的第一个扇区开始以簇为单位进行数据处理,这之前仍以扇区为单位。目录与数据是统一放到这个区域的,并且都不是在一个连续的区域内存放。没有任何特殊标记来区分哪个簇是目录项,哪个簇是数据项,而是由文件系统从根目录出发通过查找的方法来确定簇的类型。3.2FAT32文件系统实现本文设计的文件系统采用模块化层次结构,其总体框架如图4所示。其中,箭头表示调用关系。应用程序是面向用户的,为满足某种功能需求而编写的程序。可以通过调用文件系统提供的API函数对文件和目录进行相应的操作。文件管理和目录管理模块是直接与应用程序接口的模块,位于整个文件系统的最高层。文件管理模块提供所有与文件操作相关的函数,目录管理模块提供所有与目录操作相关的函数。在对文件操作的大多数情况下,文件管理模块需要调用目录管理模块的相关功能。文件分配表管理模块主要用来对文件系统的FAT表进行管理,根据系统的请求对FAT表的内容进行相应的修改。文件目录表管理模块主要提供对文件和目录的基本属性信息的管理。这两个模块管理着文件系统的两个重要数据结构,应用程序不能直接调用它们。缓存模块是为了降低系统访问SD卡的次数,提高整个系统的处理速度而加入的它使用了部分RAM作为缓存来保存一些访问过的扇区的数据,一般用来加载FAT表和FDT表的数据;向SD卡写入数据时,也需要用它加载数据。以上几个模块的操作都建立在底层驱动程序上。底层驱动程序主要是向SD卡读写某个扇区的程序。文件分配表管理模块包含几个处理簇链的函数,如获取指定簇下一簇簇号、建立簇与指定簇的链接关系、在簇后增加一个空白簇到簇链中和删除指定簇的簇链。文件目录表管理模块包含几个处理文件登记项的函数,如在给定目录下查找文件、在给定目录下添加文件和在给定目录下删除文件。目录管理模块主要是实现建立、删除目录的操作,包含的函数有根据路径查找目录所在簇、建立目录和删除目录。用户使用文件系统主要是对文件的操作,文件管理模块提供了对文件的创建、修改和删除等操作,包含函数新建文件、打开文件、读写指针设定、读取文件数据、写入文件数据、删除文件和关闭文件。参考文献:[1]陈惠滨,陈仅星;嵌入式文件系统在移动数据采集器中的实现[J];电子器件;2005年03期[2]李民,袁新,刘勇,盛岩峰;国内大型海洋水文气象资料浮标的现状及发展方向[J];气象水文海洋仪器;2002年02期