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

2019-07-20 22:21发布

为了测下下原子SD卡驱动的稳定性,对探索者开发板对测试程序不断复位运行,复位运行,然后就卡在了stm32f4xx_dma.c下的

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

不太明白原因为啥,版主求解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
dop101
1楼-- · 2019-07-22 22:57
 精彩回答 2  元偷偷看……
ldh45
2楼-- · 2019-07-23 04:09
测试时,发现如果程序复位时,挂载sd卡,一旦发生了一次读sd卡错误(错误返回值:7,即< Start bit not detected on all data signals in widE bus mode),就算再次读SD卡正确后出来了,程序也会卡死在while (DMA_GetCmdStatus(DMA2_Stream3) != DISABLE){}。如果读sd卡不出错过,程序就不会卡死在这里。实在不知道为什么??

ldh45
3楼-- · 2019-07-23 09:49
我把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);

不知道~这样改会有什么隐患问题吗?
aiyeba
4楼-- · 2019-07-23 10:31
 精彩回答 2  元偷偷看……
ldh45
5楼-- · 2019-07-23 10:57
aiyeba 发表于 2016-5-20 15:15
那就在while里面加个超时等待嘛。

在while循环里加超时等待后,清除DMA2_Stream3标志位,并关闭DMA2_Stream3,退出。我这样试过了,可是新创建一次文件时,会把原来里面的文件破坏,并隐藏了!
ldh45
6楼-- · 2019-07-23 11:43
 精彩回答 2  元偷偷看……

一周热门 更多>