大容量SD卡在海洋数据存储中的应用

发布者:cxd88988最新更新时间:2013-02-18 来源: dzsc关键字:SD卡  海洋数据存储  STM32F103VB 手机看文章 扫描二维码
随时随地手机看文章
  引言

  海洋要素测量系统要求数据存储量大、安全性高,采用可插拔式存储卡是一种不错的选择。目前,可插拔式存储卡有CF卡、U盘及SD卡。CF卡不能与计算机直接通信;U盘需要外扩接口芯片才能与单片机通信,增加了外形尺寸及功耗;而SD卡具有耐用、可靠、安全、容量大、体积小、便于携带和兼容性好等优点,非常适合于测量系统长期的数据存储。

  本设计使用8 GB的SDHC(High Capacity SD Memory Card,大容量SD存储卡),为了方便卡上数据在操作系统上的读取,以及数据的进一步分析和处理,在SDHC卡上建立了FAT32文件系统。

  1SD卡接口的硬件设计

  STM32F103xx增强型系列是意法半导体公司生产的基于Cortex-M3的高性能的32位RISC内核,工作频率为72 MHz,内置高速存储器(128 KB的闪存和20 KB的SRAM),以及丰富的增强I/O端口和连接到2条APB总线的外设。STM32F103xx系列工作于-40~+105℃的温度范围,供电电压为2.0~3.6 V,与SD卡工作电压兼容,一系列的省电模式可满足低功耗应用的要求。

  SD卡支持SD模式和SPI模式两种通信方式。采用SPI模式时,占用较少的I/O资源。STM32F103VB包含串行外设SPI接口,可方便地与SD卡进行连接。通过4条信号线即可完成数据的传输,分别是时钟SCLK、主机输入从机输出MISO、主机输出从机输入MOSI和片选CS。STM32F103VB与SD卡卡座的接口电路如图1所示。


  SD卡的最高数据读写速度为10 MB/s,接口电压为2.7~3.6 V,具有9个引脚。SD卡使用卡座代替传输电缆,减少了环境干扰,降低了出错率,而且1对1传输没有共享信道的问题。SD卡在SPI模式下各引脚的定义如表1所列。


  2 SD卡接口的软件设计

  本设计采用STM32F103VB自带的串行外设SPI接口与SD卡进行通信,这里只介绍SPI模式的通信方式。

  2.1SD卡的读写

  先对STM32F103VB的SPI_CRl(SPI控制寄存器)以及SPI_SR(SPI状态寄存器)进行初始化设置,使能SPI并使用主机模式;同时设置好时钟,在时钟上升沿锁存数据。SPI通道传输的基本单位是字节,由STM32F103VB控制其和SD卡之间的所有通信。

  要读写SD卡,首先要对其进行初始化。初始化成功后,即可通过发送相应的读写命令对SD卡进行读写。SD卡的读写流程如图2所示。[page]


  2.2 SD1.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则写入扇区地址。

  3 FAT32文件系统

  目前有3种FAT文件系统:FAT12、FAT16和FAT32。它们的区别在于文件分配表(File Allocation Table,FAT)中每一表项的大小(也就是所占的位数):FAT12为12位,FATl6为16位,FAT32为32位。本设计选择FAT32文件系统。

  由于文件存储在硬盘上占用的存储器空间以簇为最小单位,FAT32文件系统不适合管理容量低于512 MB的存储器。簇如果太大,存储小文件会浪费大量的存储空间;如果太小,FAT表会变大,不方便管理。综合考虑,FAT32每簇大小为4 KB。

  3.1FAT32文件系统结构

  FAT32文件系统可以分为以下几部分;保留区(reserved region),存放FAT文件系统的重要参数和引导程序;FAT区(FAT region),记录簇(cluster)的使用情况;根目录区(root directory region),记录根目录信息,FAT32文件系统舍弃了这个区,根目录区可以指定为任意一个簇;文件目录数据区(file and directory data region),是各种文件数据实际存放的区域。

  保留区中的BPB表从扇区0偏移11个字节开始,共占25字节。表2是格式化为FAT32文件系统的8 GBSD卡首扇区中读出的BPB参数内容。[page]


  在保留区之后是FAT区,存有文件分配表。一般文件系统中有2份文件分配表FAT1和FAT2,每份FAT表占用空间的大小可从BPB表中查得。

  由于采用的是SDHC卡和FAT32文件系统,紧接在FAT区之后的是文件目录数据区,真正意义上的数据从这个区开始,以簇编号,顺序上第1个簇编号为第2簇,此簇通常为FAT32根目录所用。FAT16从根目录所占的32个扇区之后的第一个扇区开始以簇为单位进行数据处理,这之前仍以扇区为单位。目录与数据是统一放到这个区域的,并且都不是在一个连续的区域内存放。没有任何特殊标记来区分哪个簇是目录项,哪个簇是数据项,而是由文件系统从根目录出发通过查找的方法来确定簇的类型。

  3.2 FAT32文件系统实现

  本文设计的文件系统采用模块化层次结构,其总体框架如图4所示。其中,箭头表示调用关系。


  应用程序是面向用户的,为满足某种功能需求而编写的程序。可以通过调用文件系统提供的API函数对文件和目录进行相应的操作。

  文件管理和目录管理模块是直接与应用程序接口的模块,位于整个文件系统的最高层。文件管理模块提供所有与文件操作相关的函数,目录管理模块提供所有与目录操作相关的函数。在对文件操作的大多数情况下,文件管理模块需要调用目录管理模块的相关功能。

  文件分配表管理模块主要用来对文件系统的FAT表进行管理,根据系统的请求对FAT表的内容进行相应的修改。文件目录表管理模块主要提供对文件和目录的基本属性信息的管理。这两个模块管理着文件系统的两个重要数据结构,应用程序不能直接调用它们。

  缓存模块是为了降低系统访问SD卡的次数,提高整个系统的处理速度而加入的。它使用了部分RAM作为缓存来保存一些访问过的扇区的数据,一般用来加载FAT表和FDT表的数据;向SD卡写入数据时,也需要用它加载数据。

  以上几个模块的操作都建立在底层驱动程序上。底层驱动程序主要是向SD卡读写某个扇区的程序。

  文件分配表管理模块包含几个处理簇链的函数,如获取指定簇下一簇簇号(fat_next_clus())、建立簇与指定簇的链接关系(fat_link_clus())、在簇后增加一个空白簇到簇链中(fat_add_clus())和删除指定簇的簇链(fat_del_clus_chain())。文件目录表管理模块包含几个处理文件登记项的函数,如在给定目录下查找文件(fat_find_fdt())、在给定目录下添加文件(fat_add_fdt())和在给定目录下删除文件(fat_delete_fdt())。目录管理模块主要是实现建立、删除目录的操作,包含的函数有根据路径查找目录所在簇(fat_open_dir())、建立目录(fat_make_dir())和删除目录(fat_del_dir())。用户使用文件系统主要是对文件的操作,文件管理模块提供了对文件的创建、修改和删除等操作,包含函数新建文件(file_create())、打开文件(file_open())、读写指针设定(file_seek())、读取文件数据(file_read())、写入文件数据(file_write())、删除文件(file_delete())和关闭文件(file_close())。

  结语

  本文介绍了SD卡在海洋数据存储中的应用,使用高性能的STM32F103xx系列处理器提高了SD卡的数据读写速率,很好地解决了海洋数据采集中的大容量存储问题和SDl.x与SD2.0的识别问题,并给出了适用于SD卡的FAT32文件系统的参数设置及其实现方法。

关键字:SD卡  海洋数据存储  STM32F103VB 引用地址:大容量SD卡在海洋数据存储中的应用

上一篇:关于电阻式触摸屏技术的一些探讨
下一篇:STM32和CAN总线在温度监控系统中的应用

推荐阅读最新更新时间:2024-03-16 13:18

SD卡升级——SDIO_IAP实验
在嵌入式项目中,经常会用到SD卡升级这一方式来进行产品的软件升级。刚好最近做的项目也需要这一功能,由于之前未接触过IAP开发,刚好在这个时候可以学习一下,于是先到各大网站去搜索相关资料,两天下来,基本对于IAP的概念和编程步骤有了大致的了解。本人手里有块正点原子的开发板,前期的实验都是在这块开发板上实现的。在实现了SD卡IAP功能以后,立马将工程移植到项目中去,很快就把这个功能添加进去了,甚是高兴,对于以前的SD卡升级功能也不再那么神秘了。 本人是先看正点原子的超级战舰手册,先看的《第三十九章 FLASH模拟EEPROM实验》,了解了STM32片内FLASH编程的步骤,然后再看的《第五十三章 串口IAP实验》,学习IAP编
[单片机]
<font color='red'>SD卡</font>升级——SDIO_IAP实验
AVR的SD卡接口程序
/************************************************************/ /* SD Code for M32L */ /* By pasyong */ /* 2006-4 */ /* Base I CC 6.31A */ /************************************************************/ #include iom32v.h #include macros.h #include 1011.h #define uchar unsigned char
[单片机]
STM32笔记SD卡的读写和FatFS文件系统
因为要用,学习了一下SPI操作SD卡,同时移植了一个免费开源的FAT文件系统:FatFS。感觉挺好,在单片机上实现了读写文件的操作,接下来就可以解释我的G代码咯!   我的SD卡底层操作参考了网上几种常见的代码,但又对其结构做了一定的优化,至少看起来用起来比较方便。既可以作为文件系统的diskio使用,也可以直接使用底层函数,把SD卡作为一块flash读写。   FatFs文件系统体积蛮小,6-7K足矣,对于128Kflash的STM32来说很合适,代价不大。同时可移植性很高,最少只需要4个函数修改既可以实现文件系统的移植。相关文件系统的介绍 请看这里 。   这里给一套比较完整的参考资料,包括fatfs文件系统的原版资料、几个重
[单片机]
STM32笔记<font color='red'>SD卡</font>的读写和FatFS文件系统
把闲置的SD卡转接成固态硬盘吧
相信不少朋友手头都会有一些闲置的SD卡,如何处理它们是一个比较大的问题。现在有老外设计出了一款转接卡或许能够帮到你,它的全称是microSD SSD Creator套件,可以把闲置的存储卡连接到这块转接卡上,让其化身SSD。 这款microSD SSD Creator套件不仅支持SD卡,同时也能够支持CF卡,共提供了四个卡槽,单个卡槽最大支持32GB容量,也就是说最大能够搭建128GB容量的SSD。虽然理论上对SD卡的型号没有要求,但开发者还是推荐使用容量相同的C10级别的产品。 搭建出来的SSD性能取决于存储卡的类型,但据说Windows磁盘体验指数最大只有3.6,这是一个什么概念呢?目前大部分机械硬盘的Window
[手机便携]
把闲置的<font color='red'>SD卡</font>转接成固态硬盘吧
STM32之SD卡测试,采用Cubemax配置
1、SD卡(microSD 卡)可以通过SPI总线、SDIO-1bit、SDIO-4bit方式与控制器通信,但传输数据速度不同。 2、SD卡座与单片机连接时候,网上、SD卡官方手册都会建议接信号线上拉电阻,其目的是防止SD卡没有插入插槽时候信号线悬空。对于SDIO-1bit方式连接,d1-d3信号线是用不到的,根据上述接上拉电阻原因,此三根线是不用接上拉电阻的,音乐播放器事实证明也完全不用。为兼容所有SD卡,统一规定SD卡座上信号线(cmd、d0-d3,clk也接上)全部都连接上拉电阻,电阻选择10K左右,需要的信号线再接到单片机。如果有元件成本限定,则只在连接到单片机的信号线上使用上拉电阻。 3、Cubemax配置。 (1)
[单片机]
SD卡方式进行嵌入式设备操作系统的自动升级的实现
本文提出了一种扩展Uboot实现嵌入式设备操作系统维护与升级的方法。该方法将待升级的内核和文件系统映像放入SD卡中,当系统重启时,扩展后的Uboot会自动检测并读取SD卡中的映像文件,再烧写到嵌入式设备实现自动升级。该方法较传统的通过 JTAG 口、串口或者网口连接到主机,在主机上通过手动输入控制命令完成内核或者文件系统的升级方式更为便捷高效。 随着现代工业社会逐步向智能化社会的过度,嵌入式在现代经济生活中扮演着至关重要的角色。32位的高性能、低成本、低功耗的嵌入式RISC(Reduced InstructionSet Computer) 微处理器 ——ARM(Advanced RISC Machines)已经成为应用最
[单片机]
第36章 SDIO—SD卡读写测试—零死角玩转STM32-F429系列
本章参考资料:《STM32F4xx参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》以及SD简易规格文件《Physical Layer Simplified Specification V2.0》(版本号:2.00)。 特别说明,本书内容是以STM32F42x系列控制器资源讲解。 阅读本章内容之前,建议先阅读SD简易规格文件。 36.1 SDIO简介 SD卡(Secure Digital Memory Card)在我们生活中已经非常普遍了,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口。SDIO全
[单片机]
第36章 SDIO—<font color='red'>SD卡</font>读写测试—零死角玩转STM32-F429系列
ATmega128L单片机的MiCrOSD卡读写
引 言 随着工业控制系统功能的增强,系统对于存储介质的安全、容量、性能的要求越来越高。Micro SD卡是在SD卡和Mini SD卡基础上发展起来的一种多功能存储卡,具备串行和随机存取能力,可以通过专用优化速度的串行接口访问,数据传输可靠,安全性好,传输速度快,存储容量大,体积小,被列为目前全球最小的迷你存储卡。Micro SD卡支持SD模式和SPI模式。随着高性能单片机的性能不断提高,利用高性能、低功耗的AVR 8位ATmegal28L单片机的串行外设接口SPI与Micro SD卡之间进行高速同步数据传输,设计开发了一种嵌入式文件系统。 1 硬件电路设计 MicrO SD卡的接口可以支持两种操作模式:SD模式和SPI模式
[单片机]
ATmega128L单片机的MiCrO<font color='red'>SD卡</font>读写
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved