说说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. DB2存储过程——条件判断语句if then
  2. centos下保留python2安装python3
  3. 解决UIScrollView把uitableviewcell的点击事件屏蔽
  4. Android-View点击事件短时间重复点击的过滤
  5. 页面中切换echarts主题
  6. Python学习之==第三方模块的安装、模块导入
  7. linux终端自动输入,linux shell自动输入实现
  8. 为什么用c语言程序中的if语句实现从1加到100最后的结果是负数,用C语言程式计算从1加到100的程式是怎样的?...
  9. 《智能数据时代:企业大数据战略与实战》一2.3 自我评估、完善度、信息架构...
  10. vmplayer下管理网络
  11. div圆角,阴影效果。
  12. JConsole详解
  13. Kmeans 聚类算法
  14. GOBY--一款攻击面测绘工具的使用
  15. Linux RabbitMQ - CLI tool fails to authenticate with the server
  16. 大恒相机图像采集 linux+python
  17. DMM数据管理能力成熟度模型简介
  18. 消费者和生产者问题,管程法和信号灯法
  19. Edge浏览器怎么降级到旧版本?
  20. 陈老师排课软件12A(正式版)

热门文章

  1. Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装
  2. Python之面向对象四
  3. 十、Hadoop学习笔记————Hive与Hbase以及RDBMS(关系型数据库)的关系
  4. 爱迪生欺骗了世界! ----马云给雅虎员工演讲
  5. 转载:js跨域问题小结
  6. 【数据结构与算法】之深入解析“平衡二叉树”的求解思路与算法示例
  7. Metal之实现视频采集与实时渲染
  8. 841. Keys and Rooms 钥匙和房间
  9. 学计算机,怎么入门?
  10. 11.2.3 事件