微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 用单片机的RAM虚拟U盘(文件系统:Fat16)

用单片机的RAM虚拟U盘(文件系统:Fat16)

时间:12-01 来源:互联网 点击:

0x2c4根目录启始簇(FAT32)
0x2b11卷标(非FAT32)
0x302FSInfo扇区(FAT32)
0x322启动扇区备份(FAT32)
0x3412保留未使用(FAT32)
0x368FAT文件系统类型(如FAT、FAT12、FAT16)
0x3e2操作系统自引导代码
0x401BIOS设备代号(FAT32)
0x411未使用(FAT32)
0x421标记(FAT32)
0x434卷序号(FAT32)
0x4711卷标(FAT32)
0x528FAT文件系统类型(FAT32)
0x1FE2扇区结束符(0x55 0xAA)
DPT分区表:
表1 图2分区表第一字段
字节位移字段长度字段名和定义
0x01BEBYTE0x80 引导指示符(Boot Indicator) 指明该分区是否是活动分区。
0x01BFBYTE0x01开始磁头(Starting Head)
0x01C06位0x01开始扇区(Starting Sector) 只用了0~5位。后面的两位(第6位和第7位)被开始柱面字段所使用
0x01C110位0x00开始柱面(Starting Cylinder) 除了开始扇区字段的最后两位外,还使用了1位来组成该柱面值。开始柱面是一个10位数,最大值为1023
0x01C2BYTE0x07系统ID(System ID) 定义了分区的类型,详细定义,请参阅图4
0x01C3BYTE0xFE结束磁头(Ending Head)
0x01C46位0xFF结束扇区(Ending Sector) 只使用了0~5位。最后两位(第6、7位)被结束柱面字段所使用
0x01C510位0x7B结束柱面(Ending Cylinder) 除了结束扇区字段最后的两位外,还使用了1位,以组成该柱面值。结束柱面是一个10位的数,最大值为1023
0x01C6DWORD0x0000003F相对扇区数(Relative Sectors) 从该磁盘的开始到该分区的开始的位移量,以扇区来计算
0x01CADWORD0x00DAA83D总扇区数(Total Sectors) 该分区中的扇区总数

3、FAT分区原理:

下面终于开始说FAT。

对于一个存储介质,隐藏区之后,才是文件系统的起始部分,以保留区开头。

FAT文件系统的结构是按照这个方式排列的:保留区、FAT区、副FAT区、根目录区、数据区。

(1)、保留区(Reserved Region)

保留区就是分区的开始扇区到FAT表之前的扇区,注意,保留区是位于分区之内,每个分区的开头都会有一个保留区。而保留区的第一个扇区必须是BPB。如果隐藏区为0,那么BPB将位于第0扇区。

DBR(Dos Boot Record):即操作系统引导记录,通常位于分区的第0个扇区,共512个字节(特殊情况也要占用其它保留扇区)。在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,os引导程序,结束标志几部分组成。 以用的最多的FAT32为例说明分区DBR各字节的含义。见图:

对应解释见下表:

表3 FAT32分区上DBR中各部分的位置划分
字节位移字段长度字段名对应图8颜色
0x003个字节跳转指令 
0x038个字节厂商标志和os版本号 
0x0B53个字节BPB 
0x4026个字节扩展BPB 
0x5A420个字节引导程序代码 
0x01FE2个字节有效结束标志 

其实,图中,除了黑色部分,其他部分同MBR是一样的,可以直接查看上面对MBR内容的分析表格。

需要注意的是:

1)跳转指令:EB xx 90,也就说第0和第2为分别是EB和90,至于具体意义,没有暂时没有深究;

2)对应MBR,最大的区别是,DBR没有分区表DPT!

(2)、FAT区

即文件分配表,有两份,第二份是第一份的备份。文件分配表每项代表一个簇,由于fat16使用两字节即16位来描述一个簇,所以最多只能管理65536个簇,又由于每簇最大只有32kB,所以使用fat16的时候,每个分区最大容量是2G。分区表的大小可以在DBR里设置。

(3)、根目录区:

第二个FAT表(即备份FAT)后面紧接着的下一个扇区,就是根目录区的开始。存放目录项,每个目录下为32个字节,记录一个文件或目录的信息(长文件名例外)。目录项所占的扇区与可以容纳的目录项有关,一般为512项,将占“512(目录项数)×32/512(扇区大小)”个扇区。但是目录项×32一定是扇区大小512的整数倍。

32字节目录项内容如下表:

字节偏移长度描述
0x008DOS文件名(附加空格)

第一个字节可以是下面的特殊数值:

0x00这个条目有用并且后面没有被占用条目
0x05最初字符确实是0xE5
0x2E点条目;.或者..
0xE5这个条目曾经被删除不再有用。取消删除文档工具作为取消删除的一步必须使用一个正常的字符取代它。
0x083DOS文件扩展名(空格补齐)
0x0b1文档属性

第一个字节可以是下面一些特殊值:

掩码描述
00x01只读
10x02隐藏
20x04系统
30x08卷标
40x10子目录
50x20档案
60x40设备(内部使用,磁盘上看不到)
70x80没有使用

属性值0x0F用来表示长文件名条目。

0x0c1保留,NT使用(参见后面)
0x0d1创建时间,最小时间分辨率:10ms单位,数值从0到199。
0x0e2创建时间。小时、分钟和秒根据后面的图示描述进行编码:
描述
15-11小时(0-23)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top