查看: 5966|回复: 10

[原创] 【渣渣玩KL25】四、咸鱼我也要移植FATFS文件系统

[复制链接]
  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7879
    最后登录
    2025-4-11
    发表于 2016-9-1 17:42:43 | 显示全部楼层 |阅读模式
    本帖最后由 混森蓝兽 于 2016-9-10 10:55 编辑

         FATFS是一个完全免费开源的FAT 文件系统模块,专门为小型的嵌入式系统而设计。完全用标准C 语言编写,所以具有良好的硬件平台独立性。只需做简单的修改可以移植到单片机上。它拥有许多优点:
         ●Windows兼容的FAT文件系统(支持FAT12/FAT16/FAT32)
         ●与平台无关,移植简单。全C语言编写。
         ●代码量少、效率高。
         ●多种配置选项
         ●支持多卷(物理驱动器或分区,最多10个卷)
         ●多个ANSI/OEM代码页包括DBCS
         ●支持长文件名、ANSI/OEM或Unicode
         ●支持RTOS
         ●支持多种扇区大小
         ●只读、最小化的API和I/O缓冲区等
         就我来说 ,就两个优点就够了,一是小硬件系统平台上能用:二是移植很很很简单!

         移植步骤  

              过多的东西我就不介绍了,网上都能找到资料 ,我就简单单的讲讲移植步骤:

    1、先从官网获取FATFS文件系统包,网址百度就能找到。两个文件夹,一个是说明文档,另一个是源码。

    fatfs.jpg

    2、看看src文件夹里的文件,知道都有什么功能,移植时主要就是修改两个文件:ffconf.h和diskio.c

         FATFS模块的所有配置项都是存放在ffconf.h里面,我们可以通过配置里面的一些选项,来满足自己的需求。
         diskio.c是硬件层,负责与底层硬件接口适配。

    fatfs2.jpg

    3、ffconf.h 配置文件修改

    _FS_TINY。这个选项在R0.07版本中开始出现,之前的版本都是以独立的C文件出现(FATFS和Tiny FATFS),有了这个选项之后,两者整合在一起了,使用起来更方便。我们使用FATFS,所以把这个选项定义为0即可。

    _FS_READONLY。这个用来配置是不是只读,我们需要读写都用,所以这里设置为0即可。

    _USE_STRFUNC。这个用来设置是否支持字符串类操作,比如f_putc,f_puts等,我们需要用到,故设置这里为1。

    _USE_MKFS。这个用来定时是否使能格式化,需要用到,所以设置这里为1。

    _USE_FASTSEEK。这个用来使能快速定位,我们设置 为1,使能快速定位。

    _USE_LABEL。这个用来设置是否支持磁盘盘符(磁盘名字)读取与设置。我们设置为1,使能,就可以通过相关函数来读取和设置磁盘的名字了。



    _CODE_PAGE。这个用于设置语言类型,包括很多选项(见FATFS官网说明),我们这里设置为936,即简体中文(GBK码,需要c936.c文件支持,该文件在option文件夹)。

    _USE_LFN。该选项用于设置是否支持长文件名(还需要_CODE_PAGE支持),取值范围为0~3。0,表示不支持长文件名,1~3是支持长文件名,但是存储地方不一样,我们选择使用3,通过ff_memalloc函数来动态分配长文件名的存储区域。

    _VOLUMES。用于设置FATFS支持的逻辑设备数目,我们设置为3的话,即支持3个设备(磁盘)。

    _MAX_SS。扇区缓冲的最大值,一般设置为512。

    4、diskio.c,底层驱动编写(与硬件相关,如SD卡初始化、通信,或者其他存储器的初始化和IO操作)

    底层接口,包括存储媒介读/写接口(disk I/O)和供给文件创建修改时间的实时时钟,需要我们根据平台和存储介质编写移植代码。打开diskio.c,进行底层驱动编写,一般需要编写6 个接口函数(函数介绍及详细修改见附录文档)。

    fatfs3.jpg

         程序分析  

    1.文件diskio.c里的disk_initialize函数,即初始化磁盘,我这程序对应就是初始化SD卡,调用SD_Initialize()即可

    init.jpg

    2.文件diskio.c里的disk_read函数,即读磁盘扇区数据这程序对应就是读SD卡,调用SD_ReadDisk(buff, sector, count)即可

    read.jpg

    3.文件diskio.c里的ddisk_write函数,即写数据入磁盘扇区,这程序对应就是写SD卡,调用SD_WriteDisk(buff2, sector, count)即可

    write.jpg

    4,其他存储器以此类推。。。。。。。

         附件


    FATFS文件系统基础知识讲解.zip (5.49 MB, 下载次数: 25)
    来根华子
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-10 15:47
  • 签到天数: 1251 天

    连续签到: 1 天

    [LV.10]以坛为家III

    6

    主题

    2396

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    7534
    最后登录
    2025-5-23
    发表于 2016-9-1 21:42:55 | 显示全部楼层
    顶一个,不错
    nxp.png
    nxp2.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2016-9-1 21:49:38 | 显示全部楼层
    楼主厉害!
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-6-18 08:45
  • 签到天数: 812 天

    连续签到: 1 天

    [LV.10]以坛为家III

    66

    主题

    4899

    帖子

    64

    金牌会员

    Rank: 6Rank: 6

    积分
    6321
    最后登录
    2025-7-15
    发表于 2016-9-1 22:01:50 | 显示全部楼层
    建议你把内部flash挂载上去
    开心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7879
    最后登录
    2025-4-11
     楼主| 发表于 2016-9-1 22:31:15 | 显示全部楼层
    原来的你 发表于 2016-9-1 22:01
    建议你把内部flash挂载上去

    可以的,打算过一阵子弄,不过内部Flash1不是很大,一般也不会存什么文件,最多一些参数
    来根华子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7879
    最后登录
    2025-4-11
     楼主| 发表于 2016-9-1 22:31:58 | 显示全部楼层

    新手摸索中,渣渣一枚而已
    来根华子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-4-19 12:05
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    9

    主题

    78

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    387
    最后登录
    2025-6-19
    发表于 2016-9-1 22:51:52 | 显示全部楼层
    好东西,刚刚学过这个,自己也做了总结,感觉还是你做的总结比较6
    今天好开心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2016-9-1 23:08:56 | 显示全部楼层
    混森蓝兽 发表于 2016-9-1 22:31
    新手摸索中,渣渣一枚而已

    跟楼主学学。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-9-2 08:04:04 | 显示全部楼层
    我已经吧SPI和DSPI的文件系统都发出来了,需要一个SPI接口即可
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7879
    最后登录
    2025-4-11
     楼主| 发表于 2016-9-2 09:10:03 | 显示全部楼层
    技术范儿 发表于 2016-9-2 08:04
    我已经吧SPI和DSPI的文件系统都发出来了,需要一个SPI接口即可

    66666,我去围观
    来根华子
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 16:09 , Processed in 0.105920 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表