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

    你可能感兴趣的文章
    nginx配置全解
    查看>>
    Nginx配置参数中文说明
    查看>>
    Nginx配置后台网关映射路径
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置多个不同端口服务共用80端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-动静分离实例:搭建静态资源服务器
    查看>>
    Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    nginx配置详解、端口重定向和504
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    Nginx配置限流,技能拉满!
    查看>>
    Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
    查看>>
    Nginx:NginxConfig可视化配置工具安装
    查看>>
    ngModelController
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    ngrok内网穿透可以实现资源共享吗?快解析更加简洁
    查看>>
    NHibernate学习[1]
    查看>>