中级会员
 
- 积分
- 370
- 金钱
- 370
- 注册时间
- 2014-12-15
- 在线时间
- 66 小时
|
7金钱
大家帮帮忙SD卡实验时有一些东西一直弄不明白,能不能教教小弟,以下是我的两个问题:
问题一:SD卡为什么每次发送命令都要重新片选?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;
}
问题二:为什么发送0xff后返回0xff是片选成功?
u8 SD_Select(void)
{
SD_CS=0;
if(SD_WaitReady()==0)return 0;//等待成功
SD_DisSelect();
return 1;//等待失败
}
//等待卡准备好
//返回值:0,准备好了;其他,错误代码
u8 SD_WaitReady(void)
{
u32 t=0;
do
{
if(SD_SPI_ReadWriteByte(0XFF)==0XFF)return 0;//OK
t++;
}while(t<0XFFFFFF);//等待
return 1;
}
这个问题一直弄不明白,求大家帮小弟解答一下,谢谢大家了。
|
最佳答案
查看完整内容[请看2#楼]
1.如果你的SPI上没有挂其他设备,可以一直让片选使能。2.应该是只有SD准备好,才会有返回值,且返回值为0xFF,一个持续高电平,不然就是没有任何值返回,应该是0x00.
|