OpenEdv-开源电子网

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

初学SD卡遇到的问题!以理解为主!

[复制链接]

33

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
280
金钱
280
注册时间
2013-6-18
在线时间
15 小时
发表于 2013-10-9 17:33:29 | 显示全部楼层 |阅读模式
初学学习SD卡,看了一些资料,个人感觉还是比较难滴!


学习中有几个问题想请教一下。SD卡SPI模式
1.响应。这里有一帖,对响应的类型介绍的比较清楚了。http://www.openedv.com/posts/list/6825.htm
对于R1响应 (别的不管)         数据响应                                                 数据错误记号
0x01:空闲状态                     010:数据接收                   (0x05)            0x01:错误
0x02:擦除错误                     101:CRC错误,拒绝接收 (0x0b)                0x02:CC错误
0x04:命令错误                     110:写错误,拒绝接收      (0x0d)             0x04:ECC错误
0x08:CRC通信错误                                                                            0x08:范围错误
0x10:擦除次序错误                                                                           0x10:卡被锁了
0x20:地址错误
0x40:参数错误

问题1:响应分为这3种了,SPI模式下有得CMD指令有响应有得没有,那么有响应的指令必定有对应的响应(R1.R2。R3。。)。
           没有响应的指令那么读取的放回数据有是什么。(没有就是FF么),数据响应是再“写数据后才会产生的”,数据错误标记是再“读数据后产生的”,
            这两句话是否正确!
问题2:在等待数据准备好的这个过程中,我们读取的返回值是“
Busy”,尔不是任何响应,且0xff表示空闲,对么?

问题3:CMD命令和ACMD命令有什么区别?


问题4:在发送CMD命令的时候,
            例如:                                                                                


                                                                              

        
do
{
r1=SD_SPI_ReadWriteByte(0xFF);
}while((r1&0X80) && Retry--);
       r1是发送CMD命令(6个字节)返回的响应
r1&0X80 为什么是0x80, R1响应的最高位为0,这个值岂不是永远为0,有和意义?

问题5: 在初始化的时候,发送CMD0 返回 “0x01” ,在发CMD8 的时候返回 “0x01”或“0x05”表示V2.0和1.0,
            在这里的COM0的“0x01”是否属于R1响应类型,“0x01”在R1响应中表示空闲状态,
            尔CMD8命令返回的“0x01”和“0x05” 还算是响应么,这里明显不是响应的意思,
            我们说的响应一般是再什么阶段有效,或者是什么状态!

问题6:SD卡在不同的CMD指令时会改变SD卡的状态,总共有几种状态,分别是什么,请列出,这些对么?
            
  MEDIA_BAD_REMOVAL_ACTION:sd卡已经从sd卡插槽拔出,但是挂载点还没解除
                  MEDIA_EJECT_ACTION:用户想要移除sd卡
                  MEDIA_MOUNTED_ACTION:sd卡被插入,且已经挂载
                  MEDIA_REMOVED_ACTION:sd卡被移除
                  MEDIA_SHARED_ACTION:sd卡作为 USB 大容量存储被共享,挂载被解除
                  MEDIA_UNMOUNTED_ACTION:sd卡存在,但还没有挂载
                  MEDIA_SCANNER_STARTED_ACTION:开始扫描
                  MEDIA_SCANNER_FINISHED_ACTION:扫描完成  

问题7:CRC如何取消。用什么指令。取消后的CRC是否就无意义了,可任意填充。


问题8:CMD命令有参数有得有有得没有。
            有得话一般都是地址之类的,没有的话可以任意填充,对么。
            在SD初始化阶段判断初始化完成时,有个ACMD41的命令。
            在V2.0的卡上
            SD_SendCmd(CMD41,0x40000000,0X01);//发送CMD41
            在V1.0卡上
            SD_SendCmd(CMD41,0,0X01);//发送CMD41
            这两个参数不一样有什么意义!


问题9:SD_SendCmd(CMD8,0x1AA,0x87)==1)//SD V2.0(判断是V2.0卡)这里的0x1AA和0x87是怎么来的?


希望会的朋友们能给与回答!越详细越好!在此谢过!






            














       






















一知半解!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-9 19:48:18 | 显示全部楼层
  回复【楼主位】 liawei123 :
---------------------------------
楼主,你的问题太多了,通读这几个档找答案吧。
见附件。

SD卡V1.0协议.rar

666.53 KB, 下载次数: 83

SD卡2.0协议.pdf

1.04 MB, 下载次数: 142

MMC-System-Spec-v3.31.pdf

1.95 MB, 下载次数: 73

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

使用道具 举报

33

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
280
金钱
280
注册时间
2013-6-18
在线时间
15 小时
 楼主| 发表于 2013-10-10 10:55:29 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
问题是多,主要是东西看杂了,SD和SPI模式看混了!
就一个问题还请回答下:
在SPI模式下CRC7效验是否需要!
SD_SendCmd(CMD0,0,0x95);//进入IDLE状态
SD_SendCmd(CMD8,0x1AA,0x87);
这两个带了CRC7效验!
一知半解!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-10 11:33:40 | 显示全部楼层
回复【3楼】liawei123:
---------------------------------
可要可不要,但是你发的CMD8和CMD0是必须要。所以,只有这两个指令有CRC,其他的,都可以不用。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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