运动控制器28:FATFS文件系统应用文档1

本来FATFS系统有大量的资料可以参考,移植到STM32中有成熟的源码,但是还是想研究一下官网的文档介绍。
官网的链接如下FATFS APPLICATION NOTE

FATFS系统组织

具体视系统的情况而定,下面是一个典型的嵌入式系统的FATFS结构图:

FATFS1.png

如果只有一个SD卡,则nothing else will be needed.但是如果系统中同时还有各种类型的存储器存在,则还需要一个中间层来调度这些硬件,如下图:

FATFS2.png

在具体的系统中,所要用到的函数也是不同的,比如在READONLY型的系统中,则DISK_WRITE,GET_FATTIME,DISK_IOCTL不需要用到,具体的其他情况下面都有列出来:


FATFS3.png

限制

  • 文件系统类型: FAT, FAT32(rev0.0) and exFAT(rev1.0).
  • 支持打开文件数量: Unlimited. (depends on available memory)
  • 卷数量: Upto 10.
  • 卷大小:Upto 2 TB at 512 bytes/sector.
  • 文件大小: Upto 4 GB
  • 簇大小: Upto 128 sectors on FAT volume and upto 16 MB on exFAT volume.
  • 扇区尺寸: 512, 1024, 2048 and 4096 bytes.

内存使用

内存的使用根据系统的不同,以及使用文件系统的功能,占不同的内存大小,针对CM3,读写功能,最小可以占4.4K,最大6.3K


FATFS4.png

关于根据V和F来计算的,V表示的是卷宗数量,F表示的是打开文件的数量。

如何减尺寸

下表是描述根据不同的FF_FS设置,可以使用的函数,比如,不管怎么设置,其中f_mount,
f_open,
f_close,
f_read,都是必须的,但是FF_FS_
READONLY=0时,列表中所有的函数都是可以使用的。

FATFS5.png

LFN长文件名

FATFS支持两种类型的文件名,长文件名LFN和SFN,f_readdir函数两种都是可以使用的,其他函数默认为LFN,我们可以设置最大的文件名长度,通过FF_MAX_LFN来控制文件名在255字符之内,如果文件名无效,我们可以在FR_INVALID_NAME返回,另外,如果用的是8位CPU,LFN的文件将打不开,另外使能LFN使文件尺寸也有增加,具体如下:

FATFS6.png

Unicode API

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
如果我们设置好FF_LFN_UNICODE,则可以让API支持Unicode

exFAT Filesystem

文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法.在移动存储设备上比较常用的有FAT文件系统和ExFAT文件系统。

  • FAT分区依据FAT表中每个簇链的所占位数分为fat12、fat16、fat32三种格式;
  • exFAT是为了解决FAT32等不支持4G及其更大的文件而推出的文件系统。
  • 作为FAT的拓展EXFAT被大量用在消费产品,手持设备中,所以EXFAT也是一个标准的文件系统的一部分,并且簇分配的延时也减小了,这个性能提高了写文件的速度。

Re-entrancy 重入

先了解重入的概念:也就是多个卷同时使用了一个函数。
在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。

  • 如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。
  • 那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。不可重入函数在实时系统设计中被视为不安全函数。
  • 在单个卷的操作时候,如果有操作系统,当一个文件被调用,但同时被另外一个函数使用时,需要进行列队,我们可以设置等待时间FF_TIMEOUT,如果超时了,怎返回这个超时的标志。

Duplicated File Open 复制打开的文件

  • 和window文件一样,打开一个文件,则文件处于写的模式,但是复制的时候,是处于读的模式,两种模式是冲突的。当然打开的文件也不能重命名和删除,否则数据会出现冲突。
  • 我们可以通过FF_FS_LOCK来打开这个设置的开关,关闭以后,如果进行操作会返回FR_LOCKED的状态。

你可能感兴趣的:(运动控制器28:FATFS文件系统应用文档1)