OpenEdv-开源电子网

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

STM32F103使用FATFS文件系统读写SD卡稳定性不好的问题

[复制链接]

2

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-5
在线时间
10 小时
发表于 2017-7-22 10:22:15 | 显示全部楼层 |阅读模式
10金钱
现在我用STM32F103VCT6,利用FATFS文件系统读写SD卡,因为是做测试,所以每隔1秒向SD卡写一次数据(实际使用时,肯定不会这么频繁),数据是可以写成功的,但是就这样,不停的写数据,偶尔会出现读数据超时的情况。程序会卡在读数据超时程序那里,因为屏蔽了中断,所以程序不能做任何事,只能等到判断超时结束,才能继续执行其他程序,这个等待时间长达几秒,导致我的看门狗复位。写数据没发现问题,没出现过数据超时,但是会卡在读数据那里,而且这个读数据是在打开需要写的那个文件时,卡死的。想要写数据,首先要打开文件,我试了很多次,都是在打开文件的时候,偶尔会读数据超时。请问各位前辈,碰到过这样的情况吗?怎样解决SD卡读写数据不会超时呢?是中断问题还是SD时钟问题?我现在减小SD卡时钟频率,正在测试,等会再来说测试结果

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-5
在线时间
10 小时
 楼主| 发表于 2017-7-22 10:25:17 | 显示全部楼层
现在我用的SD卡是CLASS 4型卡
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-5
在线时间
10 小时
 楼主| 发表于 2017-7-22 11:12:41 | 显示全部楼层
SD卡时钟频率在12-9MHz范围,并没有明显提升,暂时看不出来,但是不在这个范围内,错误几率会提高。SD卡中断,我已经开了最高优先级0 0.想不到什么问题了,而且好像我打开的TXT文件越大,出错的几率就越大。因为我是不断写数据的,所以TXT文件肯定越来越大,保存完一天的数据后,重新新建一个文件。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2017-7-22 23:30:59 | 显示全部楼层
你写了多久?数据量多大?
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-5
在线时间
10 小时
 楼主| 发表于 2017-7-24 09:30:36 | 显示全部楼层
本帖最后由 三三三 于 2017-7-24 09:32 编辑
正点原子 发表于 2017-7-22 23:30
你写了多久?数据量多大?

每秒写100字节,流程是:打开文件-获得文件大小-偏移指针到TXT文本最后位置,写100个字节,关闭文件。如果第一步打开文件失败,则创建文件。如此循环。这样做有问题吗?我现在在检查硬件电路
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-5
在线时间
10 小时
 楼主| 发表于 2017-7-24 11:08:21 | 显示全部楼层
正点原子 发表于 2017-7-22 23:30
你写了多久?数据量多大?

仿真了一下,发现数据超时是在 偏移指针操作那里,f_lseek函数有问题
回复

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2016-1-27
在线时间
64 小时
发表于 2017-7-24 13:44:45 | 显示全部楼层
兄弟,找到原因了吗?
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-5
在线时间
10 小时
 楼主| 发表于 2017-7-24 14:00:05 | 显示全部楼层
seabird624 发表于 2017-7-24 13:44
兄弟,找到原因了吗?

没有,还在弄
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-5
在线时间
10 小时
 楼主| 发表于 2017-7-24 17:20:09 | 显示全部楼层
找不出来问题,想不通为什么TXT文本指针偏移函数有问题,f_lseek函数很容易出现超时情况。现在我的方法是上电打开一次文件,然后一直写,不关闭文件。这样写没出现问题。
回复

使用道具 举报

58

主题

359

帖子

0

精华

高级会员

Rank: 4

积分
987
金钱
987
注册时间
2014-9-29
在线时间
261 小时
发表于 2017-7-24 17:33:11 | 显示全部楼层
文件大了f_lseek不断的找簇   花时间自然越来越多
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-5
在线时间
10 小时
 楼主| 发表于 2017-7-25 09:21:24 | 显示全部楼层
闪电之舞 发表于 2017-7-24 17:33
文件大了f_lseek不断的找簇   花时间自然越来越多

那增大扇区大小,还是增大簇?簇默认是32K。我也发现,TXT文件越大,超时的几率就越高,300K以上,出现超时的几率很大。但是,为啥有的时候会超时,有的时候不会超时呢?f_lseek函数在使用时,偶尔会出现在读数据函数里面,出现超时,会有几秒的等待。这是不正确的啊,找簇也不需要这么长的时间啊
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-5
在线时间
10 小时
 楼主| 发表于 2017-7-25 11:23:59 | 显示全部楼层
正点原子 发表于 2017-7-22 23:30
你写了多久?数据量多大?

初始化一下SD卡,再操作就没有问题了,这是什么原因?上电初始化后,对SD卡的操作,把原来的配置改了?还是什么缓存文件太大?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2017-7-26 01:15:53 | 显示全部楼层
三三三 发表于 2017-7-25 11:23
初始化一下SD卡,再操作就没有问题了,这是什么原因?上电初始化后,对SD卡的操作,把原来的配置改了?还 ...

不知道你代码怎么搞的。
我们开发板测试没什么问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2017-7-28
在线时间
0 小时
发表于 2017-7-28 13:50:39 | 显示全部楼层
现在也遇到类似问题,nand flash模拟U盘,连续写十几分钟以后拔插USB就显示格式化,单次写没问题
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2017-7-28
在线时间
0 小时
发表于 2017-7-28 13:51:42 | 显示全部楼层
开始我也以为是lseek函数,关掉重复写覆盖前面的数据过了十几分钟再插USB还是出问题
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2017-7-28
在线时间
0 小时
发表于 2017-7-28 14:58:30 | 显示全部楼层
是因为我USB和FAT没有做互斥访问导致的吗?
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-6-21
在线时间
6 小时
发表于 2017-8-3 08:33:31 | 显示全部楼层
最近我也在搞这个可以发份源码参考下吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 06:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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