新手上路
- 积分
- 30
- 金钱
- 30
- 注册时间
- 2022-1-1
- 在线时间
- 11 小时
|
在使用SPI读写SD卡中遇到了程序卡死的问题,跟踪进去发现定位在SD卡初始化部分。
//初始化SD卡
u8 SD_Init(void)
{
u8 r1; // 存放SD卡的返回值
u16 retry; // 用来进行超时计数
u8 buf[4];
u16 i;
SD_SPI_Init(); //初始化IO
SD_SPI_SpeedLow(); //设置到低速模式
for(i=0;i<10;i++)SD_SPI_ReadWriteByte(0XFF);//发送最少74个脉冲
retry=20;
do
{
r1=SD_SendCmd(CMD0,0,0x95);//进入IDLE状态
}while((r1!=0X01) && retry--);
SD_Type=0;//默认无卡
.......
继续跟踪,发现SPI对SD卡发送命令前,有一个发送0xFF,需要等SD返回0xFF才开始发命令。
//选择sd卡,并且等待卡准备OK
//返回值:0,成功;1,失败;
u8 SD_Select(void)
{
SD_CS=0;
if(SD_WaitReady()==0)return 0;//等待成功
SD_DisSelect();
return 1;//等待失败
}
定位到具体程序是发送了0xFF以后,SD没有回复这个0xFF导致进入while死循环最终超时。
使用了示波器检测,能看到时钟信号和STM32发送至SD卡的高电平,但是SD卡回复STM32的信号一直没有变过。
请问各位可能是什么原因呢?
|
|