本文参考文档:
《SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00》
1 SD卡简介
1.1 SD卡概念
1.2 SD卡外形和接口
Clk:时钟线,由SDIO主机产生
CMD:命令控制线,SDIO主机通过改线发送命令控制SD卡,如果命令要求SD卡提供应答,SD卡也是通过该线传输应答信息。
DAT0-3:数据线,SD卡可将DAT0拉低表示忙状态,上电后,SD 卡默认只使用 DAT0 来传输数据。初始化之后,主机可以改变总线宽度(使用的数据线数目)。
SD卡和MMC卡接口引脚对比:
1.3 SD卡特点
2 SD 2.0特点
下面基于SD 2.0协议,对SD 2.0主要特点进行概述:
● 存储容量:
标准容量 SD 卡(SDSC):最高达到 2GB
高容量 SD 卡(SDHC):大于 2GB(SD2.0版本规格最高 32GB)
● 电压范围:
高电压 SD 卡-工作电压范围:2.7 -3.6V
双电压 SD 卡-工作电压范围:低电范围(待定) 和 2.7-3.6V
● 工作模式:
默认模式:可变时钟频率 0-25MHz,最高12.5MB/s 的接口速度(使用 4 条并行数据线)
高速模式:可变时钟频率 0-50MHz,最高25MB/s 的接口速度(使用 4 条并行数据线)
● 支持机械开关的写保护功能和卡检测功能(插入/拔出)
● 速度等级分类:定义了 4 个速度等级,来表示卡的最小速率:(实际上目前最高 Class10)
Class 0 – 这种卡不定义具体性能,代表了这个规范出来之前的所有卡
Class 2 – 最小 2MB/s 的性能
Class 4 – 最小 4MB/s 的性能
Class 6 – 最小 6MB/s 的性能
3 SD 2.0总线拓扑结构
SD 卡系统定义了两种通信协议:SD 和 SPI。主机系统可以选择任意一种。当收到 reset 命令的时候,SD 卡通过主机的信息来决定使用何种模式,并且之后的通讯都会使用相同的模式。
3.1 SD模式
SD 卡总线支持一主多从(卡),拓扑结构如下图 3-2所示,其中时钟,电源和地信号是所有卡都有的,命令(CMD)和数据(DAT0-3)信号是点对点连接到所有卡。
在初始化时,处理命令会单独发送到每个卡,允许应用程序检测卡以及分配逻辑地址。数据总是单独发送(接收)到(从)每张卡。但是,为了简化卡的堆栈操作,在初始化过程结束后,所有的命令都是同时发送到所有卡。地址信息包含在命令包中。
SD 总线允许数据线的动态配置。上电后,SD 卡默认只使用 DAT0 来传输数据。初始化之后,主机可以改变总线宽度(使用的数据线数目)。
SD 总线包含下面的信号:
CLK: 时钟信号
CMD: 双向命令/响应信号
DAT0-DAT3: 双向数据信号
Vdd,Vss1,Vss2: 电源和地信号
3.2 SPI模式
SD 卡的 SPI 通信模式是用来同 SPI 信道通信,主要是应用在市场上的各种微处理器。模式选择是在上电后的第一次 reset 命令期间决定,并且只要不断电就不能改变。
SPI 标准只是定义了物理连接,没有完成数据传输协议。SD 卡的 SPI 实现使用了 SD 模式相同的命令。从应用的角度来说,SPI 模式的优点是使用现成主机的能力,从而减小设计压力,缺点是性能的损失。
SD 卡 SPI 接口同市场上现有的 SPI 主机兼容。同其他 SPI 设备一样,SD 卡的 SPI 信道有以下 4 个信号,其拓扑结构如下图3-3所示:
CS: 主机到卡的片选(chip select)信号
CLK: 主机到卡的时钟信号
DataIn: 主机到卡的数据信号
DataOut: 卡到主机的数据信号
SPI 的另一个 特点是字节传输,这也是卡的实现。所有的数据都是字节(8 bit)的整数倍,并且直接总是对齐 CS 信号。
4 SD 2.0总线协议
SD总线的通信基于命令和数据流的,包含三个要素:命令(Command),响应(Response)和数据(Data)。
命令:命令是启动操作的令牌。命令从主机发送到卡(寻址命令)或所有连接的卡(广播命令),命令在CMD行上串行传输。
响应:响应是卡发送到主机,作为对先前接收到的命令的响应,响应在CMD线上串行传输。
数据:数据可以从卡传输到主机,反之亦然。
SD主机与SD存储卡之间的数据传输按块进行。数据块的后面总是CRC位。SD协议定义了单个和多个块操作,多块操作模式更适合大量数据的写入操作。当CMD线上出现停止命令时,多块传输终止。主机可以将数据传输配置为使用单个或多个数据线。
无论数据线的数量如何,块写入操作都使用DAT0数据线返回busy信号(见图3-4)。
1线和4线模式的数据结构如下图所示。
5 SD卡寄存器
SD卡接口中定义了六个寄存器:OCR、CID、CSD、RCA、DSR和SCR。这些只能通过相应的命令访问。OCR、CID、CSD和SCR寄存器携带卡/内容特定信息,而RCA和DSR寄存器是存储实际配置参数的配置寄存器。
5.1 OCR寄存器
OCR寄存器是一个32bit的操作条件寄存器,存储了卡支持的VDD电压描述,支持的电压如下表5-1所示,当对应的bit为0时表示SD卡不支持该电压。
Bit 31表示卡的上电状态信息位,如果卡上电完成,该位会置1,如果卡是busy状态,该位会置0。
Bit 30表示卡容量状态位(CCS),在上电完成后,读取该位可以获取卡的容量状态,若果CCS=1,则表示是高容量卡(2~32G),如果CCS=0,则表示是标准容量卡(0~2G)。
Bit 7是为双电压卡新定义的,默认设置为0。如果双电压卡没有接收到CMD8,则响应中的OCR位7指示0,并且接收到CMD 8的双电压卡将该位设置为1。
下表是中文版本:
5.2 CID 寄存器
卡识别(CID)寄存器是一个 128 位的寄存器。包含了卡的识别信息,用于卡识别解析。每个读/写卡都有一个特殊的识别号。CID 寄存器的结构如下:
下表是中文版本:
5.3 CSD 寄存器
卡特定数据寄存器提供关于访问卡内容的信息。CSD 定义了卡的数据格式,错误修改类型,最大数据访问时间等参数。
5.3.1 CSD_STRUCTURE
CSD 寄存器的结构体因SD协议版本和卡容量的不同而不同。CSD 寄存器中的CSD_STRUCTURE 表明了结构体版本。表5-3显示了相关CSD结构的版本号
5.3.2 CSD Register (CSD Version 2.0)
表5-16显示了大容量SD存储卡的CSD定义(CSD 2.0版)。以下部分介绍了大容量SD存储卡的CSD字段和相关数据类型。CSD 2.0版仅适用于大容量SD存储卡。括号中的字段名称设置为固定值,表示主机不必引用这些字段。固定值使引用这些字段的主机能够保持与CSD 1.0版的兼容性。Cell Type字段编码如下:R=可读,W(1)=一次可写,W=多次可写。
下表是中文版:
5.4 RCA寄存器
可写的 16 位卡相对地址寄存器,在卡的初始化期间,由卡向外发布的卡地址。这个地址用于卡初始化进程之后,主机同卡之间的交互寻址。默认的 RCA 寄存器值是 0x0000,这个值保留着,用来通过 CMD7 设置所有卡到 stand-by 状态。
5.5 DSR 寄存器(可选择)
这是一个16位驱动器级寄存器。它可以选择性地用于提高总线性能(取决于总线长度、传输速率或卡的数量等参数)。CSD寄存器携带有关DSR寄存器使用情况的信息。DSR寄存器的默认值为0x404
5.6 SCR 寄存器
除了CSD寄存器外,SD卡的另一个配置寄存器称为SD卡配置寄存器(SCR)。SCR 提供了 SD 卡的特殊功能的信息。SCR寄存器的大小为64位,此寄存器由SD存储卡制造商将设置。下表介绍了SCR寄存器内容。
下面是中文版:
下面是每个域段的介绍: