是从ST的2.0.3版本的固件库,里面有个SDIO的示例程序,我用的是STM32F103VET6,MDK3.24 执行如下操作 Status = SD_Init(); Status = SD_GetCardInfo(&SDCardInfo); Status = SD_SelectDeselect((u32) (SDCardInfo.RCA << 16)); Status = SD_EnableWideBusOperation(SDIO_BusWide_4b); Status = SD_SetDeviceMode(SD_POLLING_MODE); Status = SD_ReadBlock(0x00, Buffer_Block_Rx, BlockSize); 是过了好多张SD卡,一直到SD_SetDeviceMode这里返回的状态都是SD_OK,可是 SD_ReadBlock却一直返回是SD_RX_OVERRUN(0x06)。无法读出数据 调试后发现SD_ReadBlock函数在发送完CMD17读一个块指令并得到正确响应之后,开始从SDIO数据通道读取数据,有下面的内容 if (DeviceMode == SD_POLLING_MODE) { /* Polling mode */ 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; } } 在这个while循环之前SDIO_FLAG_RXOVERR 就已经一直是置位状态,所以导致数据无法读出,可是我在WHILE之前加SDIO_ClearFlag(SDIO_FLAG_RXOVERR);来清除标志,执行后依然无法读出,实在搞不明白,还请高人指点指点,谢谢
|