OpenEdv-开源电子网

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

读SD卡死机

[复制链接]

18

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
363
金钱
363
注册时间
2015-10-29
在线时间
49 小时
发表于 2017-1-4 19:30:51 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 tony129 于 2017-1-4 19:39 编辑

在跑了ucosIII +SD卡播放歌曲时,如果把卡拔下,或者有时不拔卡正常播放时都会卡死,发现大部分时候都是死在了这个循环
                   [mw_shl_code=c,true]                        while(!(SDIO->STA&((1<<4)|(1<<1)|(1<<8)|(1<<3)|(1<<9))))//下溢/CRC/数据结束/超时/起始位错误
                        {
                                if(SDIO_GetFlagStatus(SDIO_FLAG_TXFIFOHE) != RESET)                                                      
                                {         
                                        if((tlen-bytestransferred)<SD_HALFFIFOBYTES)
                                        {
                                                restwords=((tlen-bytestransferred)%4==0)?((tlen-bytestransferred)/4)(tlen-bytestransferred)/4+1);
                                                for(count=0;count<restwords;count++,tempbuff++,bytestransferred+=4)
                                                {
                                                        SDIO->FIFO=*tempbuff;
                                                }
                                        }else                                                                              
                                        {
                                                for(count=0;count<SD_HALFFIFO;count++)
                                                {
                                                        SDIO->FIFO=*(tempbuff+count);
                                                }
                                                tempbuff+=SD_HALFFIFO;
                                                bytestransferred+=SD_HALFFIFOBYTES;
                                        }
                                        timeout=0X3FFFFFFF;        //写数据溢出时间
                                }else
                                {
                                        if(timeout==0)return SD_DATA_TIMEOUT;
                                        timeout--;
                                }
                        }
[/mw_shl_code]
一直进入timeout--,此时 SDIO_STA寄存器 还处于数据传输中状态,无超时,下溢,CRC校验等错误,所以一直在while里面循环,任务也不切换了,这一段该如何处理呢?

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

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2019-3-22
在线时间
31 小时
发表于 2019-9-30 09:49:38 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2019-10-4 01:25:30 | 显示全部楼层
试试寄存器版本
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2021-3-15
在线时间
5 小时
发表于 2021-7-27 16:47:25 | 显示全部楼层
你好楼主,问题解决了吗,我现在代码也卡死在你说的这个代码处
回复

使用道具 举报

16

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2020-11-4
在线时间
121 小时
发表于 2022-11-30 13:19:27 | 显示全部楼层
最后咋解决的呢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 23:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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