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