01 FATFS

fatfs

fatfs include fat16 and fat32. fat16 has the limit that the file name is 8.3 and the biggest file size is 2G.

refence site

https://www.pjrc.com/tech/8051/ide/fat32.html

http://www.c-jump.com/CIS24/Slides/FAT/lecture.html

http://blog.sina.com.cn/s/blog_67692a840100n3i5.html

https://blog.csdn.net/xiaobai32966/article/details/45074841

MBR

启动扇区为第一个扇区,由于历史原因或是实现操作系统的不同,导致很多定义出现了差异,目前必须保留的字段如下,具体的系统级别差异后续分析
在这里插入图片描述

FieldMicrosoft’s NameOffsetSizeValue
Bytes Per SectorBPB_BytsPerSec0x0B16 BitsAlways 512 Bytes
Sectors Per ClusterBPB_SecPerClus0x0D8 Bits1,2,4,8,16,32,64,128
Number of Reserved SectorsBPB_RsvdSecCnt0x0E16 BitsUsually 0x20
Number of FATsBPB_NumFATs0x108 BitsAlways 2
Sectors Per FATBPB_FATSz320x2432 BitsDepends on disk size
Root Directory First ClusterBPB_RootClus0x2C32 BitsUsually 0x00000002
Signature(none)0x1FE16 BitsAlways 0xAA55

注:
簇(cluster) === 是多个扇区的集合,是文件分块的最小单位,第一个簇的编号是2,没有0,1编号。
扇区(sector) == 是多个字节的集合
在这里插入图片描述

上图解析:

  • 每个扇区字节数:0x0200 = 512
  • 每个簇的扇区数:0x10 = 16
  • 每个簇的字节数:512 × 16 = 8192
  • 保留的扇区数: 0x22 = 34 (包括启动扇区)
  • FATS 个数:0x02
  • 每个FAT扇区数:0x3bd7=15319
  • 根目录的簇号:0x02

DISK Layout

在这里插入图片描述

由MBR分析出各区间地址

  • 启动扇区: 0x00000000 - 0x000001FF
  • 保留扇区: 0x00000200 - 0x000043FF
  • FAT1 : 0x00004400 - 0x0077F1FF
  • FAT2 : 0x0077F200 - 0x00EF9FFF
  • 第2簇 : 0x00EFA000 -0x00EFBFFF
  • 第3簇 : 0x00EFC000 -
    在这里插入图片描述

注意:数字为第几个扇区

FAT

FAT 文件分配表:

一个分区分成同等大小的簇,也就是连续空间的小块。簇的大小随着FAT文件系统的类型以及分区大小而不同,典型的簇大小介于2KB到32KB之间。每个文件根据它的大小可能占有一个或者多个簇;这样,一个文件就由这些这些(称为单链表)簇链所表示。然而,这些链并不一定一个接着一个在磁盘上存储,它们经常是在整个数据区域零散的储存。
文件分配表(FAT)是映射到分区每个簇的条目列表。每个条目记录下面五种信息中的一种。

  • 链中下一个簇的地址
  • 一个特殊的文件结束符(EOF)符号指示链的结束
  • 一个特殊的符号标示坏簇
  • 一个特殊的符号标示保留簇
  • 0来表示空闲簇

每个版本的FAT文件系统使用不同大小的FAT条目。这个大小已经由名字表示出来,例如FAT16文件系统的每个条目使用16位表示,32位文件系统使用32位表示。这个不同意味着FAT32系统的文件分配表能比FAT16映射更多的簇,它也允许FAT32有更大的分区大小。这也使得FAT32比FAT16更能有效地利用磁盘空间,因为每个驱动器能够寻址更小的簇,这也就意味着更少的空间浪费。

FAT条目值:

FAT12FAT16FAT32描述
0x0000x00000x?0000000空闲簇
0x0010x00010x?0000001保留簇
0x002 - 0xFEF0x0002 - 0xFFEF0x?0000002 - 0x?FFFFFEF被占用的簇;指向下一个簇
0xFF0 - 0xFF60xFFF0 - 0xFFF60x?FFFFFF0 - 0x?FFFFFF6保留值
0xFF70xFFF70x?FFFFFF7坏簇
0xFF8 - 0xFFF0xFFF8 - 0xFFFF0x?FFFFFF8 - 0x?FFFFFFF文件最后一个簇

注意FAT32只使用32位中的28位。高4位通常是0但它们是保留位,不要更改它们。在上面的表中它们用问号表示。

root directory

根目录是第2个簇,目录结构如下:
FAT32:每个文件或文件夹32个字节
在这里插入图片描述

具体:
在这里插入图片描述

如上图:
第1个字节如果是E5,表示删除,黄色为文件,红色为删除文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在长沙玩技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值