OpenEdv-开源电子网

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

原子的SD卡驱动,卡死在while (DMA_GetCmdStatus(DMA2_Stream3) != DISABLE){}

[复制链接]

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
发表于 2016-4-6 17:35:46 | 显示全部楼层 |阅读模式
1金钱
为了测下下原子SD卡驱动的稳定性,对探索者开发板对测试程序不断复位运行,复位运行,然后就卡在了stm32f4xx_dma.c下的

跳出程序就是在sdio_sdcard.c下的

不太明白原因为啥,版主求解
232.png
231.png

最佳答案

查看完整内容[请看2#楼]

写个测试程序给SD里面写东西。就会出现。现在换查询方式了。虽然比DMA慢了一秒钟50K左右
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
 楼主| 发表于 2016-4-6 17:35:47 | 显示全部楼层
正点原子 发表于 2016-4-9 22:42
回头我有时间试试,不应该的

写个测试程序给SD里面写东西。就会出现。现在换查询方式了。虽然比DMA慢了一秒钟50K左右
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-4-6 21:08:13 | 显示全部楼层
我一般用轮询方式使用SDIO,DMA方式不用.  你这个出现概率多大?
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
 楼主| 发表于 2016-4-7 09:12:23 | 显示全部楼层
正点原子 发表于 2016-4-6 21:08
我一般用轮询方式使用SDIO,DMA方式不用.  你这个出现概率多大?

大概复位五六次。就会出现。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-4-9 22:42:06 | 显示全部楼层
dop101 发表于 2016-4-7 09:12
大概复位五六次。就会出现。

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

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2015-4-14
在线时间
62 小时
发表于 2016-5-9 09:29:41 | 显示全部楼层
最近,我也是遇到与楼主一样的问题,对测试程序不断复位运行时,有时就卡死在while (DMA_GetCmdStatus(DMA2_Stream3) != DISABLE){},楼主解决了吗?
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
 楼主| 发表于 2016-5-10 09:27:01 | 显示全部楼层
ldh45 发表于 2016-5-9 09:29
最近,我也是遇到与楼主一样的问题,对测试程序不断复位运行时,有时就卡死在while (DMA_GetCmdStatus(DMA2 ...

用查询方式解决了。虽然速度慢了一点点不影响的
回复

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2015-4-14
在线时间
62 小时
发表于 2016-5-10 12:21:28 | 显示全部楼层
dop101 发表于 2016-5-10 09:27
用查询方式解决了。虽然速度慢了一点点不影响的

我用查询方式的话,速度达不到要求,存的数据会丢,所以只能用DMA模式才行!!
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
 楼主| 发表于 2016-5-10 15:52:38 | 显示全部楼层
ldh45 发表于 2016-5-10 12:21
我用查询方式的话,速度达不到要求,存的数据会丢,所以只能用DMA模式才行!!

你DMA写速度多少?我用查询速度260K/S,我的写的数据还比较少,就几十兆。没发现丢数现象
回复

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2015-4-14
在线时间
62 小时
发表于 2016-5-16 10:29:16 | 显示全部楼层
dop101 发表于 2016-5-10 15:52
你DMA写速度多少?我用查询速度260K/S,我的写的数据还比较少,就几十兆。没发现丢数现象

DMA速度我不知道,你用查询速度可以达到这么大?
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
 楼主| 发表于 2016-5-16 15:46:58 | 显示全部楼层
ldh45 发表于 2016-5-16 10:29
DMA速度我不知道,你用查询速度可以达到这么大?

是的啊。我测试过的。DMA可以达到300多K/S
回复

使用道具 举报

50

主题

124

帖子

0

精华

高级会员

Rank: 4

积分
528
金钱
528
注册时间
2013-6-27
在线时间
79 小时
发表于 2016-5-16 17:17:36 | 显示全部楼层
请问不停复位运行程序的目的是什么?
是在仿真中复位运行还是使用复位按键复位呢?
谢谢
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
 楼主| 发表于 2016-5-16 17:25:58 | 显示全部楼层
szn1423 发表于 2016-5-16 17:17
请问不停复位运行程序的目的是什么?
是在仿真中复位运行还是使用复位按键复位呢?
谢谢

目的是为了测试程序的稳定性,比如出现卡死。就是看驱动有问题没。如果你把程序烧到片子里面。出现了断电。恢复上电后可能出现的情况。不断的复位运行就是模拟这个情况。
是在仿真中实现的。不用按板子上的复位键
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
 楼主| 发表于 2016-5-18 16:46:52 | 显示全部楼层
正点原子 发表于 2016-4-9 22:42
回头我有时间试试,不应该的

原子哥,这个你测了没有。急求啊。一定要回答下啊。谢谢
回复

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2015-4-14
在线时间
62 小时
发表于 2016-5-20 11:35:36 | 显示全部楼层
测试时,发现如果程序复位时,挂载sd卡,一旦发生了一次读sd卡错误(错误返回值:7,即< Start bit not detected on all data signals in widE bus mode),就算再次读SD卡正确后出来了,程序也会卡死在while (DMA_GetCmdStatus(DMA2_Stream3) != DISABLE){}。如果读sd卡不出错过,程序就不会卡死在这里。实在不知道为什么??

回复

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2015-4-14
在线时间
62 小时
发表于 2016-5-20 15:02:58 | 显示全部楼层
我把while (DMA_GetCmdStatus(DMA2_Stream3) != DISABLE){},直接删去了,换成:
DMA_ClearFlag(DMA2_Stream3, DMA_FLAG_FEIF3 | DMA_FLAG_DMEIF3 | DMA_FLAG_TEIF3 | DMA_FLAG_HTIF3 | DMA_FLAG_TCIF3);
DMA_Cmd(DMA2_Stream3, DISABLE);

不知道~这样改会有什么隐患问题吗?
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2016-5-20 15:15:16 | 显示全部楼层
ldh45 发表于 2016-5-10 12:21
我用查询方式的话,速度达不到要求,存的数据会丢,所以只能用DMA模式才行!!

那就在while里面加个超时等待嘛。
自己选择的路,成家前走完。
回复

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2015-4-14
在线时间
62 小时
发表于 2016-5-26 14:37:43 | 显示全部楼层
aiyeba 发表于 2016-5-20 15:15
那就在while里面加个超时等待嘛。

在while循环里加超时等待后,清除DMA2_Stream3标志位,并关闭DMA2_Stream3,退出。我这样试过了,可是新创建一次文件时,会把原来里面的文件破坏,并隐藏了!
回复

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2015-4-14
在线时间
62 小时
发表于 2016-8-5 11:15:46 | 显示全部楼层
根据官网的sdio驱动例程,自己做了以下的修改:
//         while (DMA_GetCmdStatus(DMA2_Stream3) != DISABLE){}  //等待DMA可配置 ,屏蔽这句后换成加后面两句:
DMA_ClearFlag(DMA2_Stream3, DMA_FLAG_FEIF3 | DMA_FLAG_DMEIF3 | DMA_FLAG_TEIF3 | DMA_FLAG_HTIF3 | DMA_FLAG_TCIF3);
DMA_Cmd(DMA2_Stream3, DISABLE);
发现不出现卡死的问题了,运行也正常!但不知道这么改是否存在问题?请教各位大神
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
 楼主| 发表于 2016-8-5 12:34:40 | 显示全部楼层
ldh45 发表于 2016-8-5 11:15
根据官网的sdio驱动例程,自己做了以下的修改:
//         while (DMA_GetCmdStatus(DMA2_Stream3) != DISABLE){ ...

这句不屏蔽,你试试。按照你改的
回复

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2015-4-14
在线时间
62 小时
发表于 2016-9-20 10:39:39 | 显示全部楼层
dop101 发表于 2016-8-5 12:34
这句不屏蔽,你试试。按照你改的

你说的不屏蔽while(),我没试过。不过,我按上面的修改后使用正常了,还没什么问题!
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2017-11-27 14:16:12 | 显示全部楼层
正点原子 发表于 2016-4-9 22:42
回头我有时间试试,不应该的

原子大哥,你测试了吗,我也遇到这样的问题
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2017-11-29 19:48:55 | 显示全部楼层
正点原子 发表于 2016-4-9 22:42
回头我有时间试试,不应该的

我的ADC也用DMA,同样也是卡在那里,后来ADC也改成DMA中断方式就正确了,然后我又添加RTC时,又出问题了,同样卡在这里,这是怎么回事呢
回复

使用道具 举报

8

主题

25

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-1-30
在线时间
24 小时
发表于 2019-3-26 09:26:34 | 显示全部楼层
想请问一下,这个贴最终解决了吗。最近我也遇到了
回复

使用道具 举报

2

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2018-7-10
在线时间
12 小时
发表于 2019-7-17 16:45:15 | 显示全部楼层
dop101 发表于 2016-5-10 09:27
用查询方式解决了。虽然速度慢了一点点不影响的

查询方式有个致命的问题是读写过程中不能被中断,想问问这位大师是这么解决这个问题的
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2018-9-3
在线时间
1 小时
发表于 2020-2-1 19:54:44 | 显示全部楼层
这个问题最后怎么解决的?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 03:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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