//acmd41,命令参数由支持的电压范围及HCS位组成,HCS位置一来区分卡是SDSc还是sdhc
SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SDType; //参数为主机可供电压范围及hcs位
SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_OP_COND;
SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; //r3
SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
SDIO_SendCommand(&SDIO_CmdInitStructure);
errorstatus = CmdResp3Error(); //检测是否正确接收到数据
if (errorstatus != SD_OK)
{
return(errorstatus); //没正确接收到acmd41,出错,返回
}
/*若卡需求电压在SDIO的供电电压范围内,会自动上电并标志pwr_up位*/
response = SDIO_GetResponse(SDIO_RESP1); //读取卡寄存器,卡状态
validvoltage = (((response >> 31) == 1) ? 1 : 0); //读取卡的ocr寄存器的pwr_up位,看是否已工作在正常电压
count++; //计算循环次数
调用CmdResp3Error();返回的状态始终是超时,初始化不成功。有没有哪位大哥大姐知道的啊,我用的是网上的一个程序,带FAT文件系统,用micro sd 2G ,先谢谢了。 |