读SD卡死机

2019-07-20 17:34发布

本帖最后由 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里面循环,任务也不切换了,这一段该如何处理呢?

0条回答

一周热门 更多>