SD卡初始化问题u8 SD_WaitReady(void)

2019-08-12 17:27发布

使用原子的新版SD卡程序移植到stm32f103vc的板子上,在SD卡初始化中,等待卡准备好的函数中,利用串口查看,始终得到0X00,不能得到0xff,换了3种卡都不能得到0xff,移植原来挑卡那版程序初始化没有问题,请大虾帮我分析分析造成的原因吧,不胜感激。
//等待卡准备好
//返回值:0,准备好了;其他,错误代码
u8 SD_WaitReady(void)
{  
 u32 t=0;
 do
 {
  if(SD_SPI_ReadWriteByte(0XFF)==0XFF)return 0;//OK 此处SD_SPI_ReadWriteByte(0XFF)返回的值一直是0x00”
  t++;     
 }while(t<0XFFFFFF);//等待
 return 1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
31条回答
hooddas
1楼-- · 2019-08-15 07:40
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-08-15 12:32
回复【20楼】hooddas:
---------------------------------
发送0XFF,应该只是让MOSI维持高.
具体的是否是有意义的指令,还得啃SD卡的白皮书了.
对了,你的VS1003和SD卡共用SPI,你要先把VS1003的片选信号控制为非选中状态.XCS,XDCS都应该未选中.
Pony279
3楼-- · 2019-08-15 14:08
同楼上,操作SD卡的时候取消VS1003的片选,
否则, VS1003和SD共用MISO,两个相连的输出脚同时处于活跃状态的话,后果比较严重。

"最后到 SPI1->DR返回的数据不太明白这里发送的0XFF 是怎么确定SD卡准备好的"

发送0xff只是为了让SPI的时钟脚跳几下,好从MISO脚读数据,0xff是无效的数据,MOSI是在维持高电平。
hooddas
4楼-- · 2019-08-15 14:47
谢谢原子和pony279,原因找到了,是VS1003的片选设置错误了,还有就是没有外接上拉电阻的原因,如果没有上拉电阻得到的值仍然是0X00,那是不是其实在等待卡准备好的时候,无所谓返回的数据是0x00或者0xff
正点原子
5楼-- · 2019-08-15 15:44
呵呵,这种问题,要多注意.
ZHUZHU
6楼-- · 2019-08-15 16:05
 精彩回答 2  元偷偷看……

一周热门 更多>