zoukankan      html  css  js  c++  java
  • stm32 fatfs 文件系统分析和代码解析

    一 文件系统:

    文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
    操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。
    从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,
    控制文件的存取,当用户不再使用时撤销文件等。


    二 fatfs逻辑

    FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。 FatFs模块是依据ANSI C(C89)标准编写的,并且与磁盘I / O层完全分开。 因此,它的运行独立于平台。
    可以将其合并到资源有限的小型微控制器中,例如8051,PIC,AVR,ARM,Z80,RX等。
    fatfs写的特别简洁,非常适合入门者学习和熟悉文件系统。借着stm32的开发机会,笔者对fatfs做了一个大致的梳理。
    stm32中的fatfs文件系统分层一般分成两层,一层是底层的逻辑,这部分主要是通过配置内存卡的寄存器来实现数据的读写。另外一层是应用逻辑,这部分负责把函数封装成可以调用的文件。
    让用户能清晰的操作文件。


    三 文件系统的底层逻辑


    DSTATUS SD_disk_initialize(BYTE drv)
    这个主要是初始化的内存设备,很多存储卡的设备都是标准的,不过,也不排除有些设备的兼容性问题是否可以。这个初始化的时候,一定要对准手册,看一下内存卡命令接口信息。

    从sd卡中读取信息:

    DRESULT SD_disk_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count)

    往sd卡中写信息,

    DRESULT SD_disk_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count)

    对齐和复位存储设备

    DRESULT SD_disk_ioctl(BYTE drv, BYTE ctrl, void *buff)


    四 文件系统的应用逻辑

    文件系统的应用逻辑非常简单,就是让用户可以自由简单的操作文件。
    这部分应用函数主要有以下部分构成:
    文件系统的遍历,通过该遍历,可以知道设备下有多少文件以及文件名
    FRESULT mf_scan_files(const TCHAR* path)

    挂载文件,就是把一个文件挂带到驱动中

    FRESULT f_mount (
    FATFS* fs, /* Pointer to the file system object (NULL:unmount)*/
    const TCHAR* path, /* Logical drive number to be mounted/unmounted */
    BYTE opt /* Mode option 0:Do not mount (delayed mount), 1:Mount immediately */
    )

    创建或者打开文件

    /*-----------------------------------------------------------------------*/
    /* Open or Create a File */
    /*-----------------------------------------------------------------------*/

    FRESULT f_open (
    FIL* fp, /* Pointer to the blank file object */
    const TCHAR* path, /* Pointer to the file name */
    BYTE mode /* Access mode and file open mode flags */
    )

    读取文件

    FRESULT f_read (
    FIL* fp, /* Pointer to the file object */
    void* buff, /* Pointer to data buffer */
    UINT btr, /* Number of bytes to read */
    UINT* br /* Pointer to number of bytes read */
    )

    写文件

    FRESULT f_write (
    FIL* fp, /* Pointer to the file object */
    const void* buff, /* Pointer to the data to be written */
    UINT btw, /* Number of bytes to write */
    UINT* bw /* Pointer to number of bytes written */
    )

    同步文件

    FRESULT f_sync (
    FIL* fp /* Pointer to the file object */
    )

    关闭文件

    FRESULT f_close (
    FIL* fp /* Pointer to the file object to be closed */
    )

    这里还有目录级别的操作,比如,打开文件目录,遍历文件目录,这就不一一赘述了。

    五 后记

    文件系统在计算机中是一个重要的部分,是一个计算机系统中的地图,它可以让存储的信息分成一个个小单元,达到使用者容易辨识的境地。

    作者:虚生
    出处:https://www.cnblogs.com/dylancao/
    以音频算法为核心的物联网解决方案提供商 ,提供以音频算法为核心智能硬件产品设计,开发和咨询服务。
    勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188
  • 相关阅读:
    全新 D 系列虚拟机型号
    D 系列性能预期
    Azure Backup 入门
    对 Azure Backup 的常见配置问题进行故障排除
    宣布发布长期保留 Azure Backup功能
    宣布 Azure Backup 支持备份 Windows Server 2008
    Azure Backup 简介
    MongoDB中ObjectId的误区,以及引起的一系列问题
    UNIX/Linux_C_程序员需要掌握的七种武器
    Docker企业版安装指南
  • 原文地址:https://www.cnblogs.com/dylancao/p/15328427.html
Copyright © 2011-2022 走看看