金牌会员
 
- 积分
- 1289
- 金钱
- 1289
- 注册时间
- 2014-6-15
- 在线时间
- 143 小时
|
1金钱
在SD卡实验章节里,看源码有一点疑问:
//向SD卡发送一个命令
//输入: u8 cmd 命令
// u32 arg 命令参数
// u8 crc crc校验值
//返回值: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;
}
//选择sd卡,并且等待卡准备OK
//返回值:0,成功;1,失败;
u8 SD_Select(void)
{
SD_CS=0;
if(SD_WaitReady()==0)return 0;//等待成功 //=================问题1、为什么这个时候SD_WaitReady()的返回值不等于0,
SD_DisSelect();
return 1;//等待失败
}
问题2、u8 SD_Select(void) 函数最后执行的是SD_DisSelect();函数,
//取消选择,释放SPI总线
void SD_DisSelect(void)
{
SD_CS=1;
SD_SPI_ReadWriteByte(0xff);//提供额外的8个时钟
}
在这个函数里SD卡的片选是拉高的, 那么在给SD卡发命令的时候,片选应该是高电平?
我记得SPI模式的片选CS 拉低才会选中相应的设备。 而SD卡位什么有时候将CS拉低,有时候拉高呢?
我使用红色显示出我有疑问的地方,还请大侠帮忙解答
|
|