if(r1==0X01) //bitIDLE=1
{
if(SD_SendCmd(CMD8,0x1AA,0x87)==1)//SD V2.0
{
for(i=0;i<4;i++)
buf=SD_SPI_ReadWriteByte(0XFF);
if(buf[2]==0X01&&buf[3]==0XAA)//卡是否支持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)//鉴别SD2.0卡版本开始
{
for(i=0;i<4;i++)buf=SD_SPI_ReadWriteByte(0XFF);
if(buf[0]&0x40)SD_Type=SD_TYPE_V2HC; //检查CCS
else SD_Type=SD_TYPE_V2;
}
}我看了下SD卡协议英文版的,只能懂个大概有些东西我没找到,指教下上面的红色语句中retry的用处体现在什么地方,还有我自己总结了下if(r1=0x01)//CMD8返回第一字节是R1,R1判断是否为V2.0
{
buff[0] = SPIx_ReadWriteByte(0xFF); //should be 0x00对应Ver=0
buff[1] = SPIx_ReadWriteByte(0xFF); //should be 0x00对应Reserved=0
buff[2] = SPIx_ReadWriteByte(0xFF); //should be 0x01对应VCA在正确响应时就是Echo Back(就是 返回参数中的VHS)
buff[3] = SPIx_ReadWriteByte(0xFF); //should be 0xAA对应Pattern返回参数中的Pattern
}
所以我不是很懂上面 的判断语句怎么实现的,原子哥指点下
|