OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5138|回复: 14

FATFS写入数据全是0

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-9
在线时间
3 小时
发表于 2018-7-9 12:11:11 | 显示全部楼层 |阅读模式
2金钱
用的是STM32F405+R0.09的FATFS。加入给你一张刚格式化的干净的卡,就做简单的读写测试,是没问题的。连续的短时间写入也没问题的。
但是,我程序是用定时器连续的将惯性数据以每隔5分钟的频率就新建一个文件存储数据,当存储的文件数大于几十个的时候(每个文件821KB),比如90个,后面的写入不会提示错误,文件也创建了,文件大小也有了。但是数据全部都是0.也就是说文件名称是有的,PC上也显示文件的大小,但是读取的数据全部都是0
PS:大家可以把焦点更多放在TF卡的文件系统各种限制上,因为一般写入几十个文件都不会出问题的。有没有遇到过同样的问题,万分感激啊






初始化:
        fs = &fatfs;

        res=f_mount(0, fs);

递增创建文件的代码:
  do
    {
        sprintf(file_name,"imu/IMU_%d.1bsn",file_num);
        if(flag_format==1)
        break;
        res = f_open( &fsrc,(char*)file_name, FA_CREATE_NEW | FA_WRITE);
                printf("扫描中....%s,创造返回代码:%d\r\n",file_name,res);
          if(res==FR_EXIST)
          file_num++;
    }while(res!=FR_OK);
                printf("创造完毕,刚才创造的文件名为:%s..\r\n",file_name);

写入的代码:
  res = f_write(&fsrc,TF_Packet,sizeof(TF_Packet), &br);


在PC机这边的显示

在PC机这边的显示
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-9
在线时间
3 小时
 楼主| 发表于 2018-7-9 12:23:42 | 显示全部楼层
          LED_Count++;
                                          if(LED_Count>50)
                                          {
                                                 LEDR_TOG;
                                                 
                                                   f_sync(&fsrc);//每隔不到1秒钟就存盘一次数据
                                                   // f_close(&fsrc);
                                                LED_Count=0;
                                          }

我每隔几十毫秒,就调用了一次f_sync(&fsrc);
因此不是这个函数没调用的问题,是写入了不是0的数据, 但是读取的是时候就是一大片的0
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-9
在线时间
3 小时
 楼主| 发表于 2018-7-9 13:39:15 | 显示全部楼层
原子大哥,会不会跟我格式化卡的时候的选项有关,我是用电脑WIN7的,FAT(默认) [img][/img]
333.png
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-9
在线时间
3 小时
 楼主| 发表于 2018-7-9 20:16:27 | 显示全部楼层
继续,顶起,欢迎交流!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2018-7-10 01:36:23 | 显示全部楼层
你决定文本阅读就可以打开所有文件内容么? 你试试拖一个pdf进去,看看效果。  然后,你搞懂什么是ASCII,什么是汉字内码?  然后你看看你的写入数组,里面都是些什么内容?
回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2017-10-4
在线时间
13 小时
发表于 2018-7-10 09:35:56 | 显示全部楼层
顶一个
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6653
金钱
6653
注册时间
2015-8-25
在线时间
1034 小时
发表于 2018-7-10 14:08:55 | 显示全部楼层
打开文件不要用 FA_CREATE_NEW这个创建新文件好不,每次都重新创建一个新文件覆盖旧文件能不是全0吗
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6653
金钱
6653
注册时间
2015-8-25
在线时间
1034 小时
发表于 2018-7-10 14:09:38 | 显示全部楼层
打开文件不要用 FA_CREATE_NEW这个创建新文件好不,每次都重新创建一个新文件覆盖旧文件能不是全0吗
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-9
在线时间
3 小时
 楼主| 发表于 2018-7-11 10:08:23 | 显示全部楼层
正点原子 发表于 2018-7-10 01:36
你决定文本阅读就可以打开所有文件内容么? 你试试拖一个pdf进去,看看效果。  然后,你搞懂什么是ASCII, ...

首先谢谢原子哥的回复,如果是这些简单的问题,我是可以排除的。发几个图片验证下 QQ截图20180711100242.jpg QQ截图20180711100337.jpg QQ截图20180711100416.jpg QQ截图20180711100803.jpg
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-9
在线时间
3 小时
 楼主| 发表于 2018-7-11 10:16:37 | 显示全部楼层
szczyb1314 发表于 2018-7-10 14:09
打开文件不要用 FA_CREATE_NEW这个创建新文件好不,每次都重新创建一个新文件覆盖旧文件能不是全0吗

谢谢回复,这个是没毛病的,因为用FA_CREATE_NEW创建文件,其实不单是创建文件,还判断当前编号的即将创建的文件是否存在,如果存在了说明这编号命名的文件就不能创建了,再往后递增一个数,创建新的编号的文件。至于写入,是不会出现你说的这种问题的,当前写入的是当前编号的文件,下次新的编号对应的文件创建了,就会写入下次的创建的文件。参考给原子哥的截图。
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-9
在线时间
3 小时
 楼主| 发表于 2018-7-11 10:17:10 | 显示全部楼层
szczyb1314 发表于 2018-7-10 14:09
打开文件不要用 FA_CREATE_NEW这个创建新文件好不,每次都重新创建一个新文件覆盖旧文件能不是全0吗

QQ截图20180711101224.jpg
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-9
在线时间
3 小时
 楼主| 发表于 2018-7-11 10:20:26 | 显示全部楼层
正点原子 发表于 2018-7-10 01:36
你决定文本阅读就可以打开所有文件内容么? 你试试拖一个pdf进去,看看效果。  然后,你搞懂什么是ASCII, ...

QQ截图20180711102002.jpg
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2018-7-12 01:40:14 | 显示全部楼层

每个fatfs函数的调用,都要判断返回值!!
否则代码就不好找问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2018-7-12 01:40:31 | 显示全部楼层

这软件的协议我也不知道
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2016-1-22
在线时间
21 小时
发表于 2019-11-2 15:04:04 | 显示全部楼层
我也遇到了类似的问题,我这边最后发现是DMA读写SD卡没有清Cache导致的
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 21:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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