【科普贴】SD卡接口协议详解

一、 SD卡简介

SD卡是Secure Digital Card,直译就是“安全数字卡”,最早由松下(Panasonic)闪迪(SanDisk)东芝(Toshiba)三家公司发起。后形成SD卡协会。
按照当前市面上的物理规格来划分,常见的SD卡可以分为三种。
1)标准的SD卡,这种卡比较大,尺寸为32X24X2.1mm。相当于邮票大小,多用于数码相机、笔记本电脑等存储
2)Mini SD卡,这个卡很少用,尺寸为20X21.5X1.4mm。这里不做过多累述。
3)Micro SD卡,这个卡原名为TF卡(Trans-flash Card),最早由闪迪(SanDisk)发明,后被SD协会采用,2004年改名为Micro SD。尺寸为15X11X1mm。
三种卡中,第三类应用最为广泛,下文中描述,除非特意说明,描述SD卡皆为第三种卡的描述,偶尔使用TF卡的描述也为第三类卡的描述。

二、 SD卡上标识

【科普贴】SD卡接口协议详解_第1张图片

1、Capacity of Memory(存储容量)

SD卡按照存储容量分类,可以分为标准容量卡、高容量卡、扩展容量卡。 【科普贴】SD卡接口协议详解_第2张图片
如上图可以看到16G的SD卡上印有“SDHC”字样,64G的SD卡上“SDXC”字样。

2、Speed Class(速率等级)

按照速率等级,SD卡分为5个速率等级。
1) Class 0 :这个卡不做性能要求,它包含这个标准之前所有的卡,不管它的性能如何
2) Class 2 :读写性能大于或等于2MB/sec
3) Class 4 :读写性能大于或等于4MB/sec
4) Class 6 :读写性能大于或等于6MB/sec
5) Class 10 :读写性能大于或等于10MB/sec
如上图,SD看上印有“⑩”说明这个卡的读写速率要大于10MB/sec的要求。高容量卡和扩展容量卡,需要支持读写速率大于或等于Class 2的标准。
NOTE:性能单位[MB/sec]为1000x1000[Byte/sec],数据大小单位[MB]为1024x1024[字节]。这是因为最大的SD总线速度是由最大的SD时钟频率指定的(25 [MB/sec]= 25000000[Byte/sec]在50 MHz)和数据大小是基于在存储边界。

3、Bus Speed Mode(总线速率模式)

SD卡按总线模式来分,分为以下7种
【科普贴】SD卡接口协议详解_第3张图片

【科普贴】SD卡接口协议详解_第4张图片

1) 上图中SD卡图片上“I”表示支持USH-I(Ultra High Speed)的功能。USH-I表示的是可达最高104MB/sec的速度,注意不是实际的读写速度。可能是偶尔达到。
2) 上图中SD卡图片上“在这里插入图片描述 ”是UHS Speed Class,当前主要以U1、U3两种为主 U1代表该存储卡最低(持续)写入速度为10MB/s, U3则代表最低(持续)写入速度可达30MB/s;
3) SDR(Single Data Rate)数据单沿采样,即一个Clock周期内只采样一次,SD有四条数据线。所以一个周期内只传输4bit数据。所以50MHz的频率1S只能传输25MB的数据。
4) DDR(Double Data Rate)数据双沿采样,即一个Clock周期内,上升沿和下降沿都采样一次,SD卡四条数据线。一个周期内传输8bit数据。所以50MHz的频率1S可以传输50MB的数据。
5) USH-I模式向下兼容。即支持USH-I模式需要兼容低速率模式的USH-I,比如SD卡支持SDR104mode,则这个卡必然支持SDR50、SDR25等以下模式。

4、 APP Performance(APP性能)

上图中SD卡图片上“ 在这里插入图片描述”是针对手机专用存储卡制定的性能标准,即希望将APP安装在SD卡上,目前包括APP Performance A1和APP Performance A2,它们的最低(持续)写入速度都是10MB/s,但其中A1标准的随机读写性能要求分别是1500IOPS和5001OPS(每秒进行读写操作的次数,次数越大,操作越快)以上,而A2标准则大幅度提高到了40001OPS和2000IOPS; A认证的标准是平稳的读写速度。

三、 SD卡通讯机制

1、 Card Identification Mode(卡识别模式)

1) 主机和卡在通讯之前,主机也不知道卡支持的工作电压范围,卡也不知道是否可以支持主机提供的电压,主机会以默认电压发送一个CMD0,并且主机默认卡支持该命令。上电或CMD0后,所有SD卡的CMD线设置成input 模式,等待下一条命令。同时会初始化card的默认地址(RCA0X0000)和默认驱动强度改成400KHz。让SD卡处于idle状态(不论之前卡是处于inactive state还是其他状态),这时主机和卡都处在3.3V的信号(signaling)电压。
2) 如果在发送的CMD0时,CS(和DAT3复用)又被拉低,这个时候进入SPI模式,如果进入SPI状态需要重新上电才可以解除,这种模式使用较少,这里不做累述。详细可以SD卡通讯协议。
3) 为了确定SD卡接口的操作标准,主机会发送CMD8命令。CMD8信号中包含SD卡的工作电压范围信息。SD卡收到CMD8命令后,通过分析CMD8命令里包含的电压信号工作范围信息,如果SD卡可以工作在这个工作电压范围内,SD卡会response的命令中包含提供的电压参数,如果不可以工作在这个电压范围内,则不会做出响应,这是主机还处在idle状态。
4) ACMD41的命令是来识别不匹配主机供电电压的卡。如果SD卡在主机提供的供电电压范围内不能实现数据传输,SD卡将进入inactive状态。主机在发送ACMD41时,可以将命令中的OCR参数设置成0,用来查询SD卡所支持的工作范围。主机查询到SD卡的工作电压后,可以作为下次发送ACMD41命令的参数。
【科普贴】SD卡接口协议详解_第5张图片

2、 Card Initialization and Identification Process(卡的初始化和识别过程)

1)当总线被激合后,主机就开始处理SD卡的初始化和识别。在主机发ACMD41命令开始处理SD卡初始化时,主机会在ACMD41的参数中设置它的操作条件和设置OCR中的HCS位。HCS位被设置为1表示主机支持SDHC或者SDXC。HCS被设置为0表示主机不支持SDHC和SDXC。
2)SD卡利用OCR里面的busy位来通知主机ACMD41的初始化已经完成。如果busy位为0,表示SD卡还在初始化,如果busy位为1,说明初始化已经完成。主机会在1s的时间内,重复不断地发送ACMD41命令,直到busy位被置1为止。卡只有在第一次收到设置电压的ACMD41命令时,才会去检查操作条件和OCR中的HCS位。并且在重复发送ACMD41命令的这段时间里,主机不应该发送任何命令,除了CMD0。
3)如果SD卡能正确响应CMD8之后,SD卡对ACMD41命令的响应会包含一个CCS字段,CCS在卡返回ready时(busy位置1)有效。CCS=0表示SD卡是SDSC,CCS=1表示SD卡是SDHC或者SDXC。
4)在ACMD41之后,主机会发送CMD2,获取卡的CID。在卡发送它的CID之后,卡进入识别状态(identification State) 。
5)接着,主机发送CMD3,请求SD卡发布SD卡的RCA。RCA是一个比CID短的,并且将来在数据传输模式中使
用的地址。

【科普贴】SD卡接口协议详解_第6张图片

3、Data Transfer Mode(数据传输模式)

因为SD卡在识别模式(Identification Mode)下,对操作频率有限制,所以在识别模式结束前,主机的频率需要一直保持在fOD(400KHz)。在数据传输模式(Data Transfer Mode) ,主机频率在fpp(可根据实际卡USH状况)范围内是可执行的。
主机必须发送CMD9来获得卡规格数据寄存器(CSD)内容,获取像块大小、卡容量这类信息。
CMD4广播命令配置所有识别到的卡的驱动阶段。它对DSR寄存器进行编程以适应应用的总线布局(长度)、总线上卡的数目和数据传输频率。clock rate也是在这个时候从fOD切到fpp。
CMD7用于选择卡,并且将卡带入传输状态(Transfer State)。在同一个时间内,只有一张卡能进入传输状态。当发送的CMD7的RCA地址参数为"0x0000",所有卡将跳回到准备状态(Stand-by State ) 。
对已经拥有RCA的卡来说,对它发送identification commands(比如ACMD41、CMD2),它将不会有任何回应。在数据传输模式下,主机与被选中的卡(使用定向命令)之间的数据传输都是点对点的。通过CMD线,所有定向命令(addressed commands)都会收到一个用于确认的response。
在任何时候,所有的读命令集在执行过程中都可以被stop command (CMD12)打断。cmd12命令将会使数据传输终止,并且使卡退回到传输状态(Transfer State)。读命令集包括: block read(CMD17), multiple block read(CMD18), send write protect(CMD30), send SCR(ACMD51)和 general command in read mode (CMD56)。
在任何时候,所有的写命令集在执行过程中都可以被stop command (CMD12)打断。写命令集包括: block write(CMD24 andCMD25), program CSD(CMD27), lock/unlock command(CMD42)和general command in write mode(CMD56)。
一旦数据传输完成.卡就会退出数据写状态,并且进入正在编程状态(Programming State)(传输成功),或者进入传输状态(传输失败)。
如果一个块写操作被打断,但是最后一个block的块长度和CRC有效的话,这块数据也将会被编程到卡里。
卡也许会对块写操作提供缓存,这意味着,在一个block还在被编程的情况下,下一个block可以被发送这个卡里面。如果所有的写缓存都已经满了的话,只要卡还在正在编程状态,DATO线就会―直保持在拉低状态。
对写CSD、写保护和擦除操作来说,卡不会提供缓存。这意味着,在卡正忙于处理这其中任何一个命令时,卡不会接收任何发送到卡的数据。只要卡还在忙,DATO线就会拉低,并且处于正在编程状态(Programming State)。
当卡正在编程时,不允许任何一个参数设置命令集((Parameter set commands)。参数设置命令集包括: set blocklength(CMD16), erase block start(CMD32)和erase block end(CMD33)。
当卡正在编程时,不允许任何一个读命令集。
当将其他的卡从准备状态(Stand-by)切换到传输状态(使用CMD7),不会中断当前卡的擦除或者编程操作。当前卡将会切换到断开状态(Disconnect State) ,并且释放数据线。
当卡正在编程或者待编程时,对其重置(发送CMDO或者CMD15),将会导致操作终止,并且可能会导致卡内的数据内容被破坏。因此主机有责任去禁止这样的操作。
【科普贴】SD卡接口协议详解_第7张图片

四、 电气特性(Timing 时序)

由上文可以知道SD卡由不同的工作电压,不同的工作速率,CLK的频率和采样方式也不尽相同,所以就导致SD卡有多样的时序和要求。在实际的调试过程中,我们常常要通过Timing时序来定位问题。接下来将会详细介绍各个时序的要求。

1、 信号电平的判定标准

【科普贴】SD卡接口协议详解_第8张图片
在这里插入图片描述
【科普贴】SD卡接口协议详解_第9张图片

2、Default Speed Timing(3.3V signaling)

【科普贴】SD卡接口协议详解_第10张图片
【科普贴】SD卡接口协议详解_第11张图片
【科普贴】SD卡接口协议详解_第12张图片

3、 High-Speed Mode Timing(3.3V signaling)

【科普贴】SD卡接口协议详解_第13张图片
【科普贴】SD卡接口协议详解_第14张图片
【科普贴】SD卡接口协议详解_第15张图片

4、 SDR12、SDR25、SDR50、SDR104 Mode Timing(1.8V signaling)

【科普贴】SD卡接口协议详解_第16张图片
【科普贴】SD卡接口协议详解_第17张图片

【科普贴】SD卡接口协议详解_第18张图片
【科普贴】SD卡接口协议详解_第19张图片

5、 DDR50 Mode Timing(1.8V signaling)

【科普贴】SD卡接口协议详解_第20张图片

【科普贴】SD卡接口协议详解_第21张图片
【科普贴】SD卡接口协议详解_第22张图片

你可能感兴趣的:(通讯协议,硬件架构)