STM32 SDIO 報錯 SD_RX_OVERRUN
使用STM32官方SDIO 的SDCARD驅動的時候,以前單任務的時候沒有出現這種錯誤,現在使用多任務的時候經常出現,表現為讀取文件的時候沒有問題,經常點擊屏幕的時候就會出問題,最后通過仿真找到出錯點就是讀取數據向SD卡發(fā)送CD17命令時出現SD_RX_OVERRUN這個錯誤,產生原因為讀取FIFO溢出.
通過仿真與測試發(fā)現問題主要出現在讀取過程中不能打斷,也就是臨界點.
在兩個讀取函數里面
SD_Error SD_ReadMultiBlocks(u32 addr, u32 *readbuff, u16 BlockSize, u32 NumberOfBlocks);
SD_Error SD_ReadBlock(u32 addr, u32 *readbuff, u16 BlockSize);
關鍵點加上臨界保護
OS_ENTER_CRITICAL();//關閉系統(tǒng)中斷
while(!(SDIO->STA&(SDIO_FLAG_RXOVERR|SDIO_FLAG_DCRCFAIL|SDIO_FLAG_DTIMEOUT|SDIO_FLAG_DBCKEND|SDIO_FLAG_STBITERR)))
{
if(SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF)!=RESET)
{
for(count=0;count<8;count++)
{
*(tempbuff+count)=SDIO_ReadData();
}
tempbuff+=8;
}
}
OS_EXIT_CRITICAL();//開啟系統(tǒng)中斷
同樣寫操作的時候也一樣需要.
因為有些外設的操作時不能被打斷的.





