:基于FAT32文件系统的SD卡向Nand Flash中拷贝数据

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 15:03:22

读出SD卡中的数据,然后拷贝到Nand中,这个过程需要文件系统的支持,和MCU的控制,本文文件系统采用的是FAT32,MCU是STC12LE5A56S2。

第一章 Fat32在SD卡中的实现

1.Fat32在SD中的分布

图1-1-1 Fat32在SD卡中的分布

BootSector大小是一个扇区,512个字节;ReservedSector是保留扇区,在本SD卡中保留扇区的个数是36个;Fat1与Fat2是分区表,二者内容完全一样;RootDirector是根目录,所在簇号是2,占用一簇8个扇区;DataArea即为数据存取部分。

2.BootSector解剖

图1-2-1 BootSector 内容

BootSector是操作系统引导扇区,又被称为DBR(Dos Boot Sector),用WinHex打开后的内容如图1-2-1所示。在DBR中真正对我们有用的是BPB(BIOS Parameter Block),BPB位于DBR的12-90字节处。BPB详细内容如下:

字段名称 长度 含义 偏移量 jmpBoot 3 跳转指令 0 OEMName 8 这是一个字符串,标识了格式化该分区的操作系统的名称和版本号 3 BytesPerSec 2 每扇区字节数 11 SecPerClus 1 每簇扇区数 13 RsvdSecCnt 2 保留扇区数目 14 NumFATs 1 此卷中FAT表数 16 RootEntCnt 2 FAT32为0 17 TotSec16 2 FAT32为0 19 Media 1 存储介质 21 FATSz16 2 FAT32为0 22 SecPerTrk 2 磁道扇区数 24 NumHeads 2 磁头数 26 HiddSec 4 FAT区前隐扇区数 28 TotSec32 4 该卷总扇区数 32 FATSz32 4 FAT表扇区数 36 ExtFlags 2 FAT32特有 40 FSVer 2 FAT32特有 42 RootClus 4 根目录簇号 44 FSInfo 2 文件系统信息 48 BkBootSec 2 通常为6 50 Reserved 12 扩展用 52 DrvNum 1 - 64 Reserved1 1 - 65 BootSig 1 - 66 VolID 4 - 67 FilSysType 11 - 71 FilSysType1 8 - 82

表1-2-1 BPB内容介绍

在BPB中对我们最重要的是红色标记的部分,根据图1-1,知道了保留扇区的数目就可以求得FAT所在的扇区;知道了FAT表的个数,每个FAT表所占的扇区以及FAt表的起始扇区,就可以求得根目录所在的起始扇区了。

3.FAT表解剖

图1-3-1 FAT表中的内容

Fat表中的内容如图1-3-1所示,开始的8个字节“F8 FF FF 0F FF FF FF FF”为FAT表的开始标志字节。记录是从簇2开始的,簇2中的内容是“FF FF FF 0F”表示簇2没有后继簇—即该文件一个簇就可以装下;簇3中的内容是“04 00 00 00”表示簇3的下一簇是簇4—Fat采用的是小段模式。

4.根目录解剖

图1-4-1 RootDirectory中的内容

在根目录中使用32字节来表示一个文件(目录也被当作文件来看待),这32个字节的含义如表1-4-1所示。

表 1-4-1 文件属性说明

在这32字节中,对我们来说最重要的就是起始簇了,因为知道了起始簇就能找到文件所在的扇区位置。

5.单片机读SD卡流程


               图1-5-1 读SD卡流程

采用的单片机是STC12LE5A56S2,有1280字节的RAM,每次读一个扇区,512字节。启动扇区(BootSector)对于SD卡来说一般是0扇区,知道了启动扇区就能知道该SD卡中的保留扇区、FAT表的起始扇区以及FAT表所占扇区,进而求得根目录。在根目录中可以通过文件名或属性来查找所需要的文件,进而找到文件的起始簇,有了起始簇在通过FAT表来判断是否是结束簇,若不是FAT表会告知下一簇,若是则读过程结束。

第二章 Fat32在Nand Flash中的实现

采用的单片机仅仅有1280字节的RAM,缓冲区的大小只能是一个扇区512字节,要实现SD卡中的数据拷贝到Nand Flash中,采用的思想便是SD卡中的数据与Nand Flash进行一一映射,而不再进行数据的处理(只有少许改动)。这样不仅节省了RAM,而且在完成了向Nand Flash中写入数据后,就可以将Nand Flash当作SD卡来对待,不用再重新写Nand Flash文件系统的读过程。

FAT32 在Nand Flash上的分布如表1-1所示:

表2-1

红色部分是在读出SD卡的0扇区内容后需要做的修改,然后再写进Nand Flash的0扇区中。