OpenEdv-开源电子网

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

SD卡应答格式

[复制链接]

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2012-7-17
在线时间
0 小时
发表于 2012-7-19 10:49:31 | 显示全部楼层 |阅读模式
SD卡应答格式里有48位,为什么在接受应答数据的时候只有8位(比如00、01、05、FF),这8位具体是哪8位啊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

292

帖子

1

精华

高级会员

Rank: 4

积分
614
金钱
614
注册时间
2012-7-6
在线时间
0 小时
发表于 2012-7-19 11:27:30 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-19 11:45:25 | 显示全部楼层
 R1响应

SD卡中的响应有许多种,R1为标准响应,最为常用。与R1响应相似的还有R1bR2R3R1响应在除SEND_STATUS外其它命令后发送,也是最高位先发送,共1个字节。R1的格式如图7所示。响应说明如下:

0x01:空闲状态

0x02:擦除错误

0x04:命令错误

0x08CRC通信错误

0x10:擦除次序错误

0x20:地址错误

0x40:参数错误

其它响应略去不谈,详见SD卡规范。



7
R1响应格式

4、  数据响应(Data Response)

写数据区都要有一个数据记号来响应,该数据响应共1字节,格式如图8所示。其中XXX者可设置为0,这样高4位即为0,Status处定义如下: (其中括号即为该字节的16进制数)

010:数据接收                   (0x05)

101CRC错误,拒绝接收 (0x0b)

110:写错误,拒绝接收      (0x0d)



8
、数据响应格式

5、  数据记号(Data Token)

数据传输都是通过数据记号的,共4515字节,同样是最高位先传输。对于单块的读写和多块读,第一个字节为0xfe(开始标志),接下来的2513字节(视数据块长度而定)为用户数据。最后两字节为16位的CRC。而对于多块的写,第一字节有两种标志,开始标志为0xfc(数据是发送的),停止标志为0xfd(要求停止)

6、  数据错误记号(Data Error Token)

如果读操作失败,SD卡则会发送数据错误记号,格式如图9,定义如下:

0x01:错误

0x02CC错误

0x04ECC错误

0x08:范围错误

0x10:卡被锁了



我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2012-7-17
在线时间
0 小时
 楼主| 发表于 2012-7-19 12:14:40 | 显示全部楼层
嗯,明白了。
还有就是我发送 CMD0、CMD8,这两个命令的应答都是正确的,CMD55+ACMD41 的应答却一直是 0x01(其中 CMD55 的应答是正确的),这说明 SD 卡在空闲状态吗?这种情况可能是什么原因,下面是发送 CMD55+ACMD41 的代码


while ( 0x00 != response )      
{
SD_CS_0;       //每次启动总线传输,片选引脚必须保持低电平  
SdCommand( 0x37, 0x000001AA, 0xFF );         //发送CMD55命令
response = SdResponse( );      //接收SD卡应答到response
SD_CS_1;      //总线传输结束,片选引脚置高
SdWrite( 0xff );                             //总线传输结束后,需要再给8个时钟 

if(0x01 != response)
{
                                      printf( "ACMD55 response is 0x%x\r\n",response );
printf( "CMD55 response error\r\n" );  //通过串口1打印输出"CMD55 response error\r\n"  
}  

SD_CS_0;      //每次启动总线传输,片选引脚必须保持低电平
SdCommand( 0x29, 0x41000000, 0xFF );         //发送ACMD41命令
response = SdResponse( );      //接收SD卡应答到response
SD_CS_1;      //总线传输结束,片选引脚置高
SdWrite( 0xff );                             //总线传输结束后,需要再给8个时钟

i++;
if ( i>10000 )
{
printf( "ACMD41 response is 0x%x\r\n",response );
printf( "ACMD41 response error\r\n" );
return 1;
}  
}
printf( "ACMD41 response is 0x%x\r\n",response );
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-19 14:17:42 | 显示全部楼层
回复【4楼】qiuzhi339:
---------------------------------
1,先用我们的代码测试.
2,如果不行,考虑卡兼容性问题.

SPI模式读取SD卡,总有那么一些卡无法成功使用,尤其是TF卡转大卡的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2012-7-17
在线时间
0 小时
 楼主| 发表于 2012-7-19 14:50:37 | 显示全部楼层
你的代码已经试过了,也不行,我用的是2G金士顿SD卡
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-19 15:10:13 | 显示全部楼层
那换卡.
回复 支持 反对

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2012-7-17
在线时间
0 小时
 楼主| 发表于 2012-7-19 15:41:43 | 显示全部楼层
嗯,我换个卡试试
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-7-29
在线时间
4 小时
发表于 2015-4-6 19:54:31 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,我用语音模块生成了WAV格式的语音文件保存在了SD卡中,现在要求 C机通过USB接口读取语音数据,怎么实现?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-7 00:08:10 | 显示全部楼层
回复【9楼】diid007:
---------------------------------
参考usb读卡器实验
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-11-21
在线时间
22 小时
发表于 2015-11-21 17:08:27 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
请问原子哥为什么SD卡2.0协议里面说R1响应为48bit的,即6字节?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-22 23:07:35 | 显示全部楼层
回复【11楼】MCU赖石华:
---------------------------------
因为有。
SDIO模式。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-9-10
在线时间
8 小时
发表于 2017-10-22 15:03:07 | 显示全部楼层
正点原子 发表于 2015-4-7 00:08
回复【9楼】diid007:
---------------------------------
参考usb读卡器实验

原子哥,请问TF卡SPI模式下的初始化成功了,读CCS位成功了,但后面读CID寄存器的CMD10的响应为0x7f,读单块等操作也是如此,这是何解?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 19:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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