说说FATFS文件系统(转)

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);    //关闭文件

分类: 嵌入式系统知识点
好文要顶 关注我 收藏该文

张凌001
关注 - 0
粉丝 - 17

+加关注

0
0

« 上一篇:以操作系统的角度述说线程与进程(转)以及区别及联系
» 下一篇:C语言100个经典的算法之兔子总数计算内含printf的用法

  <p class="postfoot">posted on <span id="post-date">2018-02-22 15:52</span> <a href="https://www.cnblogs.com/zhugeanran/">张凌001</a> 阅读(<span id="post_view_count">776</span>) 评论(<span id="post_comment_count">0</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=8459150" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(8459150);return false;">收藏</a></p>
</div>
<script type="text/javascript">var allowComments=true,cb_blogId=406829,cb_entryId=8459150,cb_blogApp=currentBlogApp,cb_blogUserGuid='7d0073df-8601-4e21-2355-08d54dbac325',cb_entryCreatedDate='2018/2/22 15:52:00';loadViewCount(cb_entryId);var cb_postType=1;</script></div><a name="!comments"></a><div id="blog-comments-placeholder"></div><script type="text/javascript">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script>
刷新评论刷新页面返回顶部
注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。
【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库!
【推荐】华为云11.11普惠季 血拼风暴 一促即发
【工具】SpreadJS纯前端表格控件,可嵌入应用开发的在线Excel
【腾讯云】拼团福利,AMD云服务器8元/月
相关博文:
· FATFS 文件系统
· fatfs文件系统f_lseek追加文件
· 文件系统、根文件系统 转
· SD卡的读写和FatFS文件系统
· FatFS文件系统详解-附移植建议

Powered by:

<a id="Footer1_Hyperlink3" name="Hyperlink1" href="https://www.cnblogs.com/" style="font-family:Verdana;font-size:12px;">博客园</a>
<br>
Copyright © 张凌001

说说FATFS文件系统(转)相关推荐

  1. 关于FATFS文件系统挂载多个磁盘

    关于FATFS文件系统挂载多个磁盘以及SPI FLASH的应用问题!

  2. fatfs文件系统支持中文长文件名

    一.引出 Fatfs文件系统中存在短文件名和长文件名的概念.当文件名的字符长度短于13个字符时,称为短文件名.当长于13个字符则称为长文件名. 如果不配置Fatfs文件系统的长文件名功能,当遇到短于1 ...

  3. FATFS文件系统框架及源码分析

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

  4. FatFs文件系统的移植

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

  5. 基于SD卡的FatFs文件系统(FatFs移植到STM32)

    平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线 工程介绍:主要文件在USER组中,bsp_sdio_sdcard.c,bsp_sdio_sdcard.h和main.c, ...

  6. STM32CubeMX学习笔记(25)——FatFs文件系统使用(操作SPI Flash)

    一.FatFs简介 FatFs 是面向小型嵌入式系统的一种通用的 FAT 文件系统.它完全是由 ANSI C 语言编写并且完全独立于底层的 I/O 介质.因此它可以很容易地不加修改地移植到其他的处理器 ...

  7. 2021-08-11 TM32F103 Buffer FatFs 文件系统移植

    FatFs 本文展示了STM32 FatFs文件系统移植 内容涉及 : FatFs 文件系统移植 SPI函数移植过程 SPI字节数据模拟输出独写 缓存读写 USART串口的识别 IO口输入输出 按键的 ...

  8. STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)

    文章目录 1. 准备工作 1.1. 简单扫盲 1.1.1. SD卡 1.1.2. TF卡 1.1.3. SDIO接口 1.2. 所用硬件及原理图 2. 创建工程 2.1. 选择主控 2.2. 系统配置 ...

  9. USB2.0挂载FatFs文件系统

    一.前期准备 1.协议栈 USB协议栈 FatFs文件系统协议栈 2.物理芯片 W25Q64的8M大小的flash芯片 二.描述 文件系统fatfs.USB协议栈.物理层flash存储芯片关系. 1. ...

最新文章

  1. GCD 容易让人迷惑的几个小问题
  2. Python初识面向对象
  3. mysql分隔字符串转变为多行_【mysql】将以固定分隔符分隔的字符串转成多行的形式...
  4. 去了大公司就一定能学到很牛的技术么?
  5. 前端学习(1324):anysc关键字
  6. (组合数学笔记)Pólya计数理论_Part.3_置换群及其性质
  7. idea2020代码el组件红色波浪线_Android实现炫酷的ViewPager3D组件
  8. Android中的Builder模式
  9. 如何安装最新版质性分析软件NVIVO?
  10. 身份证阅读器在国产操作系统Linux内核中的二次开发
  11. 10个Excel最经典的小技巧,关键时能救急!
  12. 红红火火的丹麦造陆运动,和它恍恍惚惚的“硅谷梦”
  13. UnityEditor代码分享导出材质贴图和Mesh本体
  14. LDR6020 双USB-Type-C适配器方案 适用于苹果手机(仅需一颗芯片 完成PD快充)
  15. (复现)CVE-2021-21985 Vmware vcenter远程代码执行RCE
  16. 前端埋点和后端埋点能分开使用吗?【数据埋点介绍】
  17. ECC-椭圆曲线密码
  18. English Interview Question
  19. 《数据可视化与数据挖掘——基于Tableau和SPSS Modeler图形界面》之可视化数据挖掘概述
  20. WF 系列--WF基础

热门文章

  1. Java类之File记录
  2. 类与类之间关系,用C#和JavaScript体现
  3. 个人阅读 代码大全的阅读与提问
  4. CSS实现的阴影效果
  5. WinAPI: GetUserName - 获取当前用户名
  6. LeetCode Algorithm 704. 二分查找
  7. EduCoder 机器学习 逻辑回归
  8. 110. Balanced Binary Tree 平衡二叉树
  9. 410. Split Array Largest Sum 分割数组的最大值
  10. python网络编程——IO多路复用之epoll