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

    你可能感兴趣的文章
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>