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.h
        • 4.2.2 应用接口source/ff.c、source/ff.h
        • 4.2.3 宏配置source/ffconf.h
        • 4.2.4 操作系统相关source/ffsystem.c
        • 4.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==3FF_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源码后,使用前按日期顺序给源码打补丁。(从最早发布的开始)

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

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

  1. 在SD/MMC卡中可读写的FAT文件系统

    2019独角兽企业重金招聘Python工程师标准>>> FAT文件系统 关于eLua中FAT文件系统的实现是使用了来自Elm Chan的一个很好的FatFS文件包.它可以在读写模式中 ...

  2. 野火STM32F103——Fat文件系统及Flash芯片W25Q64学习记录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一.Fatfs是什么? 二.W25Q64是什么 三.使用步骤 1.引入库 2.移植文件系统 文件简单读 ...

  3. fatfs 文件属性_FatFS文件系统

    FATFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块.FatFs的编写遵循ANSI C,并且完全与磁盘I/O层分开.因此,它独立(不依赖)于硬件架 ...

  4. Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  5. Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework

    最近项目确实忙,但也是一直忙于有关项目和框架技术的事情,也一直致力于改善我的WInform开发框架.使得自己及客户使用起来更加方便,更加友好,更加高效. 在很多程序模块中都很常见,也是给客户扩展查询的 ...

  6. Linux文件系统与持久性内存介绍:块设备、闪存(NAND/NOR)、NVDIMM(非易失性内存)、PMEM(PMDK)- ndctl

    <持久内存开发套件(Persistent Memory Development Kit-PMDK) - pmem.io: PMDK> <PMDK介绍> <PMDK(NVM ...

  7. Linux文件系统与持久性内存介绍

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 You must be strong now. You must ...

  8. FAT文件系统原理的详细分析

    示例源代码下载: http://download.csdn.net/user/retty85 文本结构索引: 图片表格索引: 表1 分区表参数 表2 扩展分区表项的内容 一.硬盘的物理结构 图1 硬盘 ...

  9. 0501 0503 模块区别_apollo介绍之planning模块(四)

    吾尝终日而思矣 不如须臾之所学也 - <劝学> Planning模块简介 规划(planning)模块的作用是根据感知预测的结果,当前的车辆信息和路况规划出一条车辆能够行驶的轨迹,这个轨迹 ...

  10. python中pickle模块的用法_Python中json模块和pickle模块的简单介绍(附示例)

    本篇文章给大家带来的内容是关于Python中json模块和pickle模块的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Python中的json模块和pickl ...

最新文章

  1. 主成分分析、因子分析、聚类分析的比较与应用
  2. 暂无支持此机型的手机版本_华为AR地图发布重要更新版本 新增对8款机型的支持...
  3. SAP MM 按采购订单查询付款信息的报表?
  4. Save could not be completed. Eclipse国际化的问题解决
  5. Redis数据过期策略详解
  6. 蓄电池的容量及内阻测试
  7. 如何安装SAP JCo3
  8. FPGA是如何搭建的
  9. 根据省市区查询对应权限下的数据
  10. Power BI for Office 365(八)共享查询
  11. Silverlight在IIS中的配置
  12. 【20120517】【早晨】
  13. 浅谈Java中的各种锁
  14. powershell局域网内同步文件夹,文件脚本
  15. 扩展IQueryable实现属性名称排序
  16. c程序设计语言 azw,Go语言程序设计[azw3+epub+mobi][18.06MB]
  17. Android6.0之AMS如何启动app中篇之Task的管理
  18. redis问题及答案
  19. MySQL数据库餐厅点菜系统_餐馆点餐管理系统-数据库课程设计-MySQL
  20. 如何让U盘拷贝4G以上的大文件

热门文章

  1. Excel潜能系列——Excel游戏 2048
  2. Insyde uefi 隐藏设置_Hidden bar:Mac菜单栏图标隐藏利器
  3. Quartz定时任务动态数据库配置
  4. oracle 删除索引报错ORA-01418:sepecified index does not exist
  5. 计算机软件怎么装,电脑拷贝的软件怎么安装
  6. dwg格式的计算机图,例举电脑dwg文件怎么打开
  7. Fspecial函数用法
  8. 人工神经网络分析方法,神经网络数据分析步骤
  9. LaTeX Studio下载安装
  10. php微商系统,产品营销推广神器Thinkphp核心微商新版零售系统源代码