文档详情

单片机读取FLASH.doc

发布:2017-08-17约1.54万字共20页下载文档
文本预览下载声明
     FAT32文件系统的存储机制及其在单片机上的实现  FAT32文件系统您一定不会陌生,最多看到它是在windows操作系统里,但在一些嵌入式产品(如手机、MP3、MP4等)中,也能看到它的身影。从某种意义上来讲,FAT32文件系统是非常成功的,使我们可以脱离底层储存设备驱动,更为方便高效地组织数据。给单片机系统中的大容量存储器(如SD卡、CF卡、硬盘等)配以FAT32文件系统,将是非常有意义的(如创建的数据文件可以在windows等操作系统中直接读取等)。 FAT32本身是比较复杂的,对其进行讲解的最好方法就是实际演练。笔者手里持有一张刚以FAT32格式化的SD卡,我们就围绕它来讲解FAT32的实现机理。 FAT32分为几个区域,这里将用实例的方法对它们的结构与在文件存储中的功能进行详细的剖析。 实例说明 此实例首先在一张空的SD卡(已被格式化为FAT32格式)上创建一个文本文件,并在其中输入20个字符。再将它插入到单片机系统中,实现对这个文件的读取,将文件内容输出在调试终端上。 实现过程 格式化与创建文件 Windows上的磁盘格式化与文件创建就不用多说了。如下图: 2)DBR(DOS BOOT RECORD 操作系统引导记录区) DBR是我们进军FAT32的首道防线。其实DBR中的BPB部分才是这一区域的核心部分(第12~90字节为BPB),只有深入详实的理解了BPB的意义,才能够更好的实现和操控FAT32。关于DBR在FAT32中的地位就不多说了,以下面实际的DBR内  图所示:   上面的数据看起来杂乱不堪,无从下手,其实对我们有用的数据只不过90个字节(如图中彩色线标记的字节)。仅仅是这90个字节就可以告诉我们关于磁盘的很多信息,比如每扇区字节数、每簇扇区数、磁道扇区数等等。对于这些信息的读取,只要遵循DBR中的字段定义即可。(比如图中紫色字段的两个字节表示这张磁盘的每一个扇区有512个字节,具体的计算方法见下文) 字段定义如下表(BPB后面的422个字节对我们的意义不大,表中省略): 字段名称 长度 含义 偏移量 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       DBR的实现代码: struct FAT32_DBR { unsigned char BS_jmpBoot[3]; //跳转指令 offset: 0 unsigned char BS_OEMName[8]; // offset: 3 unsigned char BPB_BytesPerSec[2];//每扇区字节数 offset:11 unsigned char BPB_SecPerClus[1]; //每簇扇区数 offset:13 unsigned char BPB_RsvdSecCnt[2]; //保留扇区数目 offset:14 unsigned char BPB_NumFATs[1]; //此卷中FAT表数 offset:16 unsigned char BPB_RootEntCnt[2]; //FAT32为0 offset:17 unsigned char BPB_TotSec16[2]; //FAT32为0 offset:19 unsigned
显示全部
相似文档