初级会员

- 积分
- 57
- 金钱
- 57
- 注册时间
- 2016-3-25
- 在线时间
- 19 小时
|
1金钱
1:检查R3响应时,如果加上检验命令校验错误,SD_Error CmdResp3Error(void)
{
u32 status;
while(1)
{
status=SDIO->STA;
if(status&((1<<0)|(1<<2)|(1<<6)))break;
}
if(status&(1<<2))
{
SDIO->ICR|=1<<2;
return SD_CMD_RSP_TIMEOUT;
}
/****************************************
如果加上检验命令CRC校验,在卡上电函数SD_PowerON() 函数中就会返回SD_CMD_CRC_FAIL,会发生命令CRC校验错误
if(status&(1<<0))
{
SDIO->ICR|=1<<0;
return SD_CMD_CRC_FAIL;
}
*****************************************/
SDIO->ICR=0X5FF;
return SD_OK;
}
2 FindSCR() 函数中
① SDIO_Send_Data_Cfg(SD_DATATIMEOUT,8,3,1); //这一句已经设置 字节长度是8,块大小是8个字节
② 然后在一下while判断中,为什么能有SDIO_FLAG_DBCKEND(接收发送数据块成功)的判断,如果加上这个判断,那么发送一个数据块即为8个字节,那岂不是已经退出了循环,怎么能够接收SCR的64位?
while(!(SDIO->STA&(SDIO_FLAG_RXOVERR|SDIO_FLAG_DCRCFAIL|SDIO_FLAG_DTIMEOUT|SDIO_FLAG_DBCKEND|SDIO_FLAG_STBITERR)))
{
if(SDIO->STA&(1<<21))
{
*(tempscr+index)=SDIO->FIFO;
index++;
if(index>=2)break;
}
}
|
|