SD卡初始化命令介绍

SD卡初始化命令介绍

ID:40088761

大小:285.09 KB

页数:5页

时间:2019-07-20

SD卡初始化命令介绍_第1页
SD卡初始化命令介绍_第2页
SD卡初始化命令介绍_第3页
SD卡初始化命令介绍_第4页
SD卡初始化命令介绍_第5页
资源描述:

《SD卡初始化命令介绍》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、SD卡的命令和返回值SD卡有很多种类型的命令,有初始化的,特殊功能开启关闭的,寄存器查看的,读和写的,官方给出的分类更清楚一些,不过在一般使用中,我们并不需要了解的多么复杂,只要掌握了最基本的初始化命令,和读写命令,SD卡的操作就能够实现了。每一个命令的长度都是固定的6个字节,前1个字节的值=命令号+0x40;中间4个字节为参数,不同的命令参数格式都不相同,但参数最多为4个字节;最后1个字节是CRC校验码和1位固定结束位‘1’。这里需要说明一下0x40的意思,任何命令都有一个固定的起始格式,即先0后1,这是固定的

2、命令起始标志,前两个字节的二进制码就是:01xxxxxx需要特殊说明的是CRC的问题,这是一种检验错误的方法,具体问题度娘说的还算明白,在SPI模式中,CRC校验默认是关闭的,也就是说这7位必须要发,但是SD卡会在读到CRC以后自动忽略它,所以全部发1就可以。例外的是,CMD0,CMD8这两个命令发送的时候SD卡还没有进入SPI模式,也就是说CRC校验在这个时候还是启用状态,因此这两个命令的CRC效验码必须要写正确,SD卡才会执行命令,否在在返回值R1中就会有相应的错误标志位提示开发人员CRC校验码错误。CMD0

3、:0x40,0x00,0x00,0x00,0x00,0x954个字节的参数都为stuffbits填充位,那就全0即可,最后一个字节CRC是固定的5CMD8:0x48,0x00,0x00,0x01,0xaa,0x870x40的固定值+8=0x48;Reservedbits也是可以填充为0的位,VHS支持电压的说明可参考datasheet,需要说明的是参数的最后1byte检查位,这个字节的内容会在R7中原原本本的返回给用户,但是这个字节的不同决定了7位CRC的不同,网上的例子一般都发0xaa,那对应的CRC码+结束位

4、就是0x87。ACMD41属于附加命令,发送起来要麻烦一些,必须提前通知SD卡下一条要发送的命令为ACMD,这个通知就是CMD55,它的4字节参数都为0即可,CMD55 :0x77,0x00,0x00,0x00,0x00,0xff.0x77=0x40+0x37(55的16进制表示);CRC可以忽略不要都发1即可0xff.ACMD41:0x69,0x40,0x00,0x00,0x00,0xff.第一个字节算法同理,第一个参数从DATASHEET可以看出HCS位被置1了,目的是为了告诉SD卡我的MCU支持SDHC卡,

5、如果SD卡不回应CMD8也就是说当前SD卡为1.0版本,那么发送ACMD41时SD卡会自动忽略这个位。具体的说明可以在DATASHEET中查找关键字HCS和CCS或者查看章节CardInitializationandIdentificationProcessCMD58:0x7a,0x00,0x00,0x00,0x00,0xff.同理返回值:不同的CMD有不同类型的返回值,每发送完一个CMD,在DATA_OUT线上就会有返回值提示我们当前命令是否被SD卡接受,错在哪里,所以每次发送CMD还有都要用read_byte

6、()读取返回5值,查看命令的执行结果,这是SD卡给用户反馈的唯一方法。常用的返回值有R1,R3,R7(初始化时CMD8专用)R1:R3=R1+OCR寄存器的值R7=R1+操作电压反馈+CMD8参数中的checkpatternCMD8的格式和参数:5SD卡调试关键点:1.上电时要延时足够长的时间给SD卡一个准备过程,在我的程序里是5秒,根据不同的卡设置不同的延时时间。SD卡初始化第一步在发送CMD命令之前,在片选有效的情况下首先要发送至少74个时钟,否则将有可能出现SD卡不能初始化的问题。2.SD卡发送复位命令CM

7、D0后,要发送版本查询命令CMD8,返回状态一般分两种,若返回0x01表示此SD卡接受CMD8,也就是说此SD卡支持版本2;若返回0x05则表示此SD卡支持版本1。因为不同版本的SD卡操作要求有不一样的地方,所以务必查询SD卡的版本号,否则也会出现SD卡无法正常工作的问题。3.理论上要求发送CMD58获得SD卡电压参数,但实际过程中由于事先都知道了SD卡的工作电压,因此可省略这一步简化程序。协议书上也建议尽量不要用这个命令。4.SD卡读写超时时间要按照协议说明书书上的给定值(读超时:100ms;写超时:250ms

8、),这个值要在程序中准确计算出来,否则将会出现不能正常读写数据的问题。我自己定义了一个计算公式:超时时间=(8/clk)*arg。5.2GB以内的SD卡(标准卡)和2GB以上的SD卡(大容量卡)在地址访问形式上不同,这一点尤其要注意,否则将会出现无法读写数据的问题。如标准卡在读写操作时,对读或写命令令牌当中的地址域符初值0x10,表示对第16个字节以后的地址单元进行操作(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。