FAT16文件系统:SD卡数据读取步骤解析
4星 · 超过85%的资源 需积分: 20 114 浏览量
更新于2024-09-22
收藏 84KB DOC 举报
"本文主要介绍了SD卡中FAT16文件系统的数据读取流程,包括如何定位分区开始扇区、扇区大小、簇大小、FAT表位置以及根目录的位置,进而阐述了读取根目录下所有文件的过程。"
在FAT16文件系统中,SD卡的数据读取流程是一个关键的环节,它涉及到对磁盘分区信息的理解和操作。首先,我们需要找到分区的起始扇区。在这个例子中,通过读取MBR(主引导记录)的DPT(分区表)部分,我们可以发现分区开始扇区的偏移地址是65H(101 decimal)。这个信息通常位于MBR的特定位置,如0000001C6H处的4字节数据。
接下来,我们计算扇区的大小。扇区大小通常是固定的,比如这里读取到的0002(16进制)表示每扇区有2000H(8192 decimal)字节,这是通过读取地址00000CA00H+0B00H得到的。扇区大小的信息对于后续的数据访问至关重要,因为它决定了读写操作的基本单位。
然后,我们需要知道每簇包含多少个扇区,这是通过读取0000CA00+08得到的,此处为08,意味着每簇有8个扇区。保留扇区数(用于启动记录等特殊用途)为2,这个信息位于0000CA00+0E,即0002H。
FAT表的大小是通过读取0000CA00+16H得到的,这里是00F3H,这意味着FAT表占用155个扇区。FAT1和FAT2的起始地址可以通过上述信息计算得出,FAT1起始于0000CE00H,而FAT2紧接着FAT1,因此地址为00CE00H+F3*200H。
根目录的地址计算相对复杂,它位于FAT表之后,因此地址为00CA+02*200H+2*F3*200H=49A00H。一旦有了根目录的起始地址,就可以开始遍历并读取目录项。每个目录项占用20H(32)字节,第一个目录项的地址是INTDIR_ADDR=49A00H+20H=49A20H。
读取根目录的过程如下:从DIR_ADDR(即49A20H)开始,每次读取20H字节的数据,直至达到下一个目录项。在读取的数据中,00表示未使用,E5表示已删除,05表示E5,2E表示目录。文件名由DIR_ADDR~DIR_ADDR+7组成,最多8个字符,不足8个字符用空格填充;扩展名在DIR_ADDR+8~DIR_ADDR+A之间;文件的起始簇号则存储在DIR_ADDR+14H~DIR_ADDR+15H,高字节部分用于构建完整的簇号。
通过这样的步骤,我们可以读取并解析FAT16文件系统中的数据,从而实现对SD卡上文件的访问和操作。理解这些基础概念和流程对于开发涉及文件系统交互的应用程序或者进行数据恢复工作至关重要。
2014-10-22 上传
2020-07-29 上传
点击了解资源详情
2020-08-20 上传
2012-03-19 上传
2009-07-12 上传
2013-09-23 上传
2020-10-25 上传
点击了解资源详情
Augusdi
- 粉丝: 1w+
- 资源: 5737
最新资源
- SudokuSolver:简单的数独求解器
- vim-css-color:在编辑时在源代码中预览颜色-css source code
- Bibliotheque
- OpenSpecy:分析,处理,识别和共享拉曼光谱和(FT)IR光谱
- 钢琴基础教程,最经典钢琴入门教程.rar
- MathUI2014:MathUI2014 - Mozilla MathML 项目
- Draw-flowchart-with-drag-and-drop-in-HTML-and-[removed]这就是如何通过拖放操作使用html和javascript绘制流程图的全部内容。您可以使用HTML和JavaScript只需通过拖放即可绘制流程图。这仅用于学习目的
- 考试类精品--基于cassie-mujoco-sim,参考gym-cassie改的一个cassie行走仿真测试例子.zip
- le1e:code.le1e.com乐一易为Code提供简要信息服务,提供当前IP信息,网站的首页源码信息,持续提供简单的Web展示页面
- imteger,c语言ftp客户端源码,c语言
- spotiView:用于查看当前播放歌曲的应用程序在Spotify上有效
- 品牌运动鞋电商专题网站模板
- sunset:根据一天中的时间更改您的Atom UI和语法主题!
- Cat-Facts-Website-Source:#Cat-Facts-Website-Source www.barker.spacecatfacts网站JavaScript和PHP源代码。 处理用于选择事实,关闭音频和其他网站功能的控件-Source website php
- Terraform-In-Azure-Workshop:这是Azure Bootcamp中Terraform的所有代码和说明信息
- 数据结构课程设计源代码,匿名飞控c语言源码讲解,c语言