FatFs(通用FAT文件系统模块)下载与介绍

1.FatFs(通用FAT文件系统模块)下载与介绍
2.FatFs移植——基于STM32 SD卡
3.FatFs学习(1)——枚举:返回值FRESULT

注:本文基于R0.14版本,给出的源码、翻译以及分析不保证与其他版本适合。

FatFs——通用FAT文件系统模块

  FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。FatFs模块是按照ANSI C(C89)编写的,并且与磁盘I/O层完全分开。因此,它独立于平台。它可以并入资源有限的小型微控制器中,例如8051,PIC,AVR,ARM,Z80,RX等。
  “FatFs模块是为教育,研究和开发开放的免费软件。您可以在个人项目或商业产品中使用,修改和/或重新分发它,而不受您的责任限制。”

1 . 特征

  • DOS / Windows兼容的FAT / exFAT文件系统。
  • 平台无关。易于移植。
  • 程序代码和工作区的占用空间非常小。
  • 支持以下各种配置选项:
    • ANSI / OEM或Unicode中的长文件名。
    • exFAT文件系统,64位LBA和GPT可存储大量数据。
    • RTOS的线程安全。
    • 多个卷(物理驱动器和分区,最多10个卷)。
    • 可变扇区大小。
    • 多个代码页,包括DBCS。
    • 只读,可选API,I / O缓冲区等…

2. 层级结构

FatFs层级结构如下:
FatFs层级结构
  (1)应用层调用FatFs模块接口,FatFs调用底层接口,实现对USB、SD卡等存储设备的操作。
  (2)需提供RTC时钟给FatFs模块。

3. 源码下载地址

  FatFs官方下载地址:http://elm-chan.org/fsw/ff/archives.html

  在该页中有FatFs和Petit FatFs。
   Petit FatFs是用于小型8位微控制器的FatFs模块的子集。它是按照ANSI C编写的,并且与磁盘I/O层完全分开。即使RAM大小小于扇区大小,也可以将其合并到内存有限的微型微控制器中。
  简单来说,Petit FatFs属于FatFs的阉割版,功能比较简单,占用资源小。我们这里选择完整版的FatFs。
  页面中有至今为止已发布的版本及其发布时间,可以下载任一版本,目前最新版本为0.14(本文同样基于0.14),点击版本即可下载。

FatFs Archives

4. 源码文件结构

  压缩包下载后解压,有两个文件夹(/documents/source)和一个txt文件(LICENSE.txt)。
  /documents是关于FatFs的一些资料,/source文件夹下是FatFs的源码,LICENSE.txt则是FatFs的许可证书。

FatFs结构1

4.1 documents文件夹

FatFs documents
  00index_e.html相当于FatFs的主页。
  updates.txt记录了各个版本的更新。

4.1.1 documents/doc/

  doc文件夹存放了html格式的说明文档,里面有函数的解释。

FatFs documents/doc/

4.1.2 documents/res/

  res文件夹提供一些应用示例(app1~6.c)、原理示意图以及格式化对照表(mkfs.xlsx
FatFs documents/res/

4.2 source文件夹

  source文件夹是FatFs的源码。
  FatFs源码不多,只有4个C文件和3个H文件(0.14版本)。
FatFs source

4.2.1 底层source/diskio.csource/diskio.h

  diskio是FatFs的IO层实现,官方提供了框架,移植时只需要完善其中的一些函数即可,十分友好。

函数作用
disk_initialize初始化驱动
disk_status获取驱动状态
disk_initialize初始化驱动
disk_read读扇区
disk_write写扇区
disk_ioctl用于实现各种各样的功能
4.2.2 应用接口source/ff.csource/ff.h

  ff.c/ff.h是应用接口的实现,属于FatFs源码,移植无需修改。应用时只需要调用其中函数即可。
  常用的文件的开/关(f_open/f_close)、读/写(f_read/f_write) 以及目录的相关操作接口都在这里。由于函数较多,这里不深入研究。

4.2.3 宏配置source/ffconf.h

  ffconf.h内是关于FatFs的配置选项。这个文件增加了可移植性。我们可以通过配置相关选项使能/禁止某些功能,控制内存资源的消耗。这些宏的解释,后期通过其他文章说明。

4.2.4 操作系统相关source/ffsystem.c

  ffsystem.c是FatFs的OS相关函数示例代码。如果你移植在操作系统上,且配置FF_USE_LFN==3FF_FS_REENTRANT为真,那么就需要将该文件添加到工程内。
  该文件内函数已预置了部分操作系统的样例,包括Win32uITRONuC/OS-IIFreeRTOSCMSIS-RTOS,基本上在函数内只需要选择其中一种,友好到爆。下面是其中一个函数:

/*------------------------------------------------------------------------*/
/* Release Grant to Access the Volume                                     */
/*------------------------------------------------------------------------*/
/* This function is called on leaving file functions to unlock the volume.
*/

void ff_rel_grant (
	FF_SYNC_t sobj	/* Sync object to be signaled */
)
{
	/* Win32 */
	ReleaseMutex(sobj);

	/* uITRON */
//	sig_sem(sobj);

	/* uC/OS-II */
//	OSMutexPost(sobj);

	/* FreeRTOS */
//	xSemaphoreGive(sobj);

	/* CMSIS-RTOS */
//	osMutexRelease(sobj);
}

  FF_USE_LFN==3:启用 LFN,且使用堆上的动态工作缓冲区。
  FF_FS_REENTRANT为真:启用重写入。

4.2.5 unicode编码source/ffunicode.c

  ffsystem.c用于unicode编码,里面有大量的unicode相关数组。
  FF_USE_LFN为真时必须包含此文件。
  当将FatFs用 DBCS 配置 LFN 时,这个模块将在.const部分占用大量内存。如果系统使用Unicode进行代码转换,则应该修改此模块以使用该函数,以避免无谓的内存消耗。

  DBCS包含:
    932 - Japanese (DBCS) 、
    936 - Simplified Chinese (DBCS)、
    949 - Korean (DBCS)、
    950 - Traditional Chinese (DBCS)

5. FatFs补丁

  FatFs补丁网址:http://elm-chan.org/fsw/ff/patches.html
  网址上会公布已发现并解决的BUG,以补丁形式发布。以R0.14版本为例,该版本有三个补丁。因此,下载FatFs R0.14源码后,使用前按日期顺序给源码打补丁。(从最早发布的开始)

FatFs 补丁


  以上是本文的全部,很荣幸写的文章被阅读完。
  刚入门的小白,如果本文有错欢迎大家提醒,十分感谢。

  • 27
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值