基于SD卡的FAT32文件系统设计与实现.docx

基于SD卡的FAT32文件系统设计与实现.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

?

基于SD卡的FAT32文件系统设计与实现

?

?

李敏++侯亚玲++刘颖

摘要:为解决嵌入式系统中便携式存储设备的大容量数据存储问题,并便于对数据进行查询、读取及分析,系统采用具备SD卡插座的CortexM3处理器平台,分析了SD卡的驱动实现,并按照FAT32文件系统规范进行文件系统设计。设计使用c语言进行开发,通过系统采集实时温度,并将数据按照一定的格式规范存储在SD卡的文件中;通过读取SD卡进行数据的查询、读取。经反复测试,系统运行稳定,数据的存储及读取都很可靠,且软件便于移植,可应用于大容量数据采集的系统中。

关键词:SD卡;FAT32文件系统;SPI;ds18b20

:TP39;TN915.41:A:2095-1302(2017)07-00-03

0引言

随着嵌入式技术的飞速发展,很多嵌入式系统都需要大容量的存储设备,用于数据存储。而当前,常用的存储设备有U盘、移动硬盘、Flash芯片、SD卡等,它们各有优缺点。综合考虑在系统设计时的性价比、功耗及体积等要求时,SD卡无疑是一个非常好的选择。随着存储技术的发展,其容量也越来越大,可以达到32G以上,且支持SPI接口,同时SD卡有几种不同的体积可供选择,可满足不同的设计及应用要求。

具备SPI接口的嵌入式系统只需4个I/O接口就可以扩展达32G以上的外部存储器,存储容量不等,设备更换方便,程序在不同的设备上移植也更简单。基于以上优点,SD卡在嵌入式市场得到广泛应用,成为存储设备的首选。然而SD卡中的数据以块的形式进行存储,不便于数据的组织管理,为了能够在PC端有效的对数据进行存储、管理、查询及读取,需要对SD卡进行文件系统的设计。一般而言,PC端可直接对其进行格式化后直接使用,而在嵌入式系统中,需要设计FAT文件系统对其进行数据管理。

1SD卡驱动设计

SPI有9个引脚,支持两种操作模式,即SD卡模式(SDIO通信)和SPI模式[1]。SD卡模式允許4线的高速数据传输模式,但需要MCU带SD卡控制器,设计中会增加产品的硬件成本;SPI模式通过SPI总线接口与SD卡通信。

设计中采用的MCU为CortexM3,它是一种低功耗、内核架构为ARM7的控制器,自带SPI控制器。处理器平台SD卡硬件连接电路均已完成,采用SPI连接方式。

系统使用SPI模式。系统上电后,设置SD卡模式转换为SPI模式。在SD卡收到复位命令(CMO)时,CS引脚被拉低,进入SPI模式。上电后,因为SD卡内部供电电压上升时间需要大约64个CLK,还需要10个CLK用于SD卡同步,在发送CMO指令前,发送至少74个系统CLK,初始化时,CLK最大不得超过400kHz。

通过SD卡初始化就可以知道SD卡的类型,读写数据。SD卡读取数据通过CMD17实现,具体过程如下:

(1)发送CMD17;

(2)接收卡响应R1;

(3)接收数据起始令牌0XFE;

(4)接收数据;

(5)接收2个字节的CRC,如果不使用CRC,这两个字节在读取后可以丢掉。

(6)禁止片选之后发送8个CLK;

SD卡的写和读数据过程基本相同,写数据通过CMD24实现[2],具体过程如下:

(1)发送CMD24;

(2)接收卡响应R1;

(3)发送写数据起始令牌0XFE;

(4)发送数据;

(5)发送2B的伪CRC;

(6)禁止片选之后多发8个CLK。

2FAT32文件系统介绍

为了有效管理写入SD卡的数据,使SD卡在PC机端能够被有效访问,必须将SD卡中的数据以文件形式存储,需要在SD卡中创建常用的文件系统。目前,SD卡的容量越来越大,因此设计中采用FAT32文件系统。

在设计中使用了FATFS,它是一种开源免费且专用于小型嵌入式系统的文件系统模块,硬件独立性强,是Windows系统兼容的文件系统格式,其代码特点与平台无关,支持长文件名、多种大小的扇区[3]。基于此特点,FATFS的使用非常广泛,其层次结构如图1所示。

应用层用户只需调用FATFS模块提供给用户接口函数,就可在PC机上对SD卡进行读写操作[4]。中间层FATFS模块实现了FAT文件的读/写协议,使用中一般不做修改,可直接将相关头文件包含在应用程序中。编写移植代码的是FATFS模块提供的底层接口,包括存储媒介读/写接口以及提供文件创建修改时间的实时时钟。在FATFS源码包中,需要修改的是与平台相关的代码diskio.c,即FATFS和diskI/O模块接口层文件[5]。

FATFS模块在移植时,只需修改2个文件,即ffconf.h和diskio.c。FATFS模块的所有配置项都存放在ffconf.h中,可以通过配置一些选项来满足设计的需求。对于SD卡的一些操作特性,可修改ffconf.h中的宏定义来实现,比如宏_F

文档评论(0)

159****6793 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档