首页 > 编程知识 正文

文件fat32,fat文件系统支持什么结构

时间:2023-05-05 00:41:19 阅读:223537 作者:558

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

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

FatFs下载与介绍 FatFs——通用FAT文件系统模块1 . 特征2. 层级结构3. 源码下载地址4. 源码文件结构4.1 documents文件夹4.1.1 documents/doc/4.1.2 documents/res/ 4.2 source文件夹4.2.1 底层source/diskio.c、source/diskio.h4.2.2 应用接口source/ff.c、source/ff.h4.2.3 宏配置source/ffconf.h4.2.4 操作系统相关source/ffsystem.c4.2.5 unicode编码source/ffunicode.c 5. FatFs补丁

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层级结构如下:

  (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),点击版本即可下载。

4. 源码文件结构

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

4.1 documents文件夹


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

4.1.1 documents/doc/

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

4.1.2 documents/res/

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

4.2 source文件夹

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

4.2.1 底层source/diskio.c、source/diskio.h

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

函数作用disk_initialize初始化驱动disk_status获取驱动状态disk_initialize初始化驱动disk_read读扇区disk_write写扇区disk_ioctl用于实现各种各样的功能4.2.2 应用接口source/ff.c、source/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==3或FF_FS_REENTRANT为真,那么就需要将该文件添加到工程内。
  该文件内函数已预置了部分操作系统的样例,包括Win32、uITRON、uC/OS-II、FreeRTOS和CMSIS-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源码后,使用前按日期顺序给源码打补丁。(从最早发布的开始)



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

margin

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。