首页 > 其他分享 >STM32 - W25Q16移植fatfs文件系统

STM32 - W25Q16移植fatfs文件系统

时间:2024-04-17 22:35:28浏览次数:32  
标签:文件 函数 W25Q16 文件系统 存储介质 STM32 物理地址 FatFs fatfs

1. Windows上的文件系统

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

image-20240417215007426

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

​ Windows操作系统为了便于用户对磁盘的管理。加入了磁盘分区的概念,即将一块磁盘逻辑划分为几块,它会把磁盘的分区信息记录到硬盘分区表中。在硬盘分区表中,描述了各个逻辑分区的属性,如分区开始和结束位置所在的物理地址(柱面号、扇区号),空间大小等信息。

2. 文件系统的结构与特性

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

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

image-20240417220345054

3.C语言中的文件操作

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

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

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

​ fputc 写一个字符到文件中去
​ fgets 从文件中读取一个字符串
​ fputs 写一个字符串到文件中去
​ fprintf 往文件中写格式化数据
​ fscanf 格式化读取文件中数据
​ fread 以二进制形式读取文件中的数据
​ fwrite 以二进制形式写数据到文件中去
​ getw 以二进制形式读取一个整数
​ putw 以二进制形式存贮一个整数
​ 文件状态检查函数 feof 文件结束
​ ferror 文件读/写出错
​ clearerr 清除文件错误标志
​ ftell 了解文件指针的当前位置

文件定位函数 rewind 反绕
fseek 随机定位

4.FATFS文件系统简介

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

5.FatFs的目录结构

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

image-20240417220804291

  • FatFs帮助文档

​ 其中 en 和 ja 这两个文件夹里面是编译好的html文档,讲的是FATFS里面各个函数的使用方法。 00index_e.html和00index_j.html是一些关于FATFS的简介。

image-20240417220854792

  • FATFS源码
    • integer.h:文件中包含了一些数值类型定义。
    • diskio.c:包含底层存储介质的操作函数,这些函数需要用户自己实现,主要添加底层驱动函数。
    • ff.c: FatFs核心文件,文件管理的实现方法。该文件独立于底层介质操作文件的函数,利用这些函数实现文件的读写。
    • cc936.c:本文件在option目录下,是简体中文支持所需要添加的文件,包含了简体中文的GBK和Unicode相互转换功能函数。
    • ffconf.h:这个头文件包含了对FatFs功能配置的宏定义,通过修改这些宏定义就可以裁剪FatFs的功能。如需要支持简体中文,需要把ffconf.h中的_CODE_PAGE 的宏改成936并把上面的cc936.c文件加入到工程之中。

6.FatFs在程序中的关系网络

image-20240417221257420

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

7. FatFs移植需要用户支持函数

image-20240417221406447


继续前行...

标签:文件,函数,W25Q16,文件系统,存储介质,STM32,物理地址,FatFs,fatfs
From: https://www.cnblogs.com/lyk-23/p/18141927

相关文章

  • STM32:HAL多通道ADC数据采集
    1、配置ADC,设置5个通道采集2、使能DMA设置为循环模式 生成工程后编写函数1、校准ADC,开启DMA接收,在main函数初始化部分调用#defineADC_MAX_NUM5#defineBTN_BUFF_LEN100staticuint16_tdma_adc_data[BTN_BUFF_LEN*ADC_MAX_NUM];1/**2*@brief校准adc,开......
  • STM32F10系列开发板的GPIO介绍
    1.GPIO介绍GPIO是控制或者采集外部器件的信息的外设,即负责输入输出。它按组分配,每组16个IO口,组数视芯片而定。STM32F103ZET6芯片是144脚的芯片,具有GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF和GPIOG七组GPIO口,共有112个IO口可供我们编程使用2.GPIO八种功能模......
  • fatfs文件系统读取剩余空间实例解析
    一前记 文件系统读取剩余内存空间并显示是一个常用的功能。这个函数是:FRESULTf_getfree(constTCHAR*path,DWORD*nclst,FATFS**fatfs);/*Getnumberoffreeclustersonthedrive*/第一个入参是文件路径,第二个参数剩余空间的指针,第三个参数是文件名。二实例......
  • stm32采集烟雾和温湿度+ESP8266转发解析+python构造http
      https://www.cnblogs.com/gooutlook/p/16061136.html  http://192.168.1.103/Control_SensorPin?sensor=sensor_all&action=GetDatapython#-*-coding:utf-8-*-importrequestsimporturllib.parse#pipinstallrequestsdefSendHttp():#ht......
  • STM32-模数转化器
    ADC(Analog-to-DigitalConverter)指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。ADC相关参数说明:分辨率:分辨率以二进制(或十进制)数的位数来表示,一般有8位、10位、12位、16位等,它说明模数转换器对输入信号的分辨能力,位数越多,表......
  • 基于STM32的智能家居系统设计与实现:手机APP与语音控制家电
    基于STM32的智能家居系统设计与实现:手机APP与语音控制家电一、研究背景与意义随着科技的进步和人们生活水平的提高,智能家居系统逐渐成为现代家庭的新宠。智能家居系统通过集成各种智能设备和传感器,为用户提供更加便捷、舒适和安全的家居环境。本研究旨在设计一个基于STM32微......
  • STM32 HAL库F103系列之OLED显示一个字符
    原理图:OLED对应IO口OLED_CS对应OV_WRST,即:PD6;OLED_RS对应OV_SCL,即:PD3,高电平为命令,低电平为数据;OLED_WR对应OV_RRST,即:PG14;OLED_RD对应DCMI_SDA,即:PG13;OLED_RST对应DCMI_RESET,即:PG15;OLED_D[7:0]对应DCMI_D[7:0],即:PC[7:0]配置步骤:1,确定IO连接关系        开发......
  • 蓝桥杯STM32G431RBT6-各个外设的配置过程
    LED,按键配置LED点亮,按键采集按键值前期准备:通过Cubemx生成一个源文件方便后续直接使用。  源文件准备完毕以后开始进行按键和LED的配置LED对比芯片引脚连接图可以知道8个LED分别连接在GPIOC的如下8个引脚中      Cubemx中......
  • 基于STM32的户外环境监测系统(三)
     光照强度模块   在基于STM32的户外环境监测系统中集成光照强度模块时,需要考虑以下注意事项:选择合适的光照传感器:选择适合户外环境监测的光照传感器,如光敏电阻(LDR)、光敏电容、光电二极管(PD)、光电晶体管等。根据项目需求考虑测量范围、响应频率、精度等因素进行选择。......
  • STM32F4 CubeMax 主从定时器同步 设定脉冲输出控制步进电机
    实验准备开发板:STM32F411E-DISCO或其它开发板(FirmwarePackage根据开发板下载)软件:KeiluVision5、STM32CubeMX(FirmwarePackage:STM32CubeFW_F4V1.23.0)实验原理利用CubeMX根据芯片手册配置定时器同步来实现自定义脉冲数PWM输出对电机进行控制。主定时器产生PWM波,从定时......