博客
关于我
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/

    你可能感兴趣的文章
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
    查看>>
    NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
    查看>>
    NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
    查看>>
    NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>