OpenEdv-开源电子网

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

sd卡的问题

[复制链接]

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2013-9-26
在线时间
0 小时
发表于 2013-11-13 09:46:13 | 显示全部楼层 |阅读模式
if(r1==0X01)   //bitIDLE=1
{
if(SD_SendCmd(CMD8,0x1AA,0x87)==1)//SD V2.0
{
for(i=0;i<4;i++)
    buf=SD_SPI_ReadWriteByte(0XFF);
if(buf[2]==0X01&&buf[3]==0XAA)//卡是否支持2.7~3.6V
{
retry=0XFFFE;
do
{
     SD_SendCmd(CMD55,0,0X01); //发送CMD55
     r1=SD_SendCmd(CMD41,0x40000000,0X01);//发送CMD41
}while(r1&&retry--);
if(retry&&SD_SendCmd(CMD58,0,0X01)==0)//鉴别SD2.0卡版本开始
{
    for(i=0;i<4;i++)buf=SD_SPI_ReadWriteByte(0XFF);
    if(buf[0]&0x40)SD_Type=SD_TYPE_V2HC;    //检查CCS
    else SD_Type=SD_TYPE_V2;   
}
}我看了下SD卡协议英文版的,只能懂个大概有些东西我没找到,指教下上面的红色语句中retry的用处体现在什么地方,还有我自己总结了下if(r1=0x01)//CMD8返回第一字节是R1,R1判断是否为V2.0
{
        buff[0] = SPIx_ReadWriteByte(0xFF);  //should be 0x00对应Ver=0
        buff[1] = SPIx_ReadWriteByte(0xFF);  //should be 0x00对应Reserved=0
        buff[2] = SPIx_ReadWriteByte(0xFF);  //should be 0x01对应VCA在正确响应时就是Echo Back(就是                                                返回参数中的VHS)
        buff[3] = SPIx_ReadWriteByte(0xFF);  //should be 0xAA对应Pattern返回参数中的Pattern

}


所以我不是很懂上面 的判断语句怎么实现的,原子哥指点下









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

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-11-13 10:39:30 | 显示全部楼层
回复【楼主位】尹训恒:
---------------------------------
retry这个是类似于延时等待的意思吧,检查CCS那里是判断发送命令CMD58的返回值即OCD寄存器值
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-13 10:45:27 | 显示全部楼层
retry体现在:while(r1&&retry--);
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2013-9-26
在线时间
0 小时
 楼主| 发表于 2013-11-13 19:41:39 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------可是这里的if(buf[0]&0x40)中的buf[0]按上面的来说是对应Ver=0它怎么作为判断SD_Type=SD_TYPE_V2HC的呢
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-11-15 08:36:23 | 显示全部楼层
回复【4楼】尹训恒:
-------------------------------
楼主看下SD卡的资料介绍吧,里面还是比较详细的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2012-12-23
在线时间
19 小时
发表于 2013-11-27 11:57:03 | 显示全部楼层
回复【4楼】尹训恒:
---------------------------------
发送CMD58是读取OCR寄存器的,buf[0]是存了OCR寄存器的24~31位的值,buf[0]&0x40就是判断第30位是不是为1
如果为1的话证明SD卡为高容量的卡,如果为0的话证明SD卡为标准的SD卡
天道酬勤
回复 支持 反对

使用道具 举报

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2013-9-26
在线时间
0 小时
 楼主| 发表于 2013-11-28 11:18:51 | 显示全部楼层
回复【6楼】xly0907:
---------------------------------
多谢啊呵呵
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 12:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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