1592|7

266

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【雅特力AT-START-F437评测】5. FatFS文件系统移植(源码) [复制链接]

 

       FatFs是一个通用的FAT/exFAT文件系统模块,用于小型嵌入式系统。它完全是由 ANSI C 语言编写并且完全独立于底层的 I/O 介质。因此它是独立于平台的,可以集成到资源有限的小型微控制器中,如8051、PIC、AVR、ARM、Z80、RX等。FatFs 支持 FAT12、FAT16、FAT32、exFAT 等格式,所以我们利用前面写好的 SD卡驱动,把 FatFs 文件系统代码移植到工程。

2.如何下载FatFs文件系统
FatFs 文件系统的源码可以从 fatfs 官网下载:
http://elm-chan.org/fsw/ff/00index_e.html

 

在移植之前,我们需要对FatFs文件系统有一个大致认识。这样我们才知道哪些是可以直接移植,哪些是需要我们自己来实现的。下面显示的依赖关系图是带有FatFs模块的嵌入式系统的典型配置。绿色部分(Low Level Disk I/O Layer)FatFs文件系统不关心具体的实现,所以需要我们自己来实现它。

下面展示了单驱动系统多驱动系统,我们在实现了SD卡驱动之后,还需要实现一个实时时钟(RTC),它会在创建或者修改文件时会用到。如果需要同时支持U盘、SD卡、Nand Flash等,需要分别实现对应的驱动,然后挂载在不同的节点,这样FatFs就可以同时管理多个设备。

 

1. 把文件添加到工程中:

2. 修改disk.c 中的接口函数:

1. 修改写函数: 

这是非常关键的一步,很多人都卡死在这里了,网上的说法很多也是一带而过甚至 是错误的,这里一定要擦除扇区。

2. 读函数:

3. ioctl函数:

然后就是 ffconfig.h 文件中少量修改即可。

 

测试结果:文件系统格式化+挂载OK

 

代码经过整理上传到了gitee仓库,有需要的小伙伴可以自行下载哦~~

链接已隐藏,如需查看请登录或者注册

 

 

最新回复

代码经过整理上传到了gitee仓库,有需要的小伙伴可以自行下载哦~~ 能开源分享,实属不易!   详情 回复 发表于 2023-7-4 09:01
点赞 关注
个人签名

gitee/casy

 
 

回复
举报

266

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

应用测试函数给大家参考:

  • void ExtFlash_Storage_Init(void)
  • {
  • FRESULT fret; /* FatFs return code */
  • FRESULT res ;
  • FIL fnew; /* 文件对象 */
  • BSP_spiflash_init();
  • MOUNT:
  • /* 挂载fatfs */
  • res = f_mount(&fs,"0:",1);
  • if(res == FR_OK)
  • {
  • printf("FatFS disk drive 0 mounted on SPIFlash OK!\r\n");
  • // if(new_spiflash_chip)
  • // {
  • // //创建一个文件
  • // FRESULT res = f_open(&fnew, "0:log.txt",FA_CREATE_ALWAYS );
  • // if ( res == FR_OK )
  • // {
  • // printf("log.txt file created OK!!\r\n");
  • // /* 不再读写,关闭文件 */
  • // //f_close(&fnew); // do not close here
  • // }
  • // }
  • return;
  • }
  • else
  • {
  • printf("FatFS mounted on SPIFlash Fail! ErrCode = %d\r\n",res);
  • }
  • /*不需要每次启动都创建文件系统,否则历史存储的文件会被格式化*/
  • if(res == FR_NO_FILESYSTEM)
  • {
  • printf("This is a new flash chip!!!\r\n");
  • new_spiflash_chip = true;
  • spiflash_bulk_erase(); // erase whole chip
  • fret = f_mkfs("0:", 0, work, sizeof(work)); // 自动调用磁盘初始化
  • if(fret == FR_OK)
  • {
  • printf("FatFS created on SPIFlash OK!\r\n");
  • goto MOUNT;
  • }
  • else
  • {
  • printf("FatFS created on SPIFlash Fail!,ErrCode = %d\r\n",fret);
  • }
  • }
  • }

 

 

个人签名

gitee/casy

 
 
 

回复

7713

帖子

18

TA的资源

五彩晶圆(高级)

板凳
 

谢谢分享,用平台已经移植好的呀。

点评

看过了历程里面没有合适的,Start板还是需要自己移植的呢  详情 回复 发表于 2023-6-25 13:59
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

266

帖子

0

TA的资源

一粒金砂(高级)

4
 
freebsder 发表于 2023-6-24 22:40 谢谢分享,用平台已经移植好的呀。

看过了历程里面没有合适的,Start板还是需要自己移植的呢

点评

我估计可以直接用cubemx搞    详情 回复 发表于 2023-6-26 10:35
个人签名

gitee/casy

 
 
 

回复

7713

帖子

18

TA的资源

五彩晶圆(高级)

5
 
caizhiwei 发表于 2023-6-25 13:59 看过了历程里面没有合适的,Start板还是需要自己移植的呢

我估计可以直接用cubemx搞  

点评

应该还是要修改一些底层细节。 具体有手册SXX32F107移植到AT32F407.pdf  详情 回复 发表于 2023-6-26 15:01
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

6124

帖子

4

TA的资源

版主

6
 
本帖最后由 damiaa 于 2023-6-26 15:55 编辑
freebsder 发表于 2023-6-26 10:35 我估计可以直接用cubemx搞  

 应该还要修改一些底层细节。

具体有手册SXX32F107移植到AT32F407.pdf

 
 
 

回复

6124

帖子

4

TA的资源

版主

7
 

据说这个可以用arduino整了,当然用rt-thread studio好整  用platformio可以整。

 
 
 

回复

7145

帖子

11

TA的资源

版主

8
 

代码经过整理上传到了gitee仓库,有需要的小伙伴可以自行下载哦~~

能开源分享,实属不易!

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表