void MMC_Init(void)
{
unsigned char retry,temp;
unsigned char i;
unsigned char r1;
tryagain:
for (i=0;i<10;i++)
{
SPI_TransferByte(0xff); //send 74 clock at least!!!延迟最少74个周期
}
//一次发送1bit,1个BYTE是8个时钟,10次循环为80个时钟周期
SPI_TransferByte(MMC_RESET);//复位mmc
SPI_TransferByte(0x00);
SPI_TransferByte(0x00);
SPI_TransferByte(0x00);
SPI_TransferByte(0x00);//以上为命令参数,而cmd0没有参数,全为常数,不需要再运行时间内计算出来,
SPI_TransferByte(0x95);//crc校验
SPI_TransferByte(0xff);
SPI_TransferByte(0xff);//命令结束
//切换到spi模式后,crc自动关闭,重启crc,命令cmd59配置
retry=0;
do{
feeddog();
temp=Write_Command_MMC(MMC_INIT,0);
retry++;
if(retry==100)
{
//printf("SD/MMC_INIT is ERROR!\n ");
goto tryagain;
}
}while(temp!=0);//发送cmd1,直到返回0x00,进入ready状态
//printf("SD/MMC_INIT is OK!\n");
}
一直停在这里,不断的打印SD/MMC_INIT is ERROR