FatFS r0.15 f_mkfs 参数说明

 1 /**
 2 * @brief 格式化
 3 * @param path:磁盘路径,比如"0:","1:"
 4 * @param mode: FM_FAT, FM_FAT32, FM_EXFAT and FM_SFD
 5 * @param au:簇大小
 6 * @retval 执行结果
 7 */
 8 uint8_t mf_fmkfs(uint8_t* path,uint8_t mode,uint16_t au)
 9 {
10   BYTE work[FF_MAX_SS]; /* Work area (larger is better for processing time) */
11   MKFS_PARM opt;
12   opt.align = 0;
13   opt.au_size = au; // 格式化时,要设置的簇大小,以字节为单位
14   opt.fmt = mode; // 格式化的类型 FM_FAT, FM_FAT32, FM_EXFAT and FM_SFD FM_ANY
15   opt.n_fat = 0;
16   opt.n_root = 0;
17   return f_mkfs( (const TCHAR*)path,&opt, work, sizeof (work));//格式化,drv:盘符;mode:模式;au:簇大小
18 }

格式化为FAT格式时,会根据磁盘容量选择FAT格式,包括FAT12 FAT16 FAT32

Developer Microsoft
Full Name File Allocation Table
(12-bit version) (16-bit version) (32-bit version)
Introduced August 1980 (QDOS) July 1988 (MS-DOS 4.0) August 1996 (Windows 95 OSR2)
Partition identifier 0x01 (MBR) 0x04, 0x06, 0x0E (MBR) 0x0B, 0x0C (MBR)
EBD0A0A2-B9E5-4433
-87C0-68B6B72699C7 (GPT)
Structures FAT12 FAT16 FAT32
Directory contents Table
File allocation Linked List
Bad blocks Linked List
Limits FAT12 FAT16 FAT32
Max file size 32 MiB 4 GiB 4 GiB
Max number of files 4077 65517 268435437
Max filename size 8.3 or 255 characters when using LFNs
Max volume size 32 MiB 4 GiB 2 TiB
Features FAT12 FAT16 FAT32
Dates recorded Creation, modified, access
Date range January 1, 1980 - December 31, 2108
Forks Only under OS/2 No
Attributes Read-only, hidden, system, archive, volume name
File system permissions No
Transparent compression Per-volume, Stacker, DoubleSpace, DriveSpace No
Transparent encryption Per-volume only with DR-DOS No

 

什么是FAT?

FAT(File Allocation Table)是“文件分配表”的意思。就是用来记录文件所在位置的表格,它对于硬盘的使用是非常重要的,假若丢失文件分配表,那么硬盘上的数据就会因无法定位而不能使用了。

微软在Dos和Windows系列操作系统前后曾使用了6种不同的文件系统,FAT12、FAT16、FAT32、NTFS、NTFS5.0和WINFS,现在的CF卡以及SD卡等闪存卡大部分都可以支持FAT16和FAT32,那么我们究竟应该用FAT16还是FAT32呢?


一、FAT16文件系统
  FAT16使用了16位的空间来表示每个扇区(Sector)配置文件的情形,故称之为FAT16。
FAT16由于受到先天的限制,因此每超过一定容量的分区之后,它所使用的簇(Cluster)大小就必须扩增,以适应更大的磁盘空间。所谓簇就是磁盘空间的配置单位,就象图书馆内一格一格的书架一样。每个要存到磁盘的文件都必须配置足够数量的簇,才能存放到磁盘中。FAT16各分区与簇大小的关系如下表:

分区大小

FAT16簇大小

16MB-127MB

2KB

128MB-255MB

4KB

256MB-511MB

8KB

512MB-1023MB

16KB

1024MB-2047MB

32KB

  如果你在一个1000MB的分区中存放50KB的文件,由于该分区簇的大小为16KB,因此它要用到4个簇才行。而如果是一个1KB的文件,它也必须使用一个簇来存放。那么每个簇中剩下的空间可否拿来使用呢?答案是不行的,所以在使用磁盘时,无形中都会或多或少损失一些磁盘空间。
  由上可知,FAT16文件系统有两个最大的缺点:
  (1)磁盘分区最大只能到2GB。FAT16文件系统已不能适应当前这种大容量的硬盘,必须被迫分区成几十甚至几百个磁盘空间。而分区磁盘的大小又牵扯出簇的问题来,可谓影响颇大。

  (2)使用簇的大小不恰当。试想,如果一个只有1KB大小的文件放置在一个1000MB的磁盘分区中,它所占的空间并不是1KB,而是16KB,足足浪费了15KB。

  以上这两个问题常常使得用户在“分多大的分区,才能节省空间,同时又可使硬盘的使用更加方便有效”的抉择中徘徊不定。

二、FAT32文件系统
  为了解决FAT16存在的问题,开发出FAT32系统。FAT32使用了32位的空间来表示每个扇区(Sector)配置文件的情形。利用FAT32所能使用的单个分区,最大可达到2TB(2048GB),而且各种大小的分区所能用到的簇的大小,也是恰如其分,上述两大优点,造就了硬盘使用上更有效率。现将与分区与簇的大小汇整如下,我们可仔细做个比较:

FAT16和FAT32的对比:

分区大小

FAT16簇大小

FAT32簇大小

16MB-32MB

2KB

不支持

32MB-127MB

2KB

512bytes

128MB-255MB

4KB

512bytes

256MB-259MB

8KB

512bytes

260MB-511MB

8KB

4KB

512MB-1023MB

16KB

4KB

1024MB-2047MB

32KB

4KB

2048MB-8GB

不支持

4KB

8GB-16GB

不支持

8KB

16GB-32GB

不支持

16KB

32GB以上

不支持

32KB

 

  以当前硬件所能支持的情况下,如将8GB硬盘划分为单个分区的话,使用的簇的大小也只有4KB,比起以往的FAT16来说,真是节省了许多空间。

  FAT32就是微软为了取代FAT16而开发出的又一种文件管理系统,FAT32最大可支持2TB(2048GB),对磁盘空间的管理也优于FAT16。

   FAT32是比FAT16更先进、性能更好的文件管理系统,不过闪存卡毕竟还不是硬盘,主流容量目前还不是特别高,由于有相当一部分数码相机仅支持FAT16,因此如果有移动存储器、或者在掌上电脑、移动影音等设备需要使用FAT32,在数码相机上使用FAT16(可支持FAT32的用FAT32);大容量闪存卡用FAT32,小容量闪存卡用FAT16。
————————————————
原文链接:https://blog.csdn.net/Ming_5257/article/details/73014942

 

posted @ 2022-11-29 12:45  求隐  阅读(1819)  评论(0编辑  收藏  举报