47_FatFs文件系统基础知识

目录

文件系统简介

Windows上的文件系统

磁盘的物理结构

磁盘分区表

文件系统的结构与特性

FatFs文件系统简介

FatFs的目录结构

FATAFS源码

FatFs在程序中的关系网络

FatFs移植需要用户支持函数


文件系统简介

使用SPI FLASH直接存储数据,当需要记录字符“STM32 SPI FLASH”时。可以把这些文字转化成ASCIl码,存储在数组中,然后调用SPI_FLASH_BufferWrite函数,把数组内容写入到SPI Flash芯片的指定地址上,在需要的时候从该地址把数据读取出来,再对读出来的数据以ASCI码的格式进行解读。

 存在的问题1.难以记录有效数据的位置2.难以确定存储介质的剩余空间3.不明确应以何种格式来解读数据

Windows上的文件系统

文件系统,就是对数据进行管理的方式。使用文件系统可有效的管理存储介质

文件系统在计算机的表现形式:

 

磁盘的物理结构

 

本质上电脑上的硬盘和我们的Flash和SD卡是没有区别的都是存储一些0101存储介质,但是加了文件系统后,可以选择各种各样的存储数据的方式。

使用文件系统时,它为了存储和管理数据,在存储介质建立了一些组织结构,这些结构包括操作系统引导区、目录和文件。常见的windows下的文件系统格式包括FAT32、 NTFS、exFAT。在使用文件系统前,要先对存储介质进行格式化。格式化时会在存储介质上新建一个文件分配表和目录。这样,文件系统就可以记录数据存放的物理地址,剩余空间。

磁盘分区表

Windows操作系统为了便于用户对磁盘的管理。加入了磁盘分区的概念,即将一块磁盘逻辑划分为几块,它会把磁盘的分区信息记录到硬盘分区表中。

在硬盘分区表中,描述了各个逻辑分区的属性,如分区开始和结束位置所在的物理地址(柱面号、扇区号),空间大小等信息。

 

文件系统的结构与特性

使用文件系统时,数据都以文件的形式存储。写入新文件时,先在日录中创建一个文件索引,它指示了文件存放的物理地址,再把数据存储到该地址中。当需要读取数据时,可以从目录中找到该文件的索引,进而在相应的地址中读取出数据。具体还涉及到逻辑地址、簇大小、不连续存储等一系列辅助结构或处理过程。

文件系统的存在使存取数据时,不再是简单地向某物理地址直接读写,而是要遵循它的读写格式。如经过逻辑转换,一个完整的文件可能被分开成多段存储到不连续的物理地址,使用目录或链表的方式来获知下一段的位置。

 

C语言中的文件操作是依赖于平台的

文件的打开操作fopen打开一个文件

文件的关闭操作fclose关闭一个文件

文件的读写操作fgetc从文件中读取一个字符

fputc写一个字符到文件中去

fgets从文件中读取一个字符串

fputs写一个字符串到文件中去

fprintf往文件中写格式化数据

fscanf 格式化读取文件中数据

fread以二进制形式读取文件中的数据

fwrite以二进制形式写数据到文件中去

getw以二进制形式读取一个整数

putw以二进制形式存贮一个整数

文件状态检查函数feof文件结束

ferror文件读/写出错

clearerr 清除文件错误标志

ftell了解文件指针的当前位置

文件定位函数rewind反绕

fseek随机定位

FatFs文件系统简介

FatFs是面向小型嵌入式系统的一种通用的FAT文件系统。它完全是由AISI C语言编写并且完全独立于底层的I/O介质。因此它可以很容易地不加修改地移植到其他的处理器当中,如8051、PIC、AVR、SH、Z80、H8、ARM等。FatFs支持FAT12、 FAT16、FAT32等格式。利用前面写好的SPI Flash芯片驱动,把FatFs文件系统代码移植到工程之中,就可以利用文件系统的各种函数,对SPI Flash芯片以“文件”格式进行读写操作了。

FatFs文件系统的源码可以从fatfs官网下载:http://elm-chan.org/fsw/ff/00index_e.html

 

FatFs的目录结构

下载FatFs源码包解压后,在doc文件夹里面是一些使用帮助文档;在src是FatFs文件系统的源代码。

 

 FATAFS源码

 

 

integer.h:文件中包含了一些数值类型定义。

diskio.c:包含底层存储介质的操作函数,这些函数需要用户自己实现,主要添加底层驱动函数。

ff.c: FatFs核心文件,文件管理的实现方法。该文件独立于底层介质操作文件的函数,利用这些函数实现文件的读写。

cc936.c:本文件在option目录下,是简体中文支持所需要添加的文件,包含了简体中文的GBK和Unicode相互转换功能函数。

ffconf.h:这个头文件包含了对FatFs功能配置的宏定义,通过修改这些宏定义就可以裁剪FatFs的功能。如需要支持简体中文,需要把ffconf.h中的CODE_PAGE 的宏改成936并把上面的Cc936.c文件加入到工程之中。

 FatFs在程序中的关系网络

 用户应用程序需要由用户编写,想实现什么功能就编写什么的程序,一般我们只用到f_mount()、 f_open()、f_write()、 f_read()就可以实现文件的读写操作。这些应用层函数使用方法与标准C的文件操作函数类似。FatFs组件是FatFs的主体,文件都在源码src文件夹中,其中ff.c、 ff.h、integer.h以及diskio.h四个文件我们不需要改动,只需要修改ffconf.h和diskio.c两个文件。底层设备输入输出要求实现存储设备的读写操作函数、存储设备信息获取函数等等。

FatFs移植需要用户支持函数

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值