中级会员
- 积分
- 225
- 金钱
- 225
- 注册时间
- 2016-10-5
- 在线时间
- 48 小时
|
1金钱
我用的是4G内存卡,初始化后读的容量为0,发现在发送CMD9命令后,r1返回值为127
这是初始化程序
u8 SD_Initialize(void)
{
u8 r1; // ′æ·ÅSD¿¨μÄ·μ»ØÖμ
u16 retry; // óÃà′½øDD3¬ê±¼Æêy
u8 buf[4];
u16 i;
SD_SPI_Init(); //3õê¼»ˉIO
SD_SPI_SpeedLow(); //éèÖÃμ½μíËùÄ£ê½
for(i=0;i<10;i++)SD_SPI_ReadWriteByte(0XFF);//·¢Ëí×îéù74¸öÂö3å
retry=20;
do
{
r1=SD_SendCmd(CMD0,0,0x95);//½øèëIDLE×′ì¬
}while((r1!=0X01) && retry--);
SD_Type=0;//ĬèÏÎT¿¨
if(r1==0X01)
{
if(SD_SendCmd(CMD8,0x1AA,0x87)==1)//SD V2.0
{
for(i=0;i<4;i++)buf[i]=SD_SPI_ReadWriteByte(0XFF); //Get trailing return value of R7 resp
if(buf[2]==0X01&&buf[3]==0XAA)//¿¨êÇ·ñÖ§3Ö2.7~3.6V
{
retry=0XFFFE;
do
{
SD_SendCmd(CMD55,0,0X01); //·¢ËíCMD55
r1=SD_SendCmd(CMD41,0x40000000,0X01);//·¢ËíCMD41
}while(r1&&retry--);
if(retry&&SD_SendCmd(CMD58,0,0X01)==0)//¼ø±eSD2.0¿¨°æ±¾¿aê¼
{
for(i=0;i<4;i++)buf[i]=SD_SPI_ReadWriteByte(0XFF);//μÃμ½OCRÖμ
if(buf[0]&0x40)SD_Type=SD_TYPE_V2HC; //¼ì2éCCS
else SD_Type=SD_TYPE_V2;
}
}
}else//SD V1.x/ MMC V3
{
SD_SendCmd(CMD55,0,0X01); //·¢ËíCMD55
r1=SD_SendCmd(CMD41,0,0X01); //·¢ËíCMD41
if(r1<=1)
{
SD_Type=SD_TYPE_V1;
retry=0XFFFE;
do //μè′yíË3öIDLEÄ£ê½
{
SD_SendCmd(CMD55,0,0X01); //·¢ËíCMD55
r1=SD_SendCmd(CMD41,0,0X01);//·¢ËíCMD41
}while(r1&&retry--);
}else//MMC¿¨2»Ö§3ÖCMD55+CMD41궱e
{
SD_Type=SD_TYPE_MMC;//MMC V3
retry=0XFFFE;
do //μè′yíË3öIDLEÄ£ê½
{
r1=SD_SendCmd(CMD1,0,0X01);//·¢ËíCMD1
}while(r1&&retry--);
}
if(retry==0||SD_SendCmd(CMD16,512,0X01)!=0)SD_Type=SD_TYPE_ERR;//′íÎóμÄ¿¨
}
}
SD_DisSelect();//è¡ÏûƬѡ
SD_SPI_SpeedHigh();//¸ßËù
if(SD_Type)return 0;
else if(r1)return r1;
return 0xaa;//ÆäËû′íÎó
}
|
|