中级会员
 
- 积分
- 275
- 金钱
- 275
- 注册时间
- 2012-8-11
- 在线时间
- 0 小时
|

楼主 |
发表于 2012-9-11 16:17:29
|
显示全部楼层
回复【8楼】正点原子:
---------------------------------
除了第一个问题其他都搞定了,再问个问题:
下面这段代码中的while((r1&0X80) && Retry--) ;r1&0x80不应该一直为0么,最后会应为超时而退出循环。难道返回值r1不是不完全手持册中说的那个R1么?
先谢过原子了~~
u8 SD_SendCmd(u8 cmd, u32 arg, u8 crc)
{
u8 r1;
u8 Retry=0;
SD_DisSelect();//取消上次片选
if(SD_Select())return 0XFF;//片选失效
//发送
SD_SPI_ReadWriteByte(cmd | 0x40);//分别写入命令
SD_SPI_ReadWriteByte(arg >> 24);
SD_SPI_ReadWriteByte(arg >> 16);
SD_SPI_ReadWriteByte(arg >> 8);
SD_SPI_ReadWriteByte(arg);
SD_SPI_ReadWriteByte(crc);
if(cmd==CMD12)SD_SPI_ReadWriteByte(0xff);//Skip a stuff byte when stop reading
//等待响应,或超时退出
Retry=0X1F;
do
{
r1=SD_SPI_ReadWriteByte(0xFF);
}while((r1&0X80) && Retry--); //返回状态值
return r1;
} |
|