本文主要介绍SDIO接口及SDIO存储卡的相关特性。
1、SDIO接口
SDIO接口不只用于存储数据的SD存储卡,还有SD I/O卡,MMC卡。其中SD I/O卡与SD存储卡是有区别的,SD I/O卡实际上就是利用SDIO接口的一些模块,插入SD的插槽中,扩展设备的功能,如:SDI/O Wi-Fi,SDI/O CMOS相机等。
SD规范包括如下几部分:
物理层规范
文件系统规范
SD卡安全规范
SD卡音频应用规范+其他相关应用规范
SD MC扩展规范、移动设备
SDIO卡规范
由于SDIO可支持各种设备,所以对SDIO接口进行初始化后,上电后就要对它接入的卡进行识别、分类,这个过程是主机向卡发送一系列不同的命令,根据卡不同的响应来进行分类。
SDIO接口包含CLK、CMD及4条DAT[3:0]信号线。这6条信号线都是共用的总线,即新加入的设备可以并联接入到SDIO接口。SDIO主机是通过命令和SD从设备的响应来寻址的,所以不需要片选信号线。
CLK是卡的时钟信号线,由主机产生时钟信号,SD卡和SDIO卡的时钟频率可为0~25MHz。在命令和数据线上,每个时钟周期传输1位命令或数据。
CMD为命令信号线,SDIO的所有由主机发出的命令及从机对命令的响应,都是在这个信号线上传输的。
DAT[3:0]表示4条数据线,主机和从机的数据信号在这4条线上传输。
SD卡可以通过单数据线(DATA0)或四根数据线(DATA[3:0])进行数据传输。单根数据线传输的最大速率为25Mbit/s,四根数据线传输的最大速率为100Mbit/s。
SD存储卡有如下一些版本和类别:
版本 | 最大时钟速率MHz |
1.0 | 25 |
1.1 | 50 |
2.0 | 50 |
卡类型 | 容量 |
标准容量卡(SDSC) | 最大容量为2GB |
高容量卡(SDHC) | 容量为2~32GB |
扩展容量卡(SDXC) | 容量为32GB~2TB |
四线速度模式分为以下几种:
Default Speed Mode: 3.3V signaling, Frequency up to 25MHz, up to12.5MB/sec;
High Speed Mode: 3.3V signaling, Frequency up to 50MHz, up to25MB/sec;
SDR12: 1.8V signaling, Frequency up to 25MHz, up to 12.5MB/sec;
SDR25: 1.8V signaling, Frequency up to 50MHz, up to 25MB/sec;
SDR50: 1.8V signaling, Frequency up to 100MHz, up to 50MB/sec;
SDR104: 1.8V signaling, Frequency up to 208MHz, up to 104MB/sec;
DDR50: 1.8V signaling, Frequency up to 50MHz, sampled on both clock edges, upto 50MB/sec;
SD存储卡传输速度分类如下:
class-0:这类卡片不指定性能
class-2:不低于2MB/s
class-4:不低于4MB/s
class-6:不低于6MB/s
class-10:不低于10MB/s
★注:大容量和超大容量SD存储卡至少应该为class-2
★注:DDR50 is mandatory for microSDform factor and optional for Standard size SD form factor.
引脚号 | SD 4-bit模式 | SD 1-bit模式 | SPI模式 | ||||
名称 | 类型 | 描述 | 名称 | 名称 | 类型 | 描述 | |
1 | CD/DAT3 | I/O/PP | 卡检测/数据线3 | NC | CS | I | 片选 |
2 | CMD | I/O/PP | 指令/响应 | CMD | DI | I | 数据输入 |
3 | VSS1[长脚] | S | 地 | VSS1 | VSS | S | 地 |
4 | VDD[长脚] | S | 电源 | VDD | VDD | S | 电源 |
5 | CLK | I | 时钟 | CLK | SCLK | I | 时钟 |
6 | VSS2 | S | 地 | VSS2 | VSS2 | S | 地 |
7 | DAT0 | I/O/PP | 数据线0 | DAT | DO | O/PP | 数据输出 |
8 | DAT1 | I/O/PP | 数据线1 | IRQ(中断) | Reserved | ||
9 | DAT2 | I/O/PP | 数据线2 | RW(Read Wait) | Reserved |
TF卡(TransFlash)是Motorola与SanDisk共同推出的记忆卡规格,它采用最新的封装技术,并配合SanDisk最新的NAND MLC技术和控制器技术。大小为11x15x1mm,TransFlash Card附有SD转接器,可兼容任何SD读卡器。TF卡是市面上最小的闪存卡,TF卡产品采用SD架构设计而成,SD协会于2004年底正式将其更名为Micro SD卡。
引脚号 | SD模式 | SPI模式 | ||||
名称 | 类型 | 描述 | 名称 | 类型 | 描述 | |
1 | DAT2 | I/O/PP | 数据线2 | Reserved | ||
2 | CD/DAT3 | I/O/PP | 卡检测/数据线3 | CS | I | 片选 |
3 | CMD | PP | 指令/响应 | DI | I | 数据输入 |
4[长脚] | VDD | S | 电源 | VDD | S | 电源 |
5 | CLK | I | 时钟 | SCLK | I | 时钟 |
6[长脚] | VSS | S | 地 | VSS2 | S | 地 |
7 | DAT0 | I/O/PP | 数据线0 | DO | O/PP | 数据输出 |
8 | DAT1 | I/O/PP | 数据线1 | Reserved |
2.2.3、MiniSD卡引脚定义
引脚号 | SD模式 | SPI模式 | ||||
名称 | 类型 | 描述 | 名称 | 类型 | 描述 | |
1 | CD/DAT3 | I/O/PP | 卡检测/数据线3 | CS | I | 片选 |
2 | CMD | I/O/PP | 指令/响应 | DI | I | 数据输入 |
3 | VSS1 | S | 地 | VSS | S | 地 |
4 | VDD | S | 电源 | VDD | S | 电源 |
5 | CLK | I | 时钟 | SCLK | I | 时钟 |
6 | VSS2 | S | 地 | VSS2 | S | 地 |
7 | DAT0 | I/O/PP | 数据线0 | DO | O/PP | 数据输出 |
8 | DAT1 | I/O/PP | 数据线1 | Reserved | ||
9 | DAT2 | I/O/PP | 数据线2 | Reserved | ||
10 | NC | |||||
11 | NC |
★注:SD1-bit模式和SPI模式的区别:
SPI总线是一个通用总线,大部份芯片都用硬件模块;
SPI模式支持不带CRC校验的传输方式,可以降低硬件要求;
SD的CMD线与DATA线之间有可能同时产生数据,对没有SD硬件模块的主机支持起来难度较高。
Pin # | Name | Type | Description |
4 | VDD1 | Supply voltage | 2.7V to 3.6V |
7 | RCLK+ | Differential Signaling: Input | Clock Input |
8 | RCLK- | Differential Signaling: Input | Clock Input |
10 | VSS3 | Ground | |
11 | D0+ | Differential Signaling: Input (FD) / Bidirectional (HD) | Input in default |
12 | D0- | Differential Signaling: Input (FD) / Bidirectional (HD) | Input in default |
13 | VSS4 | Ground | |
14 | VDD2 | Supply Voltage 2 | 1.70V to 1.95V |
15 | D1- | Differential Signaling: Output (FD) / Bidirectional (HD) | Output in default |
16 | D1+ | Differential Signaling: Output (FD) / Bidirectional (HD) | Output in default |
17 | VSS5 | Ground |
SD bus contacts 7 and 8 Pins are used for RCLK. Thefirst row contacts in non UHS-II mode are equivalent to SD Memory Card PadAssignment.
UHS-II Card shall not drive unused lines of SD I/Fin UHS-II mode. (CLK, CMD and DAT[3:2]. DAT[2] may be used as interrupt line in case ofUHS-II SDIO Card. In this case, card controls DAT[2] level.) Host shall notleave these unused lines floating, but keep them at a defined high or lowlevel. How to keep line level is dependent on host implementation. For example,use pull-up resistor or host drives the lines to low level without providingpull-up voltage. As DAT[1:0] are used for providing RCLK, individual linecontrol is required to use pull-up method for CMD and DAT[3:2]. CLK (withoutpull-up resistor) should be driven to low.
In case ofentering hibernate mode, unused lines shall be set to low before turning offVDD1.
SD卡总线协议包括如下三种:
SD Bus Protocol
SPI Bus Protocol
UHS-II Bus Protocol
Card State | Operation mode |
Inactive | Inactive |
Idle State | Card Identification Mode |
Ready State | |
Identification State | |
Stand-by State | Data Transfer Mode |
Transfer State | |
Sending-data State | |
Receive-data State | |
Programming State | |
Disconnect State |
SD模式状态图如下图所示:
SPI模式状态图如下图所示:
SDIO的所有命令及命令响应,都是通过SDIO-CMD引脚来传输的。且命令只能由HOST发出。
SDIO协议规定了非常多的命令,把这些命令分类别来整理,都有11种之多,包括基本命令、块读取命令、块写入命令、写保护命令、擦除命令、卡上锁命令、应用指定命令、I/O模式命令、功能选择命令及特殊的应用命令ACMD。其中,在使用ACMD命令前,要先向卡发送编号为CMD55的应用指定命令。
所有的命令长度都固定为48bits,传输速率为1.92us@25MHz或者0.96us@25MHz。一个命令包含了6个段,分别为start bit,transmission bit,command index段、argument段、crc7段和end bit,其中除了command index段和argument段是需要在软件配置的时候设置的,其它段都由硬件完成。command index就是命令索引(SD协议规定的命令编码),如命令CMD0,CMD1…的编码为0,1...。有的命令会包含参数,如读命令的参数为要读取数据的地址,这些命令参数被存放在argument段。
SD存储卡的指令和响应格式如下表所示:
Command | Bit Position | 47 | 46 | [45:40] | [39:8] | [7:1] | 0 |
Width(bits) | 1 | 1 | 6 | 32 | 7 | 1 | |
Value | 0 | 1(Host Command) | x | x | x | 1 | |
Description | Start bit | Transmission bit | Command index | Argument | CRC7 | End bit | |
Response R1、R3、R6 | Bit Position | 47 | 46 | [45:40] | [39:8] | [7:1] | 0 |
Width(bits) | 1 | 1 | 6 | 32 | 7 | 1 | |
Value | 0 | 0(Card Response) | x | x | x | 1 | |
Description | Start bit | Transmission bit | Command index | Card status | CRC7 | End bit | |
Response R2 | Bit Position | 135 | 134 | [133:128] | [127:1] | 0 | |
Width(bits) | 1 | 1 | 6 | 127 | 1 | ||
Value | 0 | 0(Card Response) | 111111 | x | 1 | ||
Description | Start bit | Transmission bit | Reserved | CID or CSD register incl. internal CRC7 | End bit |
SD卡对主机的各种命令回复称为响应,除了CMD0命令外,SD卡在接收到命令都会返回一个响应。对于不同的命令,会有不同的响应格式,一共有7种,简称R1~R7(SD存储卡不支持R4、R5,SDIO卡支持7种)。按响应的字节长度又分为长响应型(136bit)和短响应型(48bit)。
当需要知道RCA和卡状态时,可以向卡发送CMD3命令,然后等待SD卡对命令的响应。SDIO接口通过CMD信号线接收到响应后,由硬件去除响应的头尾信息,把command index保存到SDIO_RESPCMD寄存器,把Argument field内容保存存储到SDIO_RESPx寄存器中。然后软件读取这两个寄存器即可获得所需的信息。
SD卡的数据写入、读取的最小单位是块,每块的大小为512字节。首先软件通过SDIO接口的CMD信号线发送多块写入的命令,接收到正常的响应后,要写入的数据线从4根DAT信号线传输出去,每块结束后是CRC校验码。接着要检测忙状态,数据传输到SD卡后,SD卡启动内部时序保存数据,这时SD卡会把DAT0信号线拉低,表示处于“忙”状态,忙状态结束后,主机才能发送下一个数据块的数据。
SD卡有两种数据包格式:
Usualdata (8-bit width): Theusual data (8-bit width) are sent in LSB (Least Significant Byte) first,MSB (Most Significant Byte) last sequence. But in the individual byte, it is MSB (Most Significant Bit)first, LSB (Least Significant Bit) last.
★注:在字节之间,先传输低字节后传输高字节;在字节内部,先传输高位后传输低位。
Widewidth data (SD Memory Register): The wide width data is shifted from the MSBbit.
★注:以块(512bit)为单位发送,先传输最高位后传输低位。
名称 | 带宽 | 描述 |
CID卡标识寄存器 | 128 | 卡的ID号,用来区分每张卡:产品序列、生产日期。强制 |
RCA卡地址 | 16 | 卡的本地系统地址,在设定初值期间由卡动态产生并被主机核准。强制 |
DSR驱动层寄存器 | 16 | 配置卡的输出驱动。可选 |
CSD卡特性寄存器 | 128 | 卡的特殊数据,标识卡的操作条件。强制 |
SCR卡配置寄存器 | 64 | 标识SD存储卡的特别特征:支持协议、支持总线宽度。强制 |
OCR操作寄存器 | 32 | 操作条件寄存器:电压值、上电状态。强制 |
SSR | 512 | |
CSR | 32 |
★注:RCA寄存器在SPI模式时不可用。
2.7.1、OCR寄存器
OCR(操作条件寄存器)中存储了卡片的电压信息以及部分状态信息:其中一个状态位(bit 31)指示卡片的上电操作是否完成,另外一个状态位(bit 30)指示卡片的容量状态(0代表SDSC、1代表SDHC或者SDXC)。寄存器的说明如下图所示:
2.7.2、CID寄存器
CID(卡标识寄存器)总共128 bits,包含了卡片的识别信息,每个独立的卡片都应该有一组独一无二的识别信息。寄存器说明如下图所示:
2.7.3、CSD寄存器
CSD(卡特性寄存器)也是128 bits,提供了访问卡片内容的一些信息如:传输速率、数据格式、错误类型、最大是数据访问时间、DSR寄存器是否启用的。其中bit[126:127]记录了CSD的版本号,CSD Version1.0为标准容量卡所用,CSD Version 2.0为大容量或超大容量卡所用。CSD Version 1.0寄存器说明如下图所示:
2.7.4、SCR寄存器
SCR(卡配置寄存器)总共64 bits,定义了卡片的一些特殊功能,寄存器说明如下图所示:
2.7.5、CSR寄存器
CSR(卡片状态寄存器)总共32 bits,代表了执行一个命令的错误和状态信息,其信息包含在R1格式的应答中返回给主机,寄存器说明如下图所示:
2.7.6、SSR寄存器
SD Status 寄存器包含了SD存储卡的的专有属性并为以后的功能扩展保留了足够的空间,其大小为512 bits即一个块大小,这个寄存器作为ACMD13命令的执行结果,通过DATA线发送到主机,寄存器说明如下图所示:
SDIO卡在SD内存卡基础上发展起来,SDIO接口兼容之前的SD内存卡,可连接SDIO设备,根据SDIO协议,支持设备包括蓝牙,GPS卡,网卡,电视卡等。
SDIO协议是SD协议的一个子协议,很多地方保留SD卡协议,在这基础上增加了CMD52和CMD53命令。SDIO与SD的一个重要区别是,增加了低速标准。
SDIO设备分类如下:
引脚号 | SD 4-bit模式 | SD 1-bit模式 | SPI模式 | ||||
名称 | 类型 | 描述 | 名称 | 名称 | 类型 | 描述 | |
1 | CD/DAT3 | I/O/PP | 卡检测/数据线3 | NC | CS | I | 片选 |
2 | CMD | I/O/PP | 指令/响应 | CMD | DI | I | 数据输入 |
3 | VSS1 | S | 地 | VSS1 | VSS | S | 地 |
4 | VDD | S | 电源 | VDD | VDD | S | 电源 |
5 | CLK | I | 时钟 | CLK | SCLK | I | 时钟 |
6 | VSS2 | S | 地 | VSS2 | VSS2 | S | 地 |
7 | DAT0 | I/O/PP | 数据线0 | DAT | DO | O/PP | 数据输出 |
8 | DAT1 | I/O/PP | 数据线1 | IRQ(中断) | IRQ | ||
9 | DAT2 | I/O/PP | 数据线2 | RW(Read Wait) | Reserved | ||
10 | NC | NC | NC | ||||
11 | NC | NC | NC |
★注:NC仅在miniSDIO卡中使用。