转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51706228

1、文件系统是什么?

负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

即在磁盘上组织文件的方法。

常用的文件系统:

-FAT / FATFS

-NTFS: 基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构

-CDFS:CDFS是大部分的光盘的文件系统

-exFAT

2、FATFS  文件系统

位单片机做了优化。

FATFS是可裁剪的文件系统。

3、FATFS文件系统特点

1)、Windows兼容的FAT文件系统(支持FAT12/FAT16/FAT32)
2)、与平台无关,移植简单。全C语言编写。
3)、代码量少、效率高。
4)、多种配置选项
         个卷)
         多个ANSI/OEM代码页包括DBCS
         支持长文件名、ANSI/OEM或Unicode
         支持RTOS
         支持多种扇区大小
         只读、最小化的API和I/O缓冲区等

4、FATFS模块的层次结构图

①底层接口,包括存储媒介读/写接口(disk I/O)和供给文件创建修改时间的实时时钟,需要我们根据平台和存储介质编写移植代码。
②中间层FATFS模块,实现了FAT文件读/写协议。FATFS模块提供的是ff.c和ff.h。除非有必要,使用者一般不用修改,使用时将头文件直接包含进去即可。
③最顶层是应用层,使用者无需理会FATFS的内部结构和复杂的FAT协议,只需要调用FATFS模块提供给用户的一系列应用接口函数,如f_open,f_read,f_write和f_close等,就可以像在PC上读/写文件那样简单。

5、FATFS文件系统包:

下载地址:http://elm-chan.org/fsw/ff/00index_e.html

此地址不仅仅包含资料包下载,还包括文件系统一些知 识,包括函数说明,函数调用实例等。

6、FATFS文件系统包结构

文件名

功能

说明

ffconf.h

FATFS模块配置文件

需要根据需求来配置参数。

ff.h

FATFS和应用模块公用的包含文件

不需要修改

ff.c

FATFS模块源码

不需要修改

diskio.h

FATFS和disk I/O模块公用的包含文件

不需要修改

diskio.c

FATFS和disk I/O模块接口层文件

与平台相关的代码,需要用户根据存储介质来编写函数。

interger.h

数据类型定义

与编译器有关。

option文件夹

可选的外部功能(比如支持中文等)

汉字实验把字库放到SPI FLASH需要修改

经验:

大部分的可移植的小系统或者应用,都是采用类似这种将与底层打交道的源码开发给用户编写,然后提供顶层配置文件供配置。

diskio.c和diskio.h是硬件层。
ff.c和ff.h是FatFs的文件系统层和文件系统的API层。

个文件,即ffconf.h和diskio.c。FATFS模块的所有配置项都是存放在ffconf.h里面,我们可以通过配置里面的一些选项,来满足自己的需求。diskio.c是硬件层,负责与底层硬件接口适配。

7、ffconf.h:FATFS关键配置文件

①_FS_TINY。这个选项在R0.07版本中开始出现,之前的版本都是以独立的C文件出现(FATFS和Tiny
FATFS即可。
②即可。
③。

④ _USE_MKFS。这个用来定时是否使能格式化,本章需

⑤ _USE_FASTSEEK。这个用来使能快速定位,我们设置

,使能快速定位。

,使能,就可以通过相关函数来读取和设置磁盘的名字了。

,即简体中文(GBK码,需要c936.c文件支持,该文件在option文件夹)。

,通过ff_memalloc函数来动态分配长文件名的存储区域。

个设备(磁盘)。

8、FATFS移植步骤

①数据类型:在integer.h里面去定义好数据的类型。这里需要了解你用的编译器的数据类型,并根据编译器定义好数据类型。
②配置:通过ffconf.h配置FATFS的相关功能,以满足你的需要。
③个接口函数

9、FATFS开放函数

f_mount -
注册/注销一个工作区域(Work Area)

f_open -
打开/创建一个文件

f_close -
关闭一个文件

f_read -
读文件

f_write -
写文件

f_lseek -
移动文件读/写指针

f_truncate -截断文件

f_sync - 
冲洗缓冲数据 FlushCached Data

f_forward -
直接转移文件数据到一个数据流

f_stat -
获取文件状态

f_opendir -
打开一个目录

f_closedir -关闭一个已经打开的目录

f_readdir -
读取目录条目

f_mkdir -
创建一个目录

f_unlink -删除一个文件或目录

f_chmod - 
改变属性(Attribute)

f_utime -改变时间戳(Timestamp)

f_rename -
重命名/移动一个文件或文件夹

f_chdir -
改变当前目录

f_chdrive -
改变当前驱动器

f_getcwd - 
获取当前工作目录

f_getfree -
获取空闲簇 GetFree
Clusters

f_getlabel - Get volume label

f_setlabel - Set volume label

f_mkfs -
在驱动器上创建一个文件系统

f_fdisk - Divide a physicaldrive

f_gets -
读一个字符串

f_putc -
写一个字符

f_puts -
写一个字符串

f_printf -
写一个格式化的字符串

f_tell -
获取当前读/写指针

f_eof -
测试文件结束

f_size -
获取文件大小

f_error -
测试文件上的错误

FATFS 文件系统的更多相关文章

  1. 【液晶模块系列基础视频】3.1.fatfs文件系统的移植及接口函数的使用

    ============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...

  2. FATFS文件系统

    STM32移植文件系统,操作SD卡,对SD卡进行读写 FATFS文件系统与底层介质的驱动分离开来,对底层介质的操作都要交给用户去实现,它仅仅是提供了一个函数接口而已,函数为空,要用户添加代码.然后 F ...

  3. FatFs文件系统的移植

    FatFs 的底层可以写一次命令,读写多个扇区.FatFs的设计的读写的思想就很好,小块的数据,我就经过Buffer来存储,大块的数据,我就直接进行存取,那样速度,效率高了很多,看图: FatFs文件 ...

  4. 玩转X-CTR100 l STM32F4 l SD卡FatFs文件系统

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器具有SD卡接口,本教程使用免费 ...

  5. 说说FATFS文件系统(转)

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

  6. STM32平台SD卡的FatFS文件系统开发

    STM32平台SD卡的FatFS文件系统开发 系统平台: STM32系列的STM32F103ZE SPI方式与SD卡通信 SD上移植FatFS系统 1 FatFS文件系统 1.1 FatFS简介 Fa ...

  7. 第37章 基于SD卡的FatFs文件系统—零死角玩转STM32-F429系列

    第37章     基于SD卡的FatFs文件系统 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  8. Zynq Fatfs文件系统应用笔记

    Zynq Fatfs文件系统应用笔 Hello,panda 笔记介绍基于所描写叙述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统採用在Bare-Metal和轻 ...

  9. 移植Fatfs文件系统到工程中

    下载Fatfs文件管理系统:http://elm-chan.org/fsw/ff/archives.html 下载最新版本 在工程中新建Fatfs文件夹,把fatfs文件中的全部复制过来 由于Fatf ...

随机推荐

  1. PAT 1059. C语言竞赛(20)

    C语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 0. 冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……). 1. 排名为素数的学生 ...

  2. linux c编程:线程退出

    在线程创建的时候pthread_exit都是调用的固定参数,我们先来看下如果用自动变量作为pthread_exit的参数时出现的问题 typedef struct foo{ int a; int b; ...

  3. [iOS]通过JS调用iOS函数时的URL编码问题

    在前面的文章:[iOS]在WebApp中怎样使用JS调用iOS的函数 中,提到了怎样使用JS通过改动URL调用iOS的内部函数. 当中会遇到一个问题,就是编码问题.比方通过URL调用弹窗,在里面写上内 ...

  4. MySQL删除相同前缀的表,修改某个库的存储引擎

    MySQL5.0 之后,提供了一个新的数据库information_schema,用来记录MySQL总的元数据信息.元数据指的是 数据的数据. 比如表名.列名.列类型.索引名等表的各种属性名称.这个库 ...

  5. C#窗体互动

    说白了就是在一个窗体操作另外一个窗体的东西. 原理是把form2的数据提取出来,利用中间的静态类middle来传递数据,触发事件,调用委托,来修正form1 效果如下:   Form1.cs usin ...

  6. LeetCode:柠檬水找零【860】

    LeetCode:柠檬水找零[860] 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向 ...

  7. Python OOP(2)-static method,class method and instance method

    静态方法(Static Method): 一种简单函数,符合以下要求: 1.嵌套在类中. 2.没有self参数. 特点: 1.类调用.实例调用,静态方法都不会接受自动的self参数. 2.会记录所有实 ...

  8. LINQ 学习路程 -- 查询操作 OrderBy & OrderByDescending

    Sorting Operator Description OrderBy 通过给定的字段进行升序 降序 排序 OrderByDescending 通过给定字段进行降序排序,仅在方法查询中使用 Then ...

  9. 大话设计模式--享元模式 Flyweight -- C++实现实例

    1. 享元模式: 运用共享技术有效地支持大量细粒度的对象. 享元模式可以避免大量非常相似类的开销,在程序设计中,有时需要生成大量颗粒度的类实例来表示数据,如果能发现这些实例除了几个参数外基本都是相同的 ...

  10. hdoj1001--Sum Problem

    Problem Description Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge).In this problem, y ...