stm32专题十九:FatFs文件系统简介

发布者:CrystalSparkle最新更新时间:2021-10-25 来源: eefocus关键字:stm32  FatFs  文件系统 手机看文章 扫描二维码
随时随地手机看文章

在上一篇博客中,是使用SPI-FLASH存储整数、小数和字符串等,通过调用SPI_FLASH_BufferWrite函数,把数组内容写入到SPI Flash芯片的指定地址上,在需要的时候从该地址把数据读取出来,再对读出来的数据以ASCII码的格式进行解读。


但是,这样直接存储数据会带来极大的不便,如难以记录有效数据的位置,难以确定存储介质的剩余空间,以及应以何种格式来解读数据。就如同一个巨大的图书馆无人管理,杂乱无章地存放着各种书籍,难以查找所需的文档。对于SPI Flash芯片或者SD卡之类的大容量设备,我们需要一种高效的方式来管理它的存储内容。


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


目录和文件分配表:

之前提到,把文件系统格式化后,会把目录存放在磁盘的开头。由上图所示,文件目录中有3条信息,记录了3个文件。每条目录信息又有很多细节,记录了文件的地址、大小、日期时间、权限等。看上去,似乎有目录就足够记录文件信息了,但还不够,继续往下看。

可以看到,文件目录是记录了文件存储在哪个扇区,而文件分配表记录了这个扇区存储了哪些内容,以及这个内容的下一个部分的位置。那么现在就可以知道,读取文件的流程如下(以读取B.txt为例):


1 从文件目录中找到B.TXT开始的扇区(12);


2 当读取完第12个扇区后,从文件分配表中知道,接下来要读取12扇区的内容,依次...,当读完65扇区后,发现下一个指向FF,此时文件B.TXT全部读取完成;


接下来看删除文件对文件分配表的影响:

由于新创建的D文件比较大,所以会占据原C文件的全部存储空间,然后在C文件的结尾还会占据一部分空间。那么此时,单凭文件目录已经无法知道D文件的具体存储细节了,因为D文件此时不是连续存储,来看此时文件目录的变化:

文件分配表在此时就能发挥作用,如下图所示:

最后一个问题,以什么形式来解读文件。在windows操作系统中,就是以后缀名来区分。如.txt以记事本打开(解读),.mp3以音乐播放器打开(解读)。

关键字:stm32  FatFs  文件系统 引用地址:stm32专题十九:FatFs文件系统简介

上一篇:stm32专题十八:stm32读写SPI FLASH
下一篇:stm32专题十九:FatFs文件系统整体架构

推荐阅读最新更新时间:2024-11-07 10:48

STM32 assert_param
在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。 所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误,而不必等到程序运行结果的错误而大费周折。 这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。 它确实在程序的运行上牺牲了效率(但只
[单片机]
利用MSP430在SD卡上实现FAT32文件系统
首先,我们先说明一下本文的主要内容,本文的主要侧重点在于利用msp430(其它单片机应该类似)驱动SD卡。驱动方式选用SPI方式,驱动成功之后,将FAT32文件系统移植过来。所以如果想要仔细学习FAT32文件系统的,可以忽略本文了,想要快速地利用单片机在SD卡上实现FAT32文件系统的,可以看一下。大家可以交流一下。 一、开发之前的准备 1、准备WinHex工具 工欲善其事,必先利其器。在开发之前,我们必须要先准备好需要的工具,除了相应的单片机开发平台,我们还需要一个很重要的工具,WinHex。WinHex可以直接查看磁盘内部的16进制数据。我们把SD卡用卡槽接到电脑上之后,打开WinHex,点击Tools--Open
[单片机]
利用MSP430在SD卡上实现FAT32<font color='red'>文件系统</font>
基于STM32 MCU的太阳能--LED街灯解决方案
随着化石类能源的日益减少,以及温室气体的过度排放导致全球变暖问题越来越受到重视,人们一方面在积极开发各类可再生新能源,另一方面也在倡导节能减排的绿色环保技术。太阳能作为取之不尽、用之不竭的清洁能源,成为众多可再生能源的重要代表;而在照明领域,寿命长、节能、安全、绿色环保、色彩丰富、微型化的LED固态照明也已被公认为世界一种节能环保的重要途径。太阳能-LED街灯同时整合了这两者的优势,利用清洁能源以及高效率的LED实现绿色照明。 本文介绍的太阳能-LED街灯方案,能自动检测环境光以控制路灯的工作状态,最大功率点追踪(MPPT)保证最大太阳能电池板效率,恒电流控制LED,并带有蓄电池状态输出以及用户可设定LED工作时间等功能。 系
[单片机]
基于<font color='red'>STM32</font> MCU的太阳能--LED街灯解决方案
STM32的串口函数_库函数
个人记录: 昨天做串口实验的时候一直没有成功的原因,连续调用USART_SendData总是会出现前一个被后一个覆盖的情况。 之前觉得ST的官方库应该没有问题就没往这方面想,现在查查,确实有库的问题,还是自己对库不太理解。 还有遇到的硬件复位以后,发送第一个字符丢失的情况。 1、后字节覆盖前字节 -----------------加判断while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET){} 2、硬件复位之后第一个字符丢失 -----------------USART_ClearFlag(USART2,USART_FLAG_TC); ----
[单片机]
<font color='red'>STM32</font>的串口函数_库函数
stm32 DA 数模转换
stm32并不是所有的型号都有DAC功能,只有stm32f103xC/D/E系列 才有DAC转换功能。由于库函数手册中没有相关说明,所以只能通过在MDK提供的相关库文件 stm32f10x_dac.c 中找到相应的DAC函数,做了一番尝试。 折腾了一天,实现了DAC的转换和三角波的输出。我使用的是 stm32rct6的芯片,有两个DAC通道,在PA4和PA5两个引脚上。 DAC的库函数配置相关参数说明: void DAC_Configuration(void) { DAC_InitTypeDef DAC_InitStructure; DAC_InitStructure.DAC_Trigger = DAC_Tr
[单片机]
<font color='red'>stm32</font> DA 数模转换
STM32 (5) 自己写库 构建库函数雏形1 寄存器结构体定义
前面把基础部分讲得差不多,比如说什么是寄存器,寄存器映射,怎么样来寄存器编程,寄存器编程的时候应该参考官方的什么手册, 前面讲了什么是寄存器 怎么使用寄存器编程 寄存器编程的时候应该 参考哪些手册 接下来我们开始利用固件库编程,今天开始从 最底层开始写库函数 《在零死角玩转STM32》 第九章 l利用我们上节课的历程 下面这些是7个GPIO口的寄存器映射我们到GPIO口的寄存器映射,这些是最底层的东西,我们基本上已经学会了,那么接下来我们 进入固件库编程在真正进入固件库编程之前,我们应该了解固件库与寄存器的联系,参考《零死角玩转STM32F103-霸道》第九章 自己写库构建库函数雏形针对霸道 和指南者 上图是我们
[单片机]
<font color='red'>STM32</font> (5) 自己写库 构建库函数雏形1 寄存器结构体定义
用Eclipse开发stm32(GNU ARM Eclipse Plug-in)(编码+编译+下载+调试)
传统的IDE功能强大,特别是调试功能,但是如今,其它软件的发展,大家感觉到传统的IDE用户交互、编辑界面、编码效率不够友好;或者为了降低成本,需要使用开源工具 于是,有人选择使用IDE用来调试,用其它编辑器编码(比如source insight 、sublime text3、notepad++、atom、Eclipse等),来提高效率;或者使用其它的工具链来配合编辑器达到自制一个IDE的效果 当然还有一些改进得比较好的免费IDE和收费的IDE,比如coocox 这里是在Eclipse上编写 ARM 程序 在Eclipse上编写程序方法: 使用GCC、G++、makefile的方式进行手动编码,一切靠自己 使用Eclipse+插件
[单片机]
用Eclipse开发<font color='red'>stm32</font>(GNU ARM Eclipse Plug-in)(编码+编译+下载+调试)
stm32若干技巧
技巧1:关于串口接收 对于串口数据帧到检测,对于串口接收有判定帧头、尾 FIFO缓存等方式,推荐采用超时判断来确定一帧数据接收完成,尤其对于处理GPS,3G模块数据效,比判断帧头、尾效果好的多。参考网友模式 //检测超时函数 供定时器中断调用-1ms一次 // t为超时时间 __inline void Chk_TimeOut(u8 t) { if(!uartRMsg.rcOK && (uartRMsg.rcIndex =8) && (++uartRMsg.rcS =t) ) //超时之后,开始重新解码 uartRMsg.rcOK = true; } //接收函数, 供USART中断调用 __inline void Recie
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved