新闻中心

EEPW首页>电源与新能源>设计应用> AT89S52单片机和FAT16文件的SD卡读写设计

AT89S52单片机和FAT16文件的SD卡读写设计

作者: 时间:2014-01-16 来源:网络 收藏
个数、磁盘介质描述、分配单元大小等重要参数。

本文引用地址://m.amcfsurvey.com/article/226899.htm

DBR之后是FAT(File Allocation Table,文件分配记录表),记录文件在磁盘上的存储位置。在Windows系统中,文件存储的单位是簇而不是字节,1个文件不是连续地存放于磁盘的某一区域,而往往分成若干段,像链子一样存放。FAT表记录了每个文件的起始簇号、后继簇号和终止簇号。FAT表中的每个表项对应数据存储区中的1个簇,由于FAT表对文件管理的重要性,FAT表有1个备份。

DIR是根目录区,紧接着第2个FAT表(FAT2)之后,记录着根目录下每个文件的起始簇号、大小等属性。操作系统根据DIR中文件的起始簇号和大小,结合FAT表来定位文件。文件系统中1个文件的存储示意图如图5所示。

AT89S52单片机和FAT16文件的SD卡读写设计3.2 SD卡指令规范

通过相应指令与SD卡进行交互。SD卡有特定的指令格式,都是6字节长,最高有效位(MSB)传输优先,如图6所示。

AT89S52单片机和FAT16文件的SD卡读写设计

SD卡指令的最高2位“01”是SD卡指令的开始标志,最后1位“1”是结束标志。6位的指令是SD卡的指令序号,例如CMD17的6位指令即17的二进制表示010001。指令参数占4字节,具体内容参照SD卡规范。7位CRC校检的生成多项式为G(x)=x7+x3+1。事实上SD卡在进入SPI模式后,不再通过CRC码来确认指令的传输正确与否,指令中的7为CRC校检,只在SD模式下起作用。因此仅SD卡上电后的第1条切换SPI模式指令CMd0 需要校检码,而此校检码是固定的0x95,其他指令的CRC均置1即可。SD卡响应有4种格式,不同指令对应不同响应,具体内容可参看SD卡规范。

3.3 SD卡读写驱动

3.3.1 SPI时序模拟

用软件来模拟SPI总线的具体方法是:将SCK的初始状态置0,允许接收后(即CS置0)将SCK置1,这样由DI线输出1位数据到SD卡;接着再将SCK置0,由DO线从SD卡读1位数据。至此,模拟1位数据输入输出完成。此后再将SCK置1,依次循环8次,完成SPI总线1字节数据的输入输出。

以下是本系统软件模拟SPI时序的汇编代码。以通用寄存器A作为函数参数,实现将寄存器A中的数据通过SPI总线发送出去,并将从SPI总线读到的数据存到寄存器A中。

AT89S52单片机和FAT16文件的SD卡读写设计

3.3.2 SD卡的初始化

SD卡的初始化流程如图7所示。SD卡上电延时74个时钟周期后,单片机向SD卡发送复位命令CMDO,使SD卡进入SPI模式。之后循环发送激活SD卡指令CMD1,直到接收到SD卡响应的第0位为0。

AT89S52单片机和FAT16文件的SD卡读写设计3.3.3 SD卡数据块的读写

完成SD卡的初始化后,就可以对SD卡进行读写操作。读写操作都是通过指令来完成的:单块写命令CMD24,多块写命令CMD25;单块读命令 CMD17,多块读命令CMD18。单块读写时,数据块的长度为512字节,多块读写时SD卡收到1个停止命令CMD12后停止读写。图8、图9分别是单块读、写SD卡的软件流程。

AT89S52单片机和FAT16文件的SD卡读写设计

3.4文件读写

按照文件系统的文件组织规范,编写读文件函数和写文件函数。FAT16文件读写的软件流程如图10所示。

AT89S52单片机和FAT16文件的SD卡读写设计



关键词:AT89S52单片机FAT16

评论


相关推荐

技术专区

关闭