初级会员

- 积分
- 59
- 金钱
- 59
- 注册时间
- 2015-12-4
- 在线时间
- 4 小时
|
5金钱
上电成功之后,发送CMD2和CMD3。在全速运行的时候,没有返回错误,但是获得的RCA是0,这显然是不对的。在进行硬件调试的时候,返回了命令响应超时的错误。贴上代码:errorstatus=GetCard_RCA(&CardRCA);
/*if(errorstatus==SD_OK)
{
break;
}
}
if(errorstatus!=SD_OK)
{
printf("\r\n错误代码%d\r\n",errorstatus);
return 0;
}
printf("\r\n成功,卡的RCA为%d\r\n",CardRCA);
这段是处理代码。下面的是GetCard_RCA()
SD_error GetCard_RCA(uint32_t* CardRCA)
{
SDIO_CmdInitTypeDef CmdStructure;
SD_error errorstatus=SD_OK;
CmdStructure.SDIO_Argument=0x0; //?T?úèY
CmdStructure.SDIO_CmdIndex=2;
CmdStructure.SDIO_Response=SDIO_Response_Long; // r2
CmdStructure.SDIO_Wait=SDIO_Wait_No;
CmdStructure.SDIO_CPSM=SDIO_CPSM_Enable;
errorstatus=SDIO_error();
if(errorstatus!=SD_OK)
{
return errorstatus;
}
CmdStructure.SDIO_Argument=0x0;
CmdStructure.SDIO_CmdIndex=3;
CmdStructure.SDIO_Response=SDIO_Response_Short; // r6
CmdStructure.SDIO_Wait=SDIO_Wait_No;
CmdStructure.SDIO_CPSM=SDIO_CPSM_Enable;
SDIO_SendCommand(&CmdStructure);
errorstatus=SD_ans_error(CardRCA); //调试是返回的errorstatus是超时,全速时返回的是正常。
if(errorstatus!=SD_OK)
{
return errorstatus;
}
*CardRCA=*CardRCA>>16;
return errorstatus;
SDIO_error的作用是获取命令发送后的状态,SD_ans_error是在SDIO的基础上增加了对卡的回复状态进行判断,如果卡的状态正常,就把回复内容放在*CardRCA里。
问题1;为什么会出现调试和全速运行的结果不一样?我代码设置的是轮询判断的方式,所以应该不会出现延时不够的问题。
问题2;我该相信调试结果还是全速时的结果?全速虽然不报错,但是获得RCA为0,显然是有问题的。
代码肯定是错了,我对比了官方例程中,没有发现问题在哪。还请给位高手给小弟指点一二。 |
|