广告

SDHC或SD2.0卡的驱动程序的注意事项《转》1

2013-1-11 14:06 2086 0 分类: MCU/ 嵌入式

 

首先对SD卡有一个感性认识:
SD卡的技术是基于MultiMedia卡(MMC)格式上发展而来,大小和MMC差不多,尺寸为32mm x 24mm x 2.1mm。SD卡与MMC卡保持着向上兼容。
内部结构: SD卡内部主要分两部分:存储介质(nandflash)和主控制器。主控制器多位以51为核心设计的专用处理器,内部PLL可以倍频到近100m,带内部DMA,最主要的是SD控制器和NAND控制器。而作为存储介质的nandflash从1Gbit到128Gbit。 
分类:
MMC卡:结构类似SD卡,采用MMC协议。 
SD1.0: SD1.0卡最大支持2Gbyte。 
SD2.0: SD2.0卡最大容量HCSD可达32Gbyte。从MMC到SD1.0再到SD2.0协议是向上兼容的。也就是说SD2.0可以兼容SD1.0协议,SD1.0可以兼容MMC卡协议。即MMC协议的指令可以操作SD1.0,Sd2.0,同理SD1.0协议的命令可以操作sd2.0卡。这就是我们平时看到初始化SD卡的时候只需要CMD0和CMD1两条命令就可以让上面上类卡进入传输状态的原因:MMC卡协议初始化只定义了CMD0和CMD1。
SD卡接口: SD卡接口支持SPI模式和SD模式。SD模式下采用4线并行模式,作为多媒体存储设备为提高传输速度都会采用这种接口。而SPI更方便低端MCU访问传输速度有限。
硬件引脚封装:如图所示:

SDHC或SD2.0卡的驱动程序的注意事项《转》 - 张运生 - 张运生的博客

 


共九个脚,定义如下:

SDHC或SD2.0卡的驱动程序的注意事项《转》 - 张运生 - 张运生的博客

 


我们的板子上用跳线选择了SD模式和SPI模式的连线,用SPI将中间四根线用跳线连接即可。注意我们板子的SPI用的是SPI2来操作SD卡的。
有了感性的认识后,我们来了解一下SD卡协议命令的格式,MMC卡只有基本命令,即CMD0-CMD38,当然这中间不是连续,请大家看协议的命令表吧,SD卡有基本命令和特定命令,特定命令必须跟在基本命令CMD55后面,即要想用特定命令,必须先发一条CMD55通知SD卡,然后才能发送特定的命令。每条命令由6BYTE组成,分三部分,1字节为操作码,2-5字节为参数,有的命令没有参数,那就填0,有参数的根据参数说明而定,最后一字节为CRC校验,不过SPI模式不需要CRC校验,故可以任意填写,不过有几个特殊命令有指定的CRC校验码,必须加上。每条命令都有响应,根据命令的不同可能有R1,R1B,R2,R3(OCR)寄存器响应,通过它们判断命令是否操作成功。
对命令有了解后,只要知道各个操作的过程就可以操作SD卡了,主要操作有初始化,读、写、擦除等,下面分别介绍:
1、
初始化步骤:
(1)     
延时至少74clock,等待SD卡内部操作完成,在MMC协议中有明确说明。
(2)CS低电平选中SD卡。
(3)
发送CMD0,需要返回0x01,进入Idle状态
(4)为了区别SD卡是2.0还是1.0,或是MMC卡,这里根据协议向上兼容的原理,首先发送只有SD2.0才有的命令CMD8,如果CMD8返回无错误,则初步判断为2.0卡,进一步发送命令循环发送CMD55+ACMD41,直到返回0x00,确定SD2.0卡初始化成功,进入Ready状态,再发送CMD58命令来判断是HCSD还是SCSD,到此SD2.0卡初始化成功。如果CMD8返回错误则进一步判断为1.0卡还是MMC卡,循环发送CMD55+ACMD41,返回无错误,则为SD1.0卡,到此SD1.0卡初始成功,如果在一定的循环次数下,返回为错误,则进一步发送CMD1进行初始化,如果返回无错误,则确定为MMC卡,如果在一定的次数下,返回为错误,则不能识别该卡,初始结束。
(5)CS拉高。
2、
步骤:
(1)     
发送CMD17(单块)或CMD18(多块)读命令,返回0x00
(2)
     
接收数据开始令牌0xfe(或0xfc+正式数据512Bytes + CRC校验2Bytes
默认正式传输的数据长度是512Bytes,可用CMD16设置块长度。
3、
步骤:
(1)     
发送CMD24(单块)或CMD25(多块)写命令,返回0x00
(2)
     
发送数据开始令牌0xfe(或0xfc+正式数据512Bytes + CRC校验2Bytes
4、

擦除步骤:
(1)     
发送CMD32,跟一个参数来指定首个要擦除的起始地址(SD手册上说是块号)
(2)     
发送CMD33,,指定最后的地址
(3)     
发送CMD38,擦除指定区间的内容
3步顺序不能颠倒。
最后说一下我的一点体会:SD卡就是一个存储器,只不过用命令的方式来进行操作,我们只要掌握了各条命令及操作方式,就可以灵活的操作SD卡了,另外我所了解的IC卡也是类似的原理,还有就是建议开始看MMC的协议,简单明了易懂些,有了对MMC卡的一些了解后看SD卡协议就容易多了。本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cuitianxiang/archive/2010/04/19/5503173.aspx 

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
sunyzz 2017-08-19 10:38
【博客大赛】AVALON总线介绍
1、AVALON总线简介Avalon总线是一种协议较为简单的片内总线,是ALTERA公司定义的片上互联总线,该总线可以将诸如NIOS II的CPU与其他外设连接起来,进而进行数据交换。AVALON总线...
sunyzz 2017-08-17 21:36
【博客大赛】不要轻易做职场滥好人
小A毕业于国内普通高校,但是他聪明,勤奋,能干,动手能力强,可是即便有这些优点也不能让小A轻轻松松找到一份好工作。这不,去年9月份小A好不容易找到一份工作,然后立马就入职了C公司,生怕C公司过两天不要...
sunyzz 2017-08-16 21:15
【博客大赛】IC设计低功耗技术四
五:工艺层面的降低功耗前面几节都是在讨论设计人员如何在前期阶段,中期阶段降低功耗,涉及到软件层面的,硬件层面的,这些技巧基本都是前辈总结出来的,或者根据理论推论出来的。但是到了后期,想降低功耗基本就要...
sunyzz 2017-08-14 22:35
【博客大赛】IC设计之低功耗技术三
四:RTL(寄存器传输)级的低功耗设计4.1 状态机的设计状态机编码中一般有两种方式,普通的二进制编码,特殊的格雷码,格雷码的特点是两个数据之间的跳变时只会有一个bit在toggle,显然比起多bit...
sunyzz 2017-08-12 16:51
【博客大赛】IC设计之低功耗技术二
三、架构层面的降低功耗系统的实现有很多的方式,每种方式对功耗的影响都不相同,本节主要介绍架构对功耗的影响。3.1 高级门口电路 在同步电路系统中,时钟占据了大部分的动态功耗,因而在一些情况下,如果有些...
sunyzz 2017-08-12 10:37
【博客大赛】IC 设计之低功耗技术一
一、前言随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛。节能是全球化的热潮,如计算机里的许多芯片过去用5V供电,现在用3.3V,1.8V,甚至更低的电压。目前的低功耗设计主要从芯片...
我要评论
0
0
广告