读出SD卡中的数据,然后拷贝到Nand中,这个过程需要文件系统的支持,和MCU的控制,本文文件系统采用的是FAT32,MCU是STC12LE5A56S2。
图1-1-1 Fat32在SD卡中的分布
BootSector大小是一个扇区,512个字节;ReservedSector是保留扇区,在本SD卡中保留扇区的个数是36个;Fat1与Fat2是分区表,二者内容完全一样;RootDirector是根目录,所在簇号是2,占用一簇8个扇区;DataArea即为数据存取部分。
图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表的起始扇区,就可以求得根目录所在的起始扇区了。
图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采用的是小段模式。
图1-4-1 RootDirectory中的内容
在根目录中使用32字节来表示一个文件(目录也被当作文件来看待),这32个字节的含义如表1-4-1所示。
表 1-4-1 文件属性说明
在这32字节中,对我们来说最重要的就是起始簇了,因为知道了起始簇就能找到文件所在的扇区位置。
采用的单片机是STC12LE5A56S2,有1280字节的RAM,每次读一个扇区,512字节。启动扇区(BootSector)对于SD卡来说一般是0扇区,知道了启动扇区就能知道该SD卡中的保留扇区、FAT表的起始扇区以及FAT表所占扇区,进而求得根目录。在根目录中可以通过文件名或属性来查找所需要的文件,进而找到文件的起始簇,有了起始簇在通过FAT表来判断是否是结束簇,若不是FAT表会告知下一簇,若是则读过程结束。
采用的单片机仅仅有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扇区中。
联系客服