OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4661|回复: 3

spi sd卡驱动 问题

[复制链接]

81

主题

185

帖子

0

精华

高级会员

Rank: 4

积分
534
金钱
534
注册时间
2013-7-4
在线时间
13 小时
发表于 2014-1-24 08:46:59 | 显示全部楼层 |阅读模式
这个问题很奇怪,高速卡没问题,可是用到低速的卡就出问题了
无论是f_read,f_write,多块,单块到最后都会卡死在同一个地方
int MSD0_spi_read_write(uint8_t data)
{
  while (SPI_I2S_GetFlagStatus(SPIX, SPI_I2S_FLAG_TXE) == RESET);
  SPI_I2S_SendData(SPIX, data);
  while (SPI_I2S_GetFlagStatus(SPIX, SPI_I2S_FLAG_RXNE) == RESET);          //卡死在这里
  return SPI_I2S_ReceiveData(SPIX);
}
试过把频率降低可是最后降到256分频(168/4)/256 够慢了吧,还是会这样,难道是我读取之间要加延时?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-1-25 14:22:04 | 显示全部楼层
回复【楼主位】jimmjimm:
---------------------------------
这。。。。。
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-1-26 21:41:18 | 显示全部楼层
这种写法很容易陷入死循环,看看原子哥的程序
u8 SPI_ReadWriteByte(u8 TData)
{
u8 t0=0;
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET)
{
t0++;
if(t0>200)return 0;//超时跳出
}
SPI_I2S_SendData(SPI2,(u16)TData);
t0=0;
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET)
{
t0++;
if(t0>200)return 0;
}
return SPI_I2S_ReceiveData(SPI2);
}
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-26 22:44:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 09:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表