SD卡FAT16文件系统的学习笔记-上.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、 读文件的流程 1. 读物理扇区0,得到引导扇(逻辑扇区0)的偏移地址。 2. 读引导扇的内容,得到文件系统基本配置信息。 3. 根据文件系统的基本配置信息计算FAT,FDT,数据簇的起始地址和大小。 4. 根据要读的文件名有哪些信誉好的足球投注网站FDT表,找到要读文件的起始数据簇编号,大小。 5. 根据文件的起始数据簇编号在FAT表中查找所有该文件占用的数据簇及数据簇访问的先后关系。 6. 读取该文件的起始数据簇的内容,及下一数据簇内容(有需要时)。 二、 读取物理扇区0 先读取SD卡的第一个扇区(512字节),即扇区0,然后该扇区最后部分的数据如下图所示 正常的话,该扇区最后两个字节如上图所示为55 AA,如果不是则证明是读错了,或者该SD没有被格式化。 该扇区有两个重要信息: 一、 在0x1ca开始的四个字节9f c9 03 00,即0x3c99f=248223,代表该SD卡友248223个扇区,因为每个扇区有512字节,所以该SD卡容量为248223*512/1024/1024=121.2MByte 二、在0x1c6开始的四个字节61 00 00 00,即0x61=97,它表示引导扇区在扇区97。那我们就接着读扇区97,获取SD卡里更详细的信息,这个扇区0就可以不用管了。 三、 读取引导扇区 以下是扇区97前64Byte的内容。因为97*512=0xc200,所以可以下图左边的偏移地址为c200 首先第0x3到0xA的内容为ASCII码的“MSDOS5.0”,不是重要信息 第0xb开始的两个字节00 02,即0x2000=512,代表每个扇区(sector)有512个字节(byte) 接下来的04代表每个簇(cluster)有4个扇区 接下来的04 00 即0x4代表有4-1个保留扇区,即是第一个FAT表所在扇区为引导扇区(97)+4=扇区101 接下来的02 代表有两个FAT表 接下来的00 02,即0x2000=512,代表FDT(目录区)有512登记项 第0x16开始的两个字节f2 00,即0xf2=242,代表每个FAT表占242个扇区 第0x36到0x3d代表的就是“FAT16 ”的ASCII码,说明这SD卡是FAT16的格式 四、 FAT16文件系统的结构 知道以上的信息之后我们就可以根据以上信息计算出FAT1,FAT2,FDT和数据簇的首地址和结束地址,但在计算之前,我有必要介绍一下整个FAT16文件系统的结构和各个区的含义与作用。 五、 获取文件系统基本配置信息 现在既然已经大概了解了引导扇,FAT1,FAT2,FDT和数据簇的作用,接下来就说一下怎么计算它们的起始地址和结束地址。我们用扇区来作为地址单位。 我们首先定义两个结构体 typedef struct { U16 BytesPerSector; //每个扇区多少字节 U8 SectorsPerCluster; //每个簇有多少个扇区 U16 ReserveSectors; //保留扇区数 U8 FatTableNums; //有多少个FAT表 U16 RootDirRegNums; //根目录允许的登记项数目 U16 SectorsPerFat; //每个FAT表有多少个扇区 U32 SectorNums; //总的扇区数 U8 FileType[7]; //文件系统类型 }FAT_PARA; typedef struct { U32 Logic; //引导扇(逻辑扇区0)对物理0扇区里的偏移地址 U32 FAT1; U32 FAT2; U32 FDT; U32 Cluster; //数据簇的偏移地址 }FAT_OFFSET; FAT_PARA SD_para; //声明两个结构体变量 FAT_OFFSET SD_offset; 由之前的知识可以知道,我们首先从物理扇区0知道SD_offset.Logic的地址,然后就可以找到引导扇.然后再在引导扇里找到SD_para里面所有变量的值。 U8 buffer[512]; Read_Single_Block(0, buffer);//把物理扇区0的512个字节的数据读到buffer里 SD_offset.Logic = (* (U16 *) (buffer + 0x1c6)) + ((* (U16 *) (buffer + 0x1c8)) 16); //得到引导扇的偏移地址 Read_Single_Block(SD_offset.Logic, buffer) ; //读引导扇的数据 //获取参数,以便计算各个区的偏移地址 SD_para

文档评论(0)

dsdmlwz1v9 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档