本章参考资料:《IMXRT1050RM》(参考手册)以及SD简易规格文件《SDIO_Simplified_Specification_Ver3.00》和《Physical_Layer_Simplified_Specification_Ver6.00》。阅读本章内容之前,建议先阅读SD简易规格文件。
27.1. SDIO简介¶SD卡(Secure Digital MemoryCard)在我们生活中已经非常普遍了,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口。SDIO全称是安全数字输入/输出接口,多媒体卡(MMC)、SD卡、SDI/O卡都有SDIO接口。RT1052系列控制器有一个SDIO主机接口,它可以与MMC卡、SD卡、SDI/O卡以及CE-ATA设备进行数据传输。MMC卡可以说是SD卡的前身,现阶段已经用得很少。SDI/O卡本身不是用于存储的卡,它是指利用SDIO传输协议的一种外设。比如WiFiCard,它主要是提供WiFi功能,有些WiFi模块是使用串口或者SPI接口进行通信的,但WiFiSDIO Card是使用SDIO接口进行通信的。并且一般设计SDI/O卡是可以插入到SD的插槽。CE-ATA是专为轻薄笔记本硬盘设计的硬盘高速通讯接口。
多媒体卡协会网站www.mmca.org中提供了有MMCA技术委员会发布的多媒体卡系统规范。
SD卡协会网站www.sdcard.org中提供了SD存储卡和SDIO卡系统规范。
CE-ATA工作组网站www.ce-ata.org中提供了CE_ATA系统规范。
随之科技发展,SD卡容量需求越来越大,SD卡发展到现在也是有几个版本的,关于SDIO接口的设备整体概括见图27‑1。
图 27‑1 SDIO接口的设备
关于SD卡和SDI/O部分内容可以在SD协会网站获取到详细的介绍,比如各种SD卡尺寸规则、读写速度标示方法、应用扩展等等信息。
27.2. SD卡的种类及性能¶图 27‑2是市面上的SD卡、microSD卡实物图,卡上印刷了各种关于性能的标识,主要包括容量和读写性能。
图 27‑2 SD卡实物图
27.2.1. SD卡的容量种类¶参考图 27‑3,目前SD卡以容量主要可区分为三类:
SDSC卡:Standard Capacity SD Memory Card,容量小于2GB。
SDHC卡:High Capacity SD Memory Card,容量大于2GB小于32GB。
SDXC卡:Extended Capacity SD Memory Card,容量大于32GB小于2TB。
图 27‑3 SD卡容量及相应的标识
可以看到图中包含了SD卡和microSD卡的样例(俗称大卡和小卡),它们主要区别只是尺寸的差异,具体的容量、性能以印在卡上的性能规格标识为准。
27.2.2. SD卡的总线速率¶参考图 27‑4,SD卡以SDIO总线的速率可以分成如下类别:
High Speed:高速总线,传输速率上限为25MB/秒。
UHS-I:Ultra High Speed Type-I,传输速率上限为104MB/秒。
UHS-II:Ultra High Speed Type-II,传输速率上限为312MB/秒。
UHS-III:Ultra High SpeedType-III,传输速率上限为624MB/秒,这是目前最新的标准。
其中UHS-II和UHS-III标准的SD卡新增了一行使用差分信号的接口,正是由于差分信号抗干扰能力强才能达到这么高的通讯速率。RT1052的SDIO主机最高支持至UHS-I标准。
进行SD卡的读取操作可接近总线的传输速率,但由于SD卡传输时需要使用命令进行协议控制,以及SD卡准备数据时需要一点时间,所以会稍微低一些。
图 27‑4 SD卡的总线速率
27.2.3. SD卡的写入速率¶SD卡一般使用NandFlash作为存储介质,所以进行擦写操作耗时比较长,即该操作受限于写入过程而不是SDIO总线的传输速率。不同的SD卡有着不同的写入性能,SD协会把顺序写入(SequentialWrite)的速率定义成不同等级的SD卡规格,具体见图 27‑5。
图 27‑5 写入速度等级
图中的三种速率规格分别记作C、U、V,附带的数字与其写入速率对应。SD卡的写入速率等级会被标注到SD卡的标签上。
27.2.4. SD卡的应用性能等级¶随着SD卡越来越多地应用在存储应用数据的场合,如手机应用数据存储等。因此需要使用一种描述随机访问和顺序访问性能的规格等级,SD5.1协议为此定义了应用性能等级,记作A,具体见图27‑6。
图 27‑6 SD卡的应用性能等级
图中的单位IOPS是Input/Output PerSecond的缩写,即每秒进行IO操作的次数,指存储器每秒可接受多少次主机的访问,它衡量了随机访问的性能。
27.3. SD卡物理结构¶一张SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5个部分,见图27‑7。存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;电源检测单元保证SD卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;卡及接口控制单元控制SD卡的运行状态,它包括有8个寄存器;接口驱动器控制SD卡引脚的输入输出。
图 27‑7 SD卡物理结构
SD卡总共有8个寄存器,用于设定或表示SD卡信息,参考表格27‑1。这些寄存器只能通过对应的命令访问。所有对SD卡的控制操作都是通过命令来实现的,SDIO定义了64个命令,每个命令都有特殊意义,可以实现某一特定功能,SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作。
表格 27‑1 SD卡寄存器
名称
bit宽度
描述
CID
128
卡识别号(Cardidentificationnumber):用来识别的卡的个体号码(唯一的)
RCA
16
相对地址(Relativecardaddress):卡的本地系统地址,初始化时,动态地由卡建议,主机核准。
DSR
16
驱动级寄存器(DriverStageRegister):配置卡的输出驱动
CSD
128
卡的特定数据(CardSpecificData):卡的操作条件信息
SCR
64
SD配置寄存器(SDConfigurationRegister):SD卡特殊特性信息
OCR
32
操作条件寄存器(Operation
conditions register)
SSR
512
SD状态(SDStatus):SD卡专有特征的信息
CSR
32
卡状态(CardStatus):卡状态信息
每个寄存器位的含义可以参考SD简易规格文件《Physical_Layer_Simplified_Specification_Ver6.00》中的第5章内容了解。
27.4. SDIO总线¶27.4.1. 总线拓扑¶SD卡一般都支持SDIO和SPI这两种接口,本章内容只介绍SDIO接口操作方式,如果需要使用SPI操作方式可以参考SPI相关章节。另外,RT1052系列控制器的SD主机外设是不支持SPI通信模式的,如果需要用到SPI通信只能使用SPI外设。
SDIO的总线拓扑参考图27‑8,图中使用单个SDIO主机控制两张SD卡,两张SD卡共用CLK,但D0-3和CMD信号线却是独立的,这样两张SD卡需要分时访问,所以在实际应用中硬件厂商一般直接采用单个主机控制单个SDIO设备。如在RT1052控制器中有uSDHC1/2两个独立的SDIO主机,设计硬件时可以使用uSDHC1控制SD卡,uSDHC2控制SDIO接口的WiFi模块,互不干扰。
图 27‑8 SD卡总线拓扑
SD卡使用9-pin接口通信,其中3根电源线、1根时钟线、1根命令线和4根数据线,具体说明如下:
CLK:时钟线,由SDIO主机产生,即由RT1052控制器输出;
CMD:命令控制线,SDIO主机通过该线发送命令控制SD卡,如果命令要求SD卡提供应答(响应),SD卡也是通过该线传输应答信息;
D0-3:数据线,传输读写数据;SD卡可将D0拉低表示忙状态,D3可以用于SD卡的接入检测;
V:sub:`DD`、V:sub:`SS1`、V:sub:`SS2`:电源和地信号。
27.4.2. 通讯时序¶SDIO总线支持多种通讯时序,主要是速率和信号电压的差异,具体见表 27‑1。
表 27‑1 SDIO总线支持的通讯时序(不含UHS-II的通讯时序)
名称
信号电压
最高时钟频率
最高传输速率
默认速率模式
Default Speed mode
3.3V
25 MHz
12.5 MB/秒
高速模式
High Speed mode
3.3V
50MHz
25MB/秒
SDR12
UHS-I 1.8V
25 MHz
12.5 MB/秒
SDR25
UHS-I 1.8V
50MHz
25MB/秒
SDR50
UHS-I 1.8V
100MHz
50MB/秒
SDR104
UHS-I 1.8V
208MHz
104MB/秒
DDR50
UHS-I 1.8V
50MHz
50MB/秒
表 27‑1中除了最后一种DDR50是双倍速率模式外(Double DataRate),其余都是单倍速率模式(Single DataRate)。在单倍速率模式下数据信号都是在CLK时钟线的上升沿有效。
特别地,对SD卡的访问包含一个“卡识别模式”,在该模式下主机通过访问SD卡的各种寄存器了解该卡的容量、性能、操作电压等特性,在这个阶段中时钟频率最高不能超过400KHz。
通过了识别阶段后,主机可以切换至默认的25MHz时钟进行数据传输,或切换至SD卡支持的更高的通讯速率。控制支持UHS-I协议的SD卡时,主机切换成高通讯速率时还需要把通讯使用的电平标准由3.3V切换至1.8V。
27.4.3. 总线协议¶SD总线通信是基于命令和数据传输的。通讯由一个起始位(“0”),由一个停止位(“1”)终止。SD通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与。
SD总线的基本通讯是命令与响应的交互,具体见图 27‑9。
图 27‑9 命令与响应交互
SD数据是以块(Block)形式传输的,除SDSC卡外,SD的卡数据块长度固定为512字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要CRC位来保证数据传输成功,CRC位由SD卡系统硬件生成。数据传输时支持使用1线或4线传输,本开发板设计使用4线传输。图27‑10为主机向SD卡写入数据块操作示意图。
图 27‑10 多块写入操作
SD数据传输支持单块和多块读写,它们分别对应不同的操作命令,多块写入还需要使用命令来停止整个写入操作。数据写入前需要检测SD卡忙状态,因为SD卡在接收到数据后编程到存储区过程需要一定操作时间。SD卡忙状态通过把D0线拉低表示。
数据块读操作与之类似,只是无需忙状态检测。
使用4数据线传输时,每次传输4bit数据,每根数据线都必须有起始位、终止位以及CRC位,CRC位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过D0线反馈给主机。
SD卡数据包有两种格式,一种是常规数据(8bit宽),它先发低字节再发高字节,而每个字节则是先发高位再发低位,4线传输示意如图27‑11。
图 27‑11 8位宽数据包传输
4线同步发送,每根线发送一个字节的其中两个位,数据位在四线顺序排列发送,DAT3数据线发较高位,DAT0数据线发较低位。
另外一种数据包发送格式是“宽位数据包格式”,对SD卡而言宽位数据包发送方式是针对SD卡SSR(SD状态)寄存器内容发送的,SSR寄存器总共有512bit,在主机发出ACMD13命令后SD卡将SSR寄存器内容通过DAT线发送给主机。宽位数据包格式示意见图27‑12。
图 27‑12 宽位数据包传输
27.4.4. 命令¶SD命令由主机发出,以广播命令和寻址命令为例,广播命令是针对与SD主机总线连接的所有从设备发送的,寻址命令是指定某个地址设备进行命令传输。
27.4.4.1. 命令格式¶SD命令格式固定为48bit,都是通过CMD线连续传输的(数据线不参与),见图27‑13。
图 27‑13 SD命令格式
SD命令的组成如下:
起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为0,终止位为1。
传输标志:用于区分传输方向,该位为1时表示命令,方向为主机传输到SD卡,该位为0时表示响应,方向为SD卡传输到主机。
命令主体内容包括命令、地址信息/参数和CRC校验三个部分。
命令号:它固定占用6bit,所以总共有64个命令(代号:CMD0~CMD63),每个命令都有特定的用途,部分命令不适用于SD卡操作,只是专门用于MMC卡或者SDI/O卡。
地址/参数:每个命令有32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这32bit用于指定参数,而寻址命令这32bit用于指定目标SD卡的地址。
CRC7校验:长度为7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令。
27.4.4.2. 命令类型¶SD命令有4种类型:
无响应广播命令(bc),发送到所有卡,不返回任务响应;
带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;
寻址命令(ac),发送到选定卡,DAT线无数据传输;
寻址数据传输命令(adtc),发送到选定卡,DAT线有数据传输。
另外,SD卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了两种类型的通用命令:特定应用命令(ACMD)和常规命令(GEN_CMD)。要使用SD卡制造商特定的ACMD命令如ACMD6,需要在发送该命令之前先发送CMD55命令,告知SD卡接下来的命令为特定应用命令。CMD55命令只对紧接的第一个命令有效,SD卡如果检测到CMD55之后的第一条命令为ACMD则执行其特定应用功能,如果检测发现不是ACMD命令,则执行标准命令。
27.4.4.3. 命令描述¶SD卡系统的命令被分为多个类,每个类支持一种“卡的功能设置”。表27‑2举了SD卡部分命令信息,