转载请注明出处: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. 虚拟机 minimal 安装增强包

    在虚拟机下安装了一个centos的minimal镜像,发现增强包不能安装,鼠标不能在虚拟机和物理机间自由切换.不能共享粘贴板,非常是不爽,这里摸索出在centos  minimal OS下安装增强包的 ...

  2. 2.Django命令行工具搭建项目(django-admin.py & manage.py)

    1.概念: django-admin.py是django的用于管理任务的命令行工具 manage.py是对django-admin.py的简单包装,每个project里会有一个自己的manage.py ...

  3. mysql 分页测试,

    大环境:MySQL5.6 自己造了 27万数据, 一次性 查出来,会超时: 而分页跑,会查出来8s: 但是在少于27万时,直接查比 分页查快5倍:

  4. 读a paper of ICCV 2017 : Areas of Attention for Image Captioning

    前言废话,作者说把代码公布在gitub上,但是迟迟没有公布,我发邮件询问代码情况,邮件也迟迟不回,表示很尴尬..虽然种种这些,但是工作还是好工作,这个没的黑,那我们今天就来详细的介绍这篇文章. 导论: ...

  5. mysql存储引擎(待补充)

    数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎 存储引擎说白了就是如何存取数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在 ...

  6. 数据库基本表创建 完整性约束 foreign Key

    理解以下几张表的内容,根据实际情况设计属性名.数据类型.及各种完整性约束(primary key.foreign key.not null.unique.check),用数据定义语言实现,然后设计实验 ...

  7. css 行内元素 块元素 替换元素 非替换元素 以及这些元素的width height margin padding 特性

    一.各种元素的width height margin padding 特性(具体css元素的分来参看二) 1.块级元素 width. height. margin的四个方向. padding的四个方向 ...

  8. Cisco IOS版本命名规则

    首先说说IOS的运行平台,c2500.c2600.c4500.c2950代表运行此IOS的硬件平台,例如:C2500指2500系列路由器. 其次,看看IOS的版本,IOS有主版本号:11.0.11.1 ...

  9. BZOJ 3943 [Usaco2015 Feb]SuperBull:最大生成树

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3943 题意: 有n只队伍,每个队伍有一个编号a[i]. 每场比赛有两支队伍参加,然后选一支 ...

  10. MySQL常用方法

    1.INSTR,例:INSTR(content,'\"SHOP_DES\"')>0,返回字符串在某一个字段的内容中第一次出现位置,没有为0 2.REPLACE,例:conte ...