有这么一段代码,楼主你看一下:
//如果不是SDHC,给定的是sector地址,将其转换成byte地址
if(SD_Type!=SD_TYPE_V2HC)
{
sector = sector<<9;
}
安 发表于 2017-3-23 16:15
有这么一段代码,楼主你看一下:
//如果不是SDHC,给定的是sector地址,将其转换成byte地址
if(SD_Type ...
这是初始化中的代码吗?
安 发表于 2017-3-23 16:15
有这么一段代码,楼主你看一下:
//如果不是SDHC,给定的是sector地址,将其转换成byte地址
if(SD_Type ...
能上传一下你的代码给我看一下吗?
原子的代码就有if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;
楼主,你仿真进入这里,看一下CardType的值是多少。
安 发表于 2017-3-23 16:59
楼主,你仿真进入这里,看一下CardType的值是多少。
值为SDIO_STD_CAPACITY_SD_CARD_V2_0
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;这里改成SDIO_STD_CAPACITY_SD_CARD_V2_0再试一下,好久了,大概是1.0的才用地址左移。2.0的不用。你看一下SD卡的地址操作说明。
嗯,好的
安 发表于 2017-3-23 17:03
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector
if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;这个是在读写里面的了
现在是发送ACMD41命令就出问题了
安 发表于 2017-3-23 17:03
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector
执行到下面的代码即返回
if(errorstatus==SD_OK)//SD2.0/SD 1.1,否则为MMC卡
{
//SD卡,发送ACMD41 SD_APP_OP_COND,参数为:0x80100000
while((!validvoltage)&&(count<SD_MAX_VOLT_TRIAL))
{
SDIO_CmdInitStructure.SDIO_Argument = 0x00;//发送CMD55,短响应
SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; //CMD55
SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
SDIO_SendCommand(&SDIO_CmdInitStructure); //发送CMD55,短响应
errorstatus=CmdResp1Error(SD_CMD_APP_CMD); //等待R1响应
if(errorstatus!=SD_OK)
return errorstatus; //响应错误
//acmd41,命令参数由支持的电压范围及HCS位组成,HCS位置一来区分卡是SDSc还是sdhc
SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SD_HIGH_CAPACITY | SDType; //发送ACMD41,短响应
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(); //等待R3响应
if(errorstatus!=SD_OK)
return errorstatus; //响应错误
response=SDIO->RESP1;; //得到响应
validvoltage=(((response>>31)==1)?1:0); //判断SD卡上电是否完成
count++;
}
安 发表于 2017-3-23 17:03
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector
到了确认卡是否是HC卡及上电是否完成时,出错,发送CMD55->发送ACMD41,如此循环八九点后,最终在响应CMD55命令时出错,Resp1返回 SD_CMD_CRC_FAIL