| /* 检测是 SDHC 卡还是 SD 卡 */ i = 0;
 while(SD_WriteCmd(SD_CMD58, 0, 0x01) != 0)
 {
 i++;
 if(i > 100)
 {
 SD_TYPE = SD_TYPE_ERR;
 break;
 }
 }
 /* 读取 OCR */
 for(i=0; i<4; i++)
 {
 buf = SPI2_WriteReadData(0xFF);
 }
 if(buf[0] & 0x40)
 {
 SD_TYPE = SD_TYPE_V2HC;
 }
 else
 {
 SD_TYPE = SD_TYPE_V2;
 }
 }
 else //否则就是 SD V1.0 或者 MMC V3
 {
 SD_WriteCmd(SD_CMD55, 0x00, 0x01);
 r1 = SD_WriteCmd(SD_CMD41, 0x00, 0x01);
 if(r1 <= 1) //对 CMD41 有回应说明是 SD V1.0
 {
 SD_TYPE = SD_TYPE_V1; //是 V1.0 卡
 i = 0;
 do
 {
 if(i > 100)
 {
 return 0xFF;
 }
 SD_WriteCmd(SD_CMD55, 0x00, 0x01);
 r1 = SD_WriteCmd(SD_CMD41, 0x00, 0x01);
 }
 while(r1 != 0);
 }
 else //没有回应说明是 MMC V3
 {
 SD_TYPE = SD_TYPE_MMC;  //卡类型是 MMC 卡
 i = 0;
 while(SD_WriteCmd(SD_CMD1, 0, 0x01) != 0)
 {
 i++;
 if(i > 100)
 {
 return 0xFF;
 }
 }
 }
 }
 SD_CS_SET;  //取消片选
 SPI2_WriteReadData(0xFF);
 return 0;
 }
 以上代码是对 MMC 卡的初始化。
 
 
 |