关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 基于STM32F103XX微处理器的Micr0 SD卡读写

基于STM32F103XX微处理器的Micr0 SD卡读写

作者: 时间:2010-12-23 来源:网络 收藏

从Micro SD卡中写入一个块与读取块相似。主机发送CMD24(MSD_WRITE_BLOCK)命令启动写操作过程,Micro SD卡将以R1命令响应格式进行应答。如果命令响应,则进行写操作,主机发送起始令牌,然后发送固定数量的字节(512 B),返回一个数据响应令牌,指示需要写入的数据是否完成,最后是2个字节的CRC校验,写入一个数据块由函数u8 MSD_WriteBuffer(u8*pBuffer,u32 WriteAddr,u32 Num-ByteToWrite)来完成,向Micro SD卡写数据函数中的参数与向Micro sD卡读数据函数中的参数相同。读/写单块数据流程如图3所示。
c.JPG

2.3 Micro SD卡的文件
由于需要Micro SD卡上的数据能够在计算机上直接读/写,所以Micro SD卡文件系统必须与计算机的文件系统一致。目前常用的文件系统主要有微软的FATl2,FATl6,FAT32,NTFS,以及Linux系统下的 EXT2,EXT3等。由于微软Windows的广泛应用,在当前的消费类电子产品中,用得最多的还是FAT文件系统,如U盘、MP3,MP4,数码相机等,所以找到一款容易移植和使用、占用硬件资源相对较小而功能又强大的FAT开源文件系统,对于单片机系统设计者来说是很重要的。所以在Micro SD卡机制上,移植了FAT FS文件系统。FAT FS是一种完全免费开源的FAT文件系统模块,是专门为小型嵌入式系统而设计的。它完全用标准C语言编写,所以具有良好的硬件平台独立性,可以移植到多种平台而只需做简单的修改。需要使用者编写移植代码的是FAT FS提供的底层接口,包括介质读/写接口DiskIO和供给文件创建修改时间的实时时钟RTC。
FAT FS Module一开始就是为了能在不同的单片机上使用而设计的,所以具有良好的层次结构,如图4所示。最顶层是应用层,使用者无需理会FAT FSModule的内部结构和复杂的FAT协议,只需要调用Module提供给用户的一系列应用接口函数,如f-open,f-read,f- write,f-Close等就可以像在PC上读/写文件那样简单。
2.3.1 文件(或目录)创建
在Micro SD卡上创建文件(或目录)的过程就是在文件目录表中申请登记项的过程。首先程序要检测文件目录表(FDT)中是否已经存在该文件,然后申请空闲的FDT 表项。如果存在同名的文件,则返回,创建文件(或目录)失败。申请FDT表项成功后,程序会检测磁盘剩余的空间是否满足新创文件数据长度的需要,而后寻找第一个空闲的簇号,并修改对应的FDT表项。根据文件的大小,不断循环查找下一个空闲的簇,同时修改当前FAT项目为下一个簇号,直到最后一个FAT项写入0xFFFFH,以表示文件结束。新建目录时,只需要提供函数CreateDir()函数新建目录的目录名,其过程和创建文件一样,只是不需要提供数据相关的信息。
2.3.2 文件的读写
Micro SD卡上的文件都是以簇(Cluster)为单位存取的。当读取Micro SD卡上的文件时,首先要根据文件名查找到文件加目录登记项(F-DT),根据文件中目录登记项中起始簇号即可以找到文件在数据DATA区中的第一簇内容,并且可以在FAT表中找到第二个簇号。根据第二个簇号又能读取第二簇的数据和FAT中第三个簇号,这样就可以读取全部文件数据。写文件时要保证 FAT1和FAT2内容的一致性,即要对两个FAT进行同样的写操作。当要在已有的文件中增添数据时,程序首先要分析原有文件最后一个扇区还有多少剩余空闲字节数,以便新添加数据与这最后一个扇区汇合,超过扇区的数据在申请新的空闲FAT表项时,其过程与新建文件类似。在文件的最后一簇填写0xFFFFH 表示文件结束。
2.3.3 文件(或目录)的删除
删除文件的操作需要提供函数DeleteFile()删除文件的文件名和扩展名。删除文件时,不涉及数据区的操作,只须在文件的目录登记项(FDT)上做一个删除标记,并把文件在FAT表中所占用的簇标记为“空簇”。
程序先在FDT中查找是否有同名文件,如果存在同名文件,则将在对应的FDT表项中第一个字节内容改为0xE5H,表示该FDT表项的内容已经被删除,新建文件可以使用该表项。最后还需要将FAT表中所有文件相关簇项目的内容都改成Ox0000,释放出所对应的Micro SD卡磁盘空间。若未找到同名文件,则返回一个错误值。删除目录的操作只需要提供函数DeleteDir()删除目录的目录名。程序先在FDT中查找是否有同名目录项,如果存在同名目录项,则将对应的FDT表项中第一个字节内容改为0xE5H。然后读出对应目录的起始簇号,在该簇号中去删除该目录下的所有文件。

3 结语
该方案已经成功应用于远程智能心脏检测仪器中,为心脏检测仪器的数据采集提供了一种非易失性存储器的解决方案,远程智能心脏检测仪器采集得到的数据信息以FAT32标准文件的格式保存于Micro sD卡中,数据文件可在Windows下读取,在保证高性价比的同时,又方便了数据的进一步分析和处理。

本文引用地址:https://www.eepw.com.cn/article/162539.htm

上一页 1 2 3 下一页

关键词: 存储 数据

评论


相关推荐

技术专区

关闭