硬汉嵌入式论坛

 找回密码
 立即注册
查看: 10758|回复: 17
收起左侧

[有问必答] fatfs写SD卡卡死

[复制链接]

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2013-5-24 23:42:29 | 显示全部楼层 |阅读模式
你好armfly版主:
       最近在学习fatfs操作sd卡,做了一个储存串口数据的小模块,是在你的例程(Ex013-SDIO+FatFS文件系统例程)上修改的。大概0.1秒存储100个数据,发现过个几分钟程序就会卡死。原以为我修改带来的问题,试了你的源程序,通过串口隔100mS发送一次命令2,自动创建文本保存数据,过几分钟也会出现同样的卡死问题。程序卡死在static SD_Error FindSCR(uint16_t rca, uint32_t *pscr)函数里面, 未命名.JPG
程序在获取不到状态一直死循环,希望版主能够帮忙看看是什么问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2013-5-25 12:50:34 | 显示全部楼层
你的多大的卡,容量小于1G的卡,很难用,搞个1G,2G,4G, 8G的试试,我一直用的这个程序,

还有就是你的SD不能这么使用,0.1秒一次,1分钟就是600次啊,这个不是RAM,搞不了多长时间就废了
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2013-5-25 12:54:55 | 显示全部楼层
我用的4g的卡,读写频率有什么要求吗?我下位机上传数据的频率就是这样,就直接存了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2013-5-25 13:09:31 | 显示全部楼层

回 lizhiguang 的帖子

lizhiguang:我用的4g的卡,读写频率有什么要求吗?我下位机上传数据的频率就是这样,就直接存了。 (2013-05-25 12:54) 
SD擦写次数就那么多次,你网上查询了解下。
你可以用RAM做个缓冲,比如到20K数据了再写
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2013-5-25 13:51:13 | 显示全部楼层
恩 谢谢了 ,我主要是写。
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2013-5-27 19:48:34 | 显示全部楼层

回 eric2013 的帖子

eric2013:SD擦写次数就那么多次,你网上查询了解下。
你可以用RAM做个缓冲,比如到20K数据了再写 (2013-05-25 13:09) 
我这个问题还是存在,自己做的板子和安富莱的开发板都有,网上貌似遇到我这种问题的好多,但都没有有效的解决问题的方法。发现安富莱的程序sd时钟是18M降到14M后卡死的几率小了很多。加个看门狗应该凑合可以用了。
回复

使用道具 举报

4

主题

65

回帖

77

积分

初级会员

积分
77
发表于 2013-6-24 15:09:40 | 显示全部楼层
SD卡驱动加上硬件流控制试试[s:140]
回复

使用道具 举报

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-9-9 16:44:04 | 显示全部楼层
我也遇到同样的问题,LZ有好的解决方案吗?
回复

使用道具 举报

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-9-22 15:09:57 | 显示全部楼层
“发现安富莱的程序sd时钟是18M降到14M后卡死的几率小了很多。”

LZ能说一下安富莱的程序sd时钟是在哪里设定啊?谢谢了!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2013-9-22 15:19:25 | 显示全部楼层
perseus2013:
“发现安富莱的程序sd时钟是18M降到14M后卡死的几率小了很多。”

LZ能说一下安富莱的程序sd时钟是在哪里设定啊?谢谢了!


给你贴两个截图
1.png

2.png
回复

使用道具 举报

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-9-22 16:25:44 | 显示全部楼层
谢谢LZ指点!我现在的  SDIO_TRANSFER_CLK_DIV 已经是0x02,那您修改后的参数是多少?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2013-9-22 16:35:20 | 显示全部楼层
perseus2013:
谢谢LZ指点!我现在的  SDIO_TRANSFER_CLK_DIV 已经是0x02,那您修改后的参数是多少?
你看看你的HCLK是多少
2.png

然后计算SDCLK是多少
1.png
回复

使用道具 举报

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-9-22 17:32:59 | 显示全部楼层
我现在把SD时钟降到5MHz(SDIO_TRANSFER_CLK_DIV=0x12,主频是70MHz)后,连续写SD不死机了!谢谢楼主指点!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2013-9-22 17:37:03 | 显示全部楼层

回 perseus2013 的帖子

perseus2013:我现在把SD时钟降到5MHz(SDIO_TRANSFER_CLK_DIV=0x12,主频是70MHz)后,连续写SD不死机了!谢谢楼主指点! (2013-09-22 17:32) 
你的主频怎么是70M,应该是72吧
回复

使用道具 举报

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-9-23 08:21:08 | 显示全部楼层
写错了,是72MHz,LZ正确[s:151]
回复

使用道具 举报

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-9-29 17:19:03 | 显示全部楼层
fatfs写SD卡卡死的结症好像找到了。我使用HCSD卡以18MHz的SD时钟速度连续向SD卡循环写64字节x100x100组数据,共计640000字节,已经试验了50次没有发生一次错误。对于过去是不可想象的。
改进措施是:
在连续循环写SD卡过程中,每次不要使用 f_close(&file) 来频繁关闭文件,而是使用 f_sync(&file) 同步文件函数,数据写入完毕后再使用 f_close(&file) 和f_mount(0, NULL) 关闭文件。如果是较老的低速卡可适当降低SD卡的时钟速度。新手拙见。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2013-9-29 17:53:30 | 显示全部楼层

回 perseus2013 的帖子

perseus2013:fatfs写SD卡卡死的结症好像找到了。我使用HCSD卡以18MHz的SD时钟速度连续向SD卡循环写64字节x100x100组数据,共计640000字节,已经试验了50次没有发生一次错误。对于过去是不可想象的。
改进措施是:
在连续循环写SD卡过程中,每次不要使用 f_close(&file) 来频繁关闭文件,而 .. (2013-09-29 17:19) 
这个方法不错,后面了我也试试
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 13:08 , Processed in 0.248622 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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