大家好:
我用的是micro 2G sd卡,spi接口。执行程序
//-----------------SD卡复位到idle结束-----------------
//获取卡片的SD版本信息
r1 = SD_SendCommand_NoDeassert(8, 0x1aa, 0x87);
r1每次的返回值都不一样。我看sd卡的手册上说
• Compatible with SD Specification Ver. 2.0
• Comply with SD File System Specification Ver. 2.0
那他应该返回值是0x01,请大家帮忙想想为什么。
我执行循环连续发送CMD0,直到SD卡返回0x01,进入IDLE状态这步是对的,这能说明硬件电路和卡没问题吧?
下面是cmd8执行程序
u8 SD_SendCommand_NoDeassert(u8 cmd, u32 arg, u8 crc)
{
unsigned char r1;
unsigned char Retry = 0;
//????????
SPI_ReadWriteByte(0xff);
//片选端置低,选中SD卡
SD_CS_ENABLE();
//发送
SPI_ReadWriteByte(cmd | 0x40); //分别写入命令
SPI_ReadWriteByte(arg >> 24);
SPI_ReadWriteByte(arg >> 16);
SPI_ReadWriteByte(arg >> 8);
SPI_ReadWriteByte(arg);
SPI_ReadWriteByte(crc);
//等待响应,或超时退出
while((r1 = SPI_ReadWriteByte(0xFF))==0xFF)
{
Retry++;
if(Retry > 200)break;
}
//返回响应值
return r1;
} |