野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7287|回复: 6

关于Fatfs文件系统移植出现的问题

[复制链接]
发表于 2021-10-14 18:42:09 | 显示全部楼层 |阅读模式
使用野火提供的例程代码进行编改,文件挂载部分成功,可以进行读写操作,问题在于:打开文件,写入数据,关闭文件,再次打开,读取到的内容为空,如果使用FA_OPEN_EXISTING,则提示找不到文件,但是如果在不关闭文件的情况下,即写完数据马上读取文件内容,可以读取到写入的数据

已经尝试过f_sync函数刷新缓冲区,并不能解决问题,使用获取flash大小的函数,发现flash在创建文件后,可用容量减少

目前没有头绪来解决这个文件找不到的问题,希望能得到帮助
下面是部分代码
  1. //擦除FLASH
  2.           SPI_FLASH_BulkErase();
  3.                 //挂载文件系统
  4.                 printf("\n挂载文件系统\n");
  5.                 res = f_mount(&fsObject,"1:",1);
  6.                 while(res ==FR_NOT_READY)
  7.                 {
  8.                         res = f_mount(&fsObject,"1:",1);
  9.           }
  10.                 if(res == FR_NO_FILESYSTEM)
  11.                 {
  12.                         f_mkfs("1:",0,0);
  13.                 }
  14.                 res = f_mount(&fsObject,"1:",1);
  15.                 if(res==FR_OK)
  16.                 {
  17.                         printf("\n挂载成功\n");
  18.                         printf("\n进行文件读写测试\n");
  19.                 }
  20.                 while (DEF_TRUE)
  21.     {
  22.                         memset(newName,0,sizeof(newName));
  23.                         memset(fileName,0,sizeof(fileName));
  24.                         memset(wData,0,sizeof(wData));
  25.                         strcat(newName,"1:");
  26.                         printf("\n请输入要创建的文件名\n");
  27.                         scanf("%s\n",fileName);
  28.                         printf("\n%s\n",fileName);
  29.                         strcat(newName,fileName);
  30.                         printf("\n请输入文件内容\n");
  31.                         while((ch=getchar())!='\n')
  32.                         {
  33.                                 wData[i] = ch;
  34.                                 i++;
  35.                         }
  36.                         printf("\n%s\n",wData);
  37.                         res= f_open(&fp,newName,FA_CREATE_ALWAYS|FA_OPEN_EXISTING|FA_READ|FA_WRITE);
  38.                         if(res == FR_OK)
  39.                         {
  40.                                 printf("\n创建文件%s\n",fileName);
  41.                                 res = f_write(&fp,wData+1,sizeof(wData),&bw);
  42.                                 if(res==FR_OK)
  43.                                 {
  44.                                         printf("\n写入数据成功,写入数据为: %s \n",wData+1);
  45.                                 }
  46.                                 f_sync(&fp);
  47.                                 f_lseek(&fp,0);
  48. //                                printf("\n读取文件%s\n",fileName);
  49.                                 res = f_read(&fp,rData,f_size(&fp),&br);
  50. //                                if(res == FR_OK)
  51. //                                {
  52. //                                        printf("\n读取成功,文件内容为:%s\n",rData);
  53. //                                }
  54.                           res = f_close(&fp);
  55.                         }
  56.                         printf("\n读取文件%s\n",fileName);
  57.                         res= f_open(&fp,newName,FA_OPEN_ALWAYS|FA_READ|FA_WRITE);
  58.                         if(res == FR_OK)
  59.                         {
  60.                                 res = f_read(&fp,rData,f_size(&fp),&br);
  61.                                 if(res == FR_OK)
  62.                                 {
  63.                                          printf("读取内容为 =%s\n",rData);
  64.                                 }
  65.                                 f_close(&fp);
  66.                         }
复制代码


回复

使用道具 举报

发表于 2021-10-15 09:50:37 | 显示全部楼层
我也遇到过,有点难分析
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-20 13:55:24 | 显示全部楼层
LF_laffy 发表于 2021-10-15 09:50
我也遇到过,有点难分析

我现在一点头绪都没有,应该怎么去查找问题呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-4 13:43:11 | 显示全部楼层
个人问题出现的原因:fatfs对硬件flash的大小有要求
截取片段如下:

Cluster size: Upto 128 sectors on FAT volume and upto 16 MB on exFAT volume.
Sector size: 512, 1024, 2048 and 4096 bytes.

由于当时使用的flash太小,即使烧录成功,也不能很好的实现文件系统的功能,后更改为SD卡,解决了这个问题
细节可参考说明文档:https://dev.ti.com/tirex/explore ... ts/doc/appnote.html
回复 支持 反对

使用道具 举报

发表于 2022-9-4 11:14:47 | 显示全部楼层
就是FLASH的空间太小的原因吗?
回复 支持 反对

使用道具 举报

发表于 2022-9-28 10:24:44 | 显示全部楼层
我也遇到了这个问题,通过排查,发现是从百度网盘下的资料里的FATFS文件系统有问题,我从野火大课堂上重新下载了资料,将旧的FATFS文件夹替换后就解决了
回复 支持 反对

使用道具 举报

发表于 2022-10-16 10:24:00 | 显示全部楼层
我的发现是打开文件,写文件,关闭文件,再打开,读取文件就可以显示刚才写的数据,而把写的操作屏蔽后,直接读取文件数据,则读取不到,不知道什么情况
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 15:12 , Processed in 0.079609 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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