复位和初始化都成功了。但是在读取寄存器值的时候出错了。比如说读取CID和CSD,要先发送相应的命令,发送命令后,可以得到正确的回应,也就是0X00,但是接下里读取数据,却怎么都没法读取来数据传输的开始字节,也就是0XFE。
不知道有什么问题?
U8 WriteCMD_NoCS(U8 CMD, U32 ARG, U8 CRC)
{
U8 i;
U8 temp;
WriteByte( CMD | 0X40 );
WriteByte( ARG >> 24);
WriteByte( ARG >> 16 );
WriteByte( ARG >> 8 );
WriteByte( ARG );
WriteByte( CRC );
for( i=0; i<100; i++ )
{
temp = ReadByte();
if( temp != 0XFF )
break;
}
return temp;
}
void ReadData( U8 *p, U8 length)
{
U8 i;
U8 temp;
for( i=0; i<0XFF; i++ )
{
temp == ReadByte();
if(temp == 0XFE)
break;
}
for( i=0; i<length; i++ )
{
*p = ReadByte();
p++;
}
ReadByte(); //CRC
ReadByte(); //CRC
}
void ReadCID( void )
{
U8 i;
U8 temp;
CS_CLR;
for( i=0; i<100; i++)
{
temp = WriteCMD_NoCS( CMD10, 0, 0XFF ); //注意这个函数不设置CS
if(temp == 0X00)
break;
}
ReadData( CID, 16 );
CS_SET;
WriteByte( 0XFF );
}