博客
关于我
STM32笔记之 Fatfs(文件系统移植)
阅读量:779 次
发布时间:2019-03-24

本文共 2370 字,大约阅读时间需要 7 分钟。

#FatFs文件系统移植与应用手册

一、FatFs简介

FatFs是一款专为小型嵌入式系统设计的通用 FAT / exFAT 文件系统模块。其核心特点在于:

  • ANSI C(C89)编写:支持无依赖平台配置,仅需符合C89或更高版本编译器即可运行
  • 整数类型大小定义:char 8位,int 16/32位,可根据系统选择
  • 磁盘I/O层分离:独立于具体平台,适合资源受限的微控制器
  • 开源架构:由ChaN个人开发,涵盖 FAT 和 exFAT 文件系统支持
  • 官方地址:[FatFs官方网站](https://www.osc.get lekker.ch/alp/fatfs/)


    二、移植说明

    FatFs模块具备高度可移植性,主要条件如下:

  • 编译器支持

    • 使用ANSI C(C89)编译器无需平台依赖性
    • 若启用exFAT功能,需C99支持
  • 整数大小定义

    • char 必须是8位(1 bytes)
    • int 建议为16位或32位
    • shortlong 字段尺寸根据系统定义
  • 平台兼容性

    • FatFs与平台无关,需开发磁盘I/O模块接口

  • 三、文件移植操作

  • 获取FatFs文件系统包

    • 使用最新版本R0.14
    • 包含必要文件:ff.hffsystem.cffconf.h
  • 文件说明

    • diskio.c:与平台磁盘I/O模块接口层
    • diskio.h:公共接口定义
    • ff.c:核心文件系统模块
    • ffunicode.c:支持的字体编码转换
  • 工程集成

    • 将文件直接并入项目
    • 修改ffconf.h配置参数
    • 最后编译查看效果

  • 四、功能接口补充

  • 磁盘模块接口

    • 需提供接口函数,如RAM_disk_readMMC_disk_write
    • 通常以下图示接口:
    +---------------------------+|              |<----------|          ||     disk_read     |<----------|    file ||   disk_write   |          |    io   |+---------------------------+
  • 典型存储介质

    • SD卡:设备编号DEV_MMC
    • USB存储:设备编号DEV_USB
    • 内存/硬盘:设备编号DEV_RAM
  • 接口实现示例

    • 对应SD卡实现:
    uint8_t SD_disk_status(void);   // 获取SD卡状态uint8_t SD_disk_initialize(void); // 初始化SD卡uint8_t SD_disk_read(uint8_t *Buff, uint32_t Sector, uint32_t Count); // 读取扇区数据uint8_t SD_disk_write(uint8_t *Buff, uint32_t Sector, uint32_t Count); // 写入扇区数据

  • 五、FatFs系统裁剪配置

  • 配置文件ffconf.h

    • 核心配置选项包括:
      • 功能选项:如文件系统类型(FAT/exFAT)、Pcontracts
      • 命名空间:字符编码、文件名长度
      • 存储卷:现有驱动器支持的格式,,如1:代表SD卡
      • 系统选项:内存分配、文件锁控制
  • 常用配置选项

    • FF_CODE_PAGE:默认值为437,指定开发平台货币编码
    • FF_USE_LFN:启用长文件名支持
    • FF_MAX_LFN:文件名缓冲区长度,建议设置为255
    • FF_LFN_UNICODE:支持UNICODE编码
    • FF_MIN_SS & FF_MAX_SS:定义扇区大小范围,默认值为512

  • 六、实际应用示例

    // 预定义示例#define DRIVER_DISK      "1:"#define FF_Buff     "Fatfs文件系统读写测试实验\r\n"// 函数实现uint8_t FF_System_Creates(char *pDrive);  uint8_t FF_OpenWrite(char *pFile, void *pStr, uint16_t Len);  uint8_t FF_OpenRead(char *pFile, void *pStr, uint16_t Len);  void FF_ViewRootDir(char *pDrive);  // 核心操作int main(void){    // 挂载文件系统    f_mount(&FatFs, DRIVER_DISK, 1);        // 创建文件并写入    FF_OpenWrite("1:file.txt", FF_Buff, FF_len);        // 读取文件内容    FF_OpenRead("1:file.txt", (void *)FF_Buff, FF_len);         // 操作完成后,卸载文件系统    f_mount(NULL, DRIVER_DISK, 1);        return 0;}

    七、开发注意事项

  • SD卡格式化问题

    • 注意SD卡初始化时的数据长度问题,须确保正确获取设备总容量
    • 建议使用正确的工具或API获取最大容量
  • exFAT支持问题

    • 启用exFAT功能需额外配置ffconf.h
    • 内存分配为exFAT模式
  • 编译与调试

    • 各个函数结果须通过状态码判断:FR_OK(成功)、FR_DENIED(拒绝)
    • 常见错误:文件操作权限不足、文件名格式不正确
  • 安全性

    • 关注文件操作的非法访问、缓冲区溢出等潜在问题
    • 建议为关键文件添加加密保护

  • 通过以上步骤,开发者可以根据自身需求对FatFs文件系统进行定制和应用。更多详细文档和示例可参考FatFs官方资源。

    转载地址:http://ugtkk.baihongyu.com/

    你可能感兴趣的文章
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_使用NIFI表达式语言_来获取自定义属性中的数据_NIFI表达式使用体验---大数据之Nifi工作笔记0024
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群2_实际操作搭建NIFI内嵌模式集群---大数据之Nifi工作笔记0016
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_02---大数据之Nifi工作笔记0034
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>