打印

SPI模式操控SD卡求大神帮助

[复制链接]
1310|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
阿比安吉|  楼主 | 2014-8-14 15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟现在使用C8051f380单片机连接一个SD卡。按照之前查阅的很多资料对SD进行初始化都失败了,现在特地向各位求教(SD卡的型号是金士顿的Class 10 UHS-I SDHC/SDXC 8GB的卡)。
在初始化SD卡的过程中,首先发送80个脉冲,然后发送指令CMD0,这时读到能够0x01的返回值。但是接下来发送CMD55+CMD41的ACMD41指令完成SD卡初始化,在这一步怎么也无法得到正确的返回值0x00,求教各位大神这是为什么?会和SD卡的型号有关系吗?但是它不是MMC卡,应该不使用CMD1来初始化啊,而且我也用CMD1尝试过初始化,没成功...
在此附上初始化函数和指令发送函数。
初始化函数:
uchar reset()
{
uchar i,retry,r1;
r1=0;
retry = 0;         
CS=1;        //CS置高发送多于74个时钟
do
{
for(i=0;i<10;i++) spiwrite(0xff);  //80个时钟,发送CMD0
r1=sendcommand(0,0);
retry++;
if(retry>0xfe)
{ return -1;
  }
} while(r1!=0x01);

  while(r1!=0x00)         //发送CMD55+ACMD41
{
  r1=sendcommand(55,0);
  r1=sendcommand(41,0);
}
// sendcommand(59,0);
// sendcommand(16,512);
return 0;         
}

命令发送函数:
uchar sendcommand(uchar cmd, ulong arg)
{
uchar r1;
CS=1;
spiwrite(0xff);
CS=0;
spiwrite(cmd|0x40);
spiwrite(arg>>24);
spiwrite(arg>>16);
spiwrite(arg>>8);
spiwrite(arg);
spiwrite(0x95);
spiwrite(0xff);
while((r1=spiwrite(0xff))==0xff)
if(retry++>8) break;
CS=1;  
return r1;
}
求各位大神帮助啊!感激不尽!

相关帖子

沙发
wsd1b| | 2014-8-14 16:27 | 只看该作者
你那个至少也是SD2.0的卡,CMD0之后紧接着应该发的是CMD8,可以试试。或者换一张老一点的SD卡,512MB的是最好的

使用特权

评论回复
板凳
阿比安吉|  楼主 | 2014-8-15 08:24 | 只看该作者
好的我尝试一下,谢谢~

使用特权

评论回复
地板
publicrtos| | 2014-9-23 14:29 | 只看该作者
可以下载FATFS文件系统,里面有SPI的SD卡接口,自动支持SD、SDHC硬件,自动支持FAT12/FAT16/FAT32文件系统

使用特权

评论回复
5
qq4988| | 2014-9-24 08:32 | 只看该作者

使用特权

评论回复
6
tt朝花夕拾| | 2017-7-26 15:14 | 只看该作者
请问楼主解决了ACMD41不能正常返回0x00的问题了么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

21

帖子

0

粉丝