首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
ARM
» SD卡FAT16文件系统的学习笔记(3)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
SD卡FAT16文件系统的学习笔记(3)
发短消息
加为好友
yuyang911220
当前离线
UID
1029342
帖子
9914
精华
0
积分
4959
阅读权限
90
在线时间
286 小时
注册时间
2014-5-22
最后登录
2017-7-24
论坛元老
UID
1029342
性别
男
1
#
打印
字体大小:
t
T
yuyang911220
发表于 2014-10-29 17:36
|
只看该作者
SD卡FAT16文件系统的学习笔记(3)
记录
,
信息
七、
FDT
与
FAT
表的简单介绍
读取文件之前要先详细了解一下FDT,和FAT表的内容
一个FDT表占32个扇区,共有512个文件登记信息,所以每个文件登记信息的大小为32*512/512=32Byte
每个文件登记信息如下图所示
对于我们来说,这个文件记录信息最重要的就是最后六个字节
最后四个字节代表文件大小,由文件大小可以推算出该文件占用多少个数据簇
第0x1a到0x1b个字节道标文件开始的首簇号,知道文件的首簇号我们就可以查看FAT表的相应信息,就可得到该文件所占用的所有数据簇的簇号。
以下是FAT表的结构
上表中,06、07单元映射了磁盘3号簇区。有之前的介绍中可以知道,我这张SD卡1个簇包含4个扇区。也就是说在写数据时,只有写完了3号簇的4个扇后,将FAT表的06,07单元填写04,00;才可继续在04号簇上写数据。如果数据写完后还没有写满3号簇,则在FAT表的06,07单元填写FF,FF.
也就是说在FAT表中记录着每个数据簇的状态,且每个数据簇的状态占用两个字节。如果这两个字节等于0xffff,则代表该数据簇以被占用,且文件在该数据簇中结束。如果这两个字节等于0x0001~0xfffe,则代表该数据簇已被占用,且该文件没有结束,而该文件存放的下一数据簇的簇号就等于这两个字节的大小。
八、
读取一个文件
下面以我的SD卡为例子,向大家介绍读写SD的FAT文件系统的文件(最好先安装一个叫做winhex的软件)。
首先我的SD卡存放着这样一个文件
要打开我这个名为lqz.txt的文件的,我们先查找FDT表中关于lqz.txt这个文件的登记信息。
因为之前已经知道了FDT的首地址是第585扇区,我们来到585扇区,开始搜索LQZ.TXT(必须先转换成大写字母)
最后在地址为0x4a310(也就是第0x4a310/512=593扇区)的地方搜索到LQZ.TXT的文件登记信息,在最后四个字节得知该文件大小为0x00002c89=11401Byte,占用11401/512/4=6个数据簇,从倒数第5,6个字节可以知道文件的首簇号为0x2fe4,然后在FAT表根据文件的首簇号查找接下来文件占用的五个数据簇簇号,数据簇0x2fe4在FAT的登记位置=FAT地址+0xfe4*2=0xca00+0x2fe4*2=0x129c8,我们来到0x129c8这个地址
数据簇0x2fe4的信息就存放在0x129c8,和0x129c9这个字节里,从上图可以看出这两个字节等于0x46F4,也就是说LQZ.TXT存放的下一个数据簇的簇号为0x46F4,由于该文件占用6个数据簇,所以我们必须继续查找剩下的4个数据簇的簇号。我们继续查找簇号为0x46f4的数据簇在FAT表的信息,地址为0xca00+0x46f4*2=0x157e8
由上图可以下一数据簇的簇号为0x46f5。然后按照上诉方法查找剩余三个簇号分别为0x46f6,0x46f7,0x46f8,最后在0x46f8对应的地方存放着0xffff,代表文件到此结束。
经过上诉步骤我们知道我lqz.txt文件依次存放在0x2fe4,0x46f4,0x46f5,0x46f6,0x46f7,0x46f8这6个数据簇,接下来我们就读取这6个数据簇的内容即可。
比如说:数据簇0x2fe4的地址=数据簇0地址+0x2fe4*4*512=0x4c200+0x2fe4*4*512=0x183e200,0x183e200/512=49649,也就是在物理扇区49649~49652这个四个扇区都是数据簇0x2fe4的内容
收藏
分享
评分
继承事业,薪火相传
回复
引用
订阅
TOP
返回列表
模拟电路
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议