主要总结遇到的问题:
1、使用低速 SD卡时,初始化不通过。
for(retry=0; retry<0xFFF; retry++){
r1 = MMC_send_command(CMD0, 0, 0x95);//Resets all cards to idle state
if(r1 == 0x01){
retry = 0;
break;
}
}
/* Timeout return */
if(retry == 0xFFF){//Reset card into IDLE state failed
return 1;
}
解决办法:在上段代码后面增加1s延时 delay_ms(1000);
2、使用高速SD卡 (4G容量)时,初始化不通过。ACMD41一直返回0x01。
for(retry=0; retry<0xFFFF; retry++)
{
if( MMC_send_command(CMD55, 0, 0) == 0x01){
r1 = MMC_send_command(ACMD41, 0x40000000, 0); /* should be return 0x00 */
if(r1 == 0x00)
{
retry = 0;
break;
}
}
}
/* Timeout return */
if(retry == 0xFFFF)
{
return 3;
}
解决办法:把校验位0 改为 0xff ,初始化通过。
MMC_send_command(CMD55, 0, 0xff) ; MMC_send_command(ACMD41, 0x40000000, 0xff)