声明:本篇文章参考SD卡协议V1.0、SD卡协议V2.0、SD卡协议V1.0、SD卡协议简化规格V3.0、正点原子部分资料、野火部分资料。
真的服的是,网上这么多分享什么SD卡协议的文章,在CSDN中都要下载积分。
真的是垃圾堆里刨食!
所有人都想你下它的资料赚积分,还有些介绍SD卡的文章,那是直接复制的别人的文章,连图片链接都复制出来了,真垃圾!
SD卡协会官网:SD Association | The SD Association
https://www.sdcard.org/
还不如直接去官网下载官方文档,就算网站慢一点!
SDIO
SD卡(Secure Digital Memory Card)
SDIO全称是安全数字输入/输出接口。多媒体卡(MMC)、SD卡、SD I/O卡都有SDIO接口。
SD I/O 卡本身不是用于存储的卡,它是指利用SDIO传输协议的外设。
SD I/O卡 | Wi-Fi 卡 GPS 卡 以太网卡 …… |
SD存储卡 | SD(不大于 2GB) SDHC(大于 2GB,不大于 32GB) SDXC(大于 32GB,不大于 2 TB) |
MMC卡 | 可以说为SD卡的前身,现在使用少 |
CE-ATA 设备 | 是专为轻薄笔记本硬盘设计的硬盘高速通信接口 |
SD卡图片及其接口定义
SD卡(Secure Digital Memory Card)即:安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。
SD卡外部接口

SD卡由9个引脚进行通讯,支持SPI、SDIO两种模式,但是在两种模式下引脚定义略有不同:
引脚 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
SD卡模式 | CD/DAT3 | CMD | VSS | VCC | CLK | VSS | DATO | DAT1 | DAT2 |
SPI模式 | CS | MOSI | VSS | VCC | CLK | VSS | MISO | NC | NC |
SD卡物理结构


SD卡一般有五个寄存器,下表标记“ * ”。*
(本表参考:SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00 September 25, 2006)
名称 | 宽度(bit) | 描述 |
---|---|---|
CID* | 128 | 卡识别号(Card identification number)。 提供制造商ID、OEM/应用ID、产品名称、版本、序列号、制造日期等(唯一)。 |
RCA* | 16 | 相对地址(Relative card address)。仅SDIO模式下应用。 卡的本地系统地址,可动态变化。初始化时,动态地址由卡建议,主机核准。 |
DSR | 16 | 驱动级寄存器(Driver Stage Register)。配置卡的输出驱动。 |
CSD* | 128 | 卡的特定数据(Card Specific Data)。提供SD卡操作条件相关信息和数据。 |
SCR* | 64 | SD配置寄存器(SD Configuration Register)。SD卡特殊特性信息。 |
OCR* | 32 | 操作条件寄存器(Operation conditions register)。主要为SD卡的操作电压等信息。 |
SSR | 512 | SD状态(SD Status)。SD卡专有特征的信息。 |
CSR | 32 | 卡状态(Card Status)。卡状态信息。 |
SD卡命令
SD 卡系统的命令被分为多个类,每个类支持一种“卡的功能设置”。
SD卡部分常用命令:

下面详细介绍命令,主要参考【Linux驱动学习】SD卡规范学习 - sickworm - 博客园
参考手册:SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00 September 25, 2006
(由于参考手册中表有些在两页上,有些表中内容繁杂,故下面表均拷贝自参考博客)
Basic Commands(class 0)(基本命令)
用于重置、切换SD卡状态,获取相关信息。上面野火提供的表中均已介绍
Block-Oriented Read Commands(class 2)(面向块读取命令)
读单个、多个块数据,设置块长度。上面野火提供的表中均已介绍
Block-Oriented Write Commands(class 4)(面向块写命令)
写单个、多个块数据,设置块长度。上面野火提供的表中均已介绍
Block Oriented Write Protection Commands(class 6)(面向块的写保护命令)
设置、取消对应地址的数据的写保护,可以使其他程序无法写入指定的地址,达到保护目的。用的情况不太多。
Erase Commands(class 5)(擦除命令)
把对应的块数据擦除。上面野火提供的表中均已介绍
Lock Card(class 7)(锁卡命令)
设置、取消锁卡。锁卡后需要密码才能访问SD卡。上面野火提供的表中均已介绍
Application-specific Commands(class 8)(特定于应用程序的命令)
CMD55,使用ACMD前必须先发送的命令;CMD56是标准的读、写命令,会读、写一个block的数据。上面野火提供的表中均已介绍
I/O Mode Commands(class 9)(输入/输出模式命令)
预留给SDIO设备使用(CMD5也是预留给SDIO设备),在SD卡官方文档中没有说明具体用途
SD官方文档规定:所有未来保留命令、响应的码字长度应为48位。(如果有)
Application Specific Commands used/reserved by SD Memory Card(SD存储卡使用/保留的特定于应用程序的命令)
SD卡专用命令:MMC卡无法使用这些命令,里面包括如设置数据总线位宽,获取SD卡信息(寄存器)。上面野火提供的表中介绍了部分
SD 卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了两种类型的通用命令:特定应用命令 (ACMD) 和常规命令 (GEN_CMD)。要使用 SD 卡制造商特定的 ACMD 命令如 ACMD6,需要在发送该命令之前无发送 CMD55 命令,告知 SD 卡接下来的命令为特定应用命令。CMD55 命令只对紧接的第一个命令有效,SD 卡如果检测到 CMD55 之后的第一条命令为 ACMD 则执行其特定应用功能,如果检测发现不是 ACMD 命令,则执行标准命令。
SD卡总线拓扑结构
共有六条通讯线路和三条电源线路。(自行翻译,可能有不准)
CMD | 双向命令信号通道(主机和卡之间以推挽模式运行) |
---|---|
DAT0-3 | 双向数据信号通道(主机和卡之间以推挽模式运行) |
CLK | 主机提供给卡的信号(推挽模式运行) |
VDD | 提供给卡的电源 |
VSS[1:2] | 两个地线 |

SDIO接口
针脚 | 名称 | 类型 | 描述 |
---|---|---|---|
1 | CD/DAT3 | I/O/PP | 卡监测数据位 3 |
2 | CMD | PP | 命令/回复 |
3 | VSS | S | 地 |
4 | VCC | S | 供电电压 |
5 | CLK | I | 时钟 |
6 | VSS2 | S | 地 |
7 | DAT0 | I/O/PP | 数据位 0 |
8 | DAT1 | I/O/PP | 数据位 1 |
9 | DAT2 | I/O/PP | 数据位 2 |
注:S:电源供电 I:输入 O:输出 PP:I/O使用推挽驱动
SD卡允许 1 线到 4线数据信号设置。当默认的上电后,SD卡使用DAT0。初始化之后,主机可以改变线宽(即为 2 根、3 根、4 根)。当一主机连接多个SD卡时,只 可共用CLK线。
-
CLK:时钟线,由SDIO主机产生。
-
CMD:命令控制线,SDIO主机通过该线发送命令控制SD卡,如果命令要求SD卡提供应答,SD卡也通过该线传输应答信息。
-
D0-3:数据线,传输读写数据;SD卡可将 D0 拉低表示忙状态。
SPI接口
针脚 | 名称 | 类型 | 描述 |
---|---|---|---|
1 | CS | I | 片选(低电平有效) |
2 | DI | I | 数据输入 |
3 | VSS | S | 地 |
4 | VCC | S | 供电电压 |
5 | CLK | I | 时钟 |
6 | VSS2 | S | 地 |
7 | DO | 0 | 数据输出 |
8 | NC | NC | |
9 | NC | NC |
SPI总线允许通过 2 通道传输数据。SPI兼容模式使得MMC主机系统通过小改动就可以使用SD卡。SPI模式使用字节输出。SPI模式的优点就是简化主机设计。SPI模式相对SDIO模式丧失了速度。
晚安 ~