我的SD卡是8G容量,初始化虽然通过了,读写也正常,为什么初始化读OCR寄存器判断的结果SD_Type是SD_TYPE_V2型,不是应该是SD_TYPE_V2HC型(
大容量卡 )吗?
下面是SD卡的初始化函数
//返回0:成功;1:失败
//只支持2.0协议的SD卡初始化
u8 SD_Init(void)
{
u8 r1=0,i=0;
u8 buf[4];
SD_Type=SD_TYPE_ERR;//初始化默认无卡型
SD_SPI_Init();
SD_Select();//片选
SD_SPI_SetLowSpeed();//低速模式进行初始化
for(i=0;i<10;i++)SPI_ReadWriteByte(0xff);//上电延时80个时钟(>74个CLK)
r1=SD_SendCmd(CMD0,0,0x95);//进入复位状态(SD切换为SPI_Mode)
if(r1==0)//命令发送成功
{
if(SD_SendCmd(CMD8,0x1AA,0x87)==0)//判断SD2.0协议
{
for(i=0;i<4;i++)buf=SPI_ReadWriteByte(0xff);
if((buf[2]==0x01)&&(buf[3]==0xAA))//电压满足2.7-3.6V
{
r1=SD_SendCmd(CMD55,0,0x01);
if(r1==0)
r1=SD_SendCmd(CMD41,0x40000000,0x01);
if(r1==0)
{
r1=SD_SendCmd(CMD58,0,0x01);//读OCR寄存器判卡型
if(r1==0)
{
for(i=0;i<4;i++)buf=SPI_ReadWriteByte(0xff);
if(buf[0]&0x40)SD_Type=SD_TYPE_V2HC;//bit30为1则大容量卡
else SD_Type=SD_TYPE_V2;//否则小容量卡
}
}
}
}
}
SD_DisSelect();
SD_SPI_SetHighSpeed();
if(SD_Type)return 0;
return 1;
}
|