新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于AT89S52和FAT16的SD卡读写系统设计

基于AT89S52和FAT16的SD卡读写系统设计

作者:时间:2009-09-17来源:网络收藏

主引导记录区(Main BootRecord,MBR)位于物理磁盘第零扇区。MBR中有硬盘分区记录表(Disk Partition Table,DPT),DPT记录了各逻辑分区的相对偏移。卡不支持多分区,在1个卡中只有1个分区,因此在卡上的DPT只有1个分区表项被占用。引导记录区(DOS Boot Record,DBR)位于磁盘逻辑分区的第0扇区,是操作可以访问的第1个扇区,它其中包含1个称为BPB(Bios Parameter Block)的本分区参数记录表。BPB记录着本分区的根目录大小、FAT、个数、磁盘介质描述、分配单元大小等重要参数。

DBR之后是FAT(File Allocation Table,文件分配记录表),记录文件在磁盘上的存储位置。在Windows中,文件存储的单位是簇而不是字节,1个文件不是连续地存放于磁盘的某一区域,而往往分成若干段,像链子一样存放。FAT表记录了每个文件的起始簇号、后继簇号和终止簇号。FAT表中的每个表项对应数据存储区中的1个簇,由于FAT表对文件管理的重要性,FAT表有1个备份。
DIR是根目录区,紧接着第2个FAT表(FAT2)之后,记录着根目录下每个文件的起始簇号、大小等属性。操作系统根据DIR中文件的起始簇号和大小,结合FAT表来定位文件。文件系统中1个文件的存储示意图如图5所示。

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

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中。



评论


相关推荐

技术专区

关闭