用STM32F4Discovery开发板外接SD卡连接器,进行没有文件系统的读写操作,发现SD卡总是死在SD_Error SD_WaitReadOperation(void)函数中,在while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0))
{
timeout--;
}中总是执行不过去,无法触发DMA中断。实验多次,在网上找了很多类似的问题,都没有解决。
最后用万用表检查上拉电阻有没有接好,发现D1上的上拉电阻换掉了,变成0R了,将其换上好的,问题立刻解决。D0,D1,D2,D3,CMD.上的上拉电阻很关键,必须加上。
SD_Error SD_WaitReadOperation(void)
{
SD_Error errorstatus = SD_OK;
uint32_t timeout;
timeout = SD_DATATIMEOUT;
while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0))
{
timeout--;
}
DMAEndOfTransfer = 0x00;
timeout = SD_DATATIMEOUT;
while(((SDIO->STA & SDIO_FLAG_RXACT)) && (timeout > 0))
{
timeout--;
}
if (StopCondition == 1)
{
errorstatus = SD_StopTransfer();
StopCondition = 0;
}
if ((timeout == 0) && (errorstatus == SD_OK))
{
errorstatus = SD_DATA_TIMEOUT;
}
/*!< Clear all the static flags */
SDIO_ClearFlag(SDIO_STATIC_FLAGS);
if (TransferError != SD_OK)
{
return(TransferError);
}
else
{
return(errorstatus);
}
}