FATFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块。FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开。因此,它独立(不依赖)于硬件架构。它可以被嵌入到低成本的微控制器中,如AVR, 8051, PIC, ARM, Z80, 68K 等等,而不需要做任何修改。

FatFS文件系统包含了文件

ff.h         :文件系统实现头文件,定义有文件系统所需的数据结构

diskio.h  :底层驱动头文件,就一些状态宏的定义和底层驱动函数的申明

integer.h:仅实现数据类型重定义,增加系统的可移植性

ffconf.h :文件系统配置

ff.c  :文件系统实现。

diskio.c 底层驱动

FatFs 提供下面的函数API:

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

f_open - 打开/创建一个文件f_close - 关闭一个文件

f_read - 读文件f_write - 写文件

f_lseek - 移动文件读/写指针

f_truncate - 截断文件

f_sync - 冲洗缓冲数据 Flush Cached Data

f_opendir - 打开一个目录

f_readdir - 读取目录条目

f_getfree - 获取空闲簇 Get Free Clusters

f_stat - 获取文件状态

f_mkdir - 创建一个目录

f_unlink - 删除一个文件或目录

f_chmod - 改变属性(Attribute)

f_utime - 改变时间戳(Timestamp)

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

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

f_forward - 直接转移文件数据到一个数据流 Forward file data to the stream directly

f_gets - 读一个字符串

f_putc - 写一个字符

f_puts - 写一个字符串

f_printf - 写一个格式化的字符磁盘I/O接口

f_tell - 获取当前读/写指针

f_eof - 测试一个文件是否到达文件末尾

f_size - 获取一个文件大小

f_error - 测试一个文件是否出错

因为FatFs模块完全与磁盘I/O层分开,因此需要下面的函数来实现底层物理磁盘的读写与获取当前时间。底层磁盘I/O模块并不是FatFs的一部分,并且必须由用户提供。

disk_initialize - Initialize disk drive 初始化磁盘驱动器

disk_status - Get disk status 获取磁盘状态

disk_read - Read sector(s) 读扇区

disk_write - Write sector(s) 写扇区

disk_ioctl - Control device dependent features 设备相关的控制特性

get_fattime - Get current time 获取当前时间

FatFS系统特性

打开文件数量:无限制,与可用内存有关。 卷(volume)数量:最多10个。

文件大小:与FAT规范有关(最大4G-1字节)。

卷大小:与FAT规范有关(在512字节/扇区上,最大2T字节)

簇(Cluster)大小:与FAT规范有关(在512字节/扇区上,最大64K字节) 扇区(Sector)大小:与FAT规范有关(最大4K字节)

创建文件并读写的使用例程

1)f_mount(0, &fatFS);

2)f_mkfs(0,1,512);                 //创建文件系统

FRESULT f_mkfs (
 BYTE  Drive,            
 BYTE  PartitioningRule, 
 WORD  AllocSize         );

分区规则:当给定0时,首先在驱动器上的第一个扇区创建一个分区表,然后文件系统被创建在分区上。这被称为FDISK格式化,用于硬盘和存储卡。当给定1时,文件系统从第一个扇区开始创建,而没有分区表。这被称为超级软盘(SFD)格式化,用于软盘和可移动磁盘。

3)f_getfree("0:", &fre_clust, &fs2)   //获得磁盘存储空间大小

4)f_open(&file1, "/srcfile.txt",  FA_OPEN_ALWAYS | FA_READ | FA_WRITE);  //打开文件

FIL     file1;

5)f_puts(cDataBuf, &file1);    //将cDataBuf[]数据写入 文件srcfile.txt

6)f_sync (&file1);   //刷新文件

7)f_lseek(&file1, 0);   //从文件 偏移字节0出开始读文件

8)f_read(&file1, buffer, 10,&r);     //读出10个字节到 buffer[]中

9)f_close(&file1);   //操作完成  关闭文件

创建目录例程

1) f_chdir("0:");   //切换到根目录

2)f_mkdir("folder");   //创建目录 folder

3)f_open(&file1, "folder/oldname2.txt", FA_CREATE_ALWAYS | FA_WRITE);  //打开folder目录下的文件

4)f_close(&file1);    //关闭文件

说说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. STM32平台SD卡的FatFS文件系统开发

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

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

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

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

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

  8. FATFS 文件系统

    转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51706228 1.文件系统是什么? 负责管理和存储文件信息的软件机构称为文件管理系 ...

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

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

随机推荐

  1. QQ自动发送+@好友功能+tencent://功能

    1.取出全部标题 D2007版本 procedure TForm1.Button1Click(Sender: TObject);var  hCurrentWindow:HWnd;  szText: a ...

  2. 一款基于css3的简单的鼠标悬停按钮

    今天给大家分享一款基于css3的简单的鼠标悬停按钮.这款悬停按钮鼠标经过前边框是间断的.当鼠标经过的时候边框间隔消失.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div ...

  3. Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS

    Spark MLlib回归算法------线性回归.逻辑回归.SVM和ALS 1.线性回归: (1)模型的建立: 回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多 ...

  4. Linux启动与禁止SSH用户及IP的登录

    以下就针对SSH方面讨论一下.假设有人特别关注Linux环境的安全性,第一就从login方面来进行讨论 1:Linux启动或禁止SSH root用户的登录 2:Linux限制SSH用户 事实上这些东西 ...

  5. Cracking the coding interview--Q3.1

    题目 原文: Describe how you could use a single array to implement three stacks. 译文: 你如何只用一个数组实现三个栈? 解答 我 ...

  6. 如何修复U盘提示被写保护的问题

    最近一客户来店里说新买的U盘没用多久,在复制文件时提示:该磁盘已被写保护! 打不开U盘,并且也不能格式化,在DOS下重新给U盘分区也没用. 今天鼎盛电脑科技服务部的工程师就帮大家解决这个问题. 首先客 ...

  7. repo 安装

    repo是android用于管理git仓库的工具. 参考链接 http://www.cnblogs.com/xiaoerlang/p/3549156.html mkdir ~/bin export P ...

  8. CentOS下screen 命令详解

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...

  9. 最短路径问题-Floyd算法

    概念 最短路径也是图的一个应用,即寻找图中某两个顶点的最短路径长度. 实际应用:例如确定某两个城市间的坐火车最短行车路线长度等. Floyd algorithm 中文名就是弗洛伊德算法. 算法思路:用 ...

  10. 腾讯企业邮箱POP,SMTP分别是什么

    腾讯企业邮箱在做域名解析的时候不用做pop3和 smtp设置,可以使用下列的协议:   POP3/SMTP协议 接收邮件服务器:pop.exmail.qq.com (端口 110),使用SSL,端口号 ...