在嵌入式开发的世界里,SD(Secure Digital)和 SDIO(Secure Digital Input/Output)就像一对形影不离的孪生兄弟 —— 前者是移动设备的 "数据粮仓",后者是外设扩展的 "魔法接口"。

你肯定见过 SD 卡,指甲盖大小却能存几百部电影。正面 9 个镀金触点是它的 "神经中枢",背面是存储芯片和控制电路。别小看这 9 根引脚,它们分三大阵营,支撑起两种工作模式。
把 SD 卡的引脚按功能分类,瞬间就清晰了:
组别 | 引脚号 | 名称 | 方向 | 核心功能(SD 模式 vs SPI 模式) |
|---|---|---|---|---|
电源组 | 3/6 | VSS1/VSS2 | 接地 | 双地引脚确保电源稳定,减少信号干扰 |
| 4 | VCC | 输入 | 供电(2.7-3.6V,支持 1.8V 低电压模式协商) |
控制组 | 2 | CMD | 双向 | 命令通道(主机发命令,卡回响应,类似快递单的收发) |
| 1 | CD/DAT3 | 双向 | SD 模式:卡检测(是否插入);SPI 模式:数据位 3 |
数据组 | 5 | CLK | 输入 | 时钟信号(SD 模式最高 50MHz,SPI 模式最高 10MHz) |
| 7/8/9 | DAT0/DAT1/DAT2 | 双向 | SD 模式:4 位并行数据传输;SPI 模式:仅 DAT0 用(MOSI) |

关键区别:两种模式怎么选?
从 128MB 的 SDSC 到 1TB 的 SDXC,卡容量的飞跃藏在协议版本里:
SDIO 本质是 SD 的 "超级加强版",物理接口多了一根 nIRQ(中断请求) 引脚,从 9 针变成 10 针,瞬间从 "硬盘" 升级为 "万能接口":
现在重点拆解 SDIO 的 10 根引脚(主机视角),注意和 SD 卡的区别:
引脚名称 | 编号 | 方向 | 功能说明 | 关键特性(对比 SD 卡) |
|---|---|---|---|---|
CLK | 5 | 输出 | 时钟信号,控制数据传输节奏 | 最高频率从 25MHz 提升到 50MHz(SDIO 2.0) |
CMD | 2 | 双向 | 命令 / 响应通道,新增对多块传输、中断通知的支持 | 支持外设特定命令(如 Wi-Fi 模块配置) |
DAT0 | 7 | 双向 | 数据位 0,主传输通道 | 数据位 3(原 SD 卡的 DAT3)变为 nCD/nWP 控制信号 |
DAT1 | 8 | 双向 | 数据位 1 | |
DAT2 | 9 | 双向 | 数据位 2 | |
nCD/nWP | 1 | 输入 | 卡检测(nCD,低电平表示插入)/ 写保护(nWP,低电平禁止写入) | 替代 SD 卡的 CD/DAT3 功能,固定为输入信号 |
nIRQ | 新增 | 输入 | 中断请求(低电平有效),外设主动通知主机(如传感器数据就绪) | SD 卡没有,SDIO 核心扩展功能 |
VCC | 4 | 输出 | 支持 1.8V/3.3V 双电压,通过 CMD 命令协商(比如手机用 1.8V 省电) | 电压自适应,提升移动设备续航 |
VSS1/VSS2 | 3/6 | 接地 | 双地平面,降低高速信号噪声干扰 | 与 SD 卡相同,确保信号完整性 |
举个栗子:中断引脚有多重要?
当你用 SDIO 接口的 Wi-Fi 模块上网时,模块收到数据后会拉低 nIRQ 引脚,告诉主机 "有新数据啦",主机不用一直傻乎乎地问 "你有数据吗",这就是中断机制带来的效率提升,省电又高效!
SDIO 设备分三大类,每类对应不同的命令集和应用场景:

当 SDIO 设备插入主机(比如手机的 AP 处理器),主机怎么知道这是 Wi-Fi 模块还是传感器?靠的是 PCI 配置空间,这是每个 SDIO 设备必须实现的 256 字节 "身份档案",前 64 字节是必填项:
偏移地址 | 字段名 | 长度 | 作用举例(以 Wi-Fi 模块为例) |
|---|---|---|---|
0x00-0x01 | 厂商 ID(VID) | 2 字节 | 0x058F = 瑞昱(Realtek),0x19E5 = 高通(Qualcomm) |
0x02-0x03 | 设备 ID(DID) | 2 字节 | 0x6366=RTL8723BS 型号,主机通过 DID 查找对应驱动程序 |
0x04-0x06 | 类别代码 | 3 字节 | 0x020000 = 网络控制器(表示这是 Wi-Fi 模块) |
0x10-0x13 | 基址寄存器 BAR | 4 字节 | 映射设备寄存器到主机内存地址(比如 0x40000000 是控制寄存器地址) |
0x30-0x31 | nIRQ 映射 | 2 字节 | 告诉主机中断信号连接到哪个 GPIO 引脚(如 GPIO17) |
初始化过程像 "查户口":
1. 主机发 CMD0 命令复位设备,确认是 SDIO 设备(响应里带 "SDIO" 标志) 2. 发 CMD58 读取电压等级,协商 1.8V 或 3.3V 供电 3. 发 CMD52/53 命令读取配置空间前 64 字节,解析 VID/DID 找到驱动 4. 根据类别代码(比如 0x02 是网络类)加载对应功能驱动(如 wlan 驱动) 5. 通过 BAR 寄存器映射的内存地址,直接操作设备寄存器(比如设置 Wi-Fi 工作频段)
最后用一张对比表快速区分两者,以后设计电路或调驱动时一目了然:
特性 | SD(存储模式) | SDIO(外设模式) |
|---|---|---|
主要功能 | 数据存储 | 外设扩展(通信 / 传感器) |
引脚数量 | 9 针 | 10 针(多 1 根 nIRQ) |
DAT3 功能 | 数据位 3(双向) | nCD/nWP(输入,卡检测 / 写保护) |
新增功能 | 无 | 中断机制、PCI 配置空间 |
典型设备 | SD 卡、TF 卡 | Wi-Fi 模块、4G 模块、陀螺仪 |
时钟频率 | 最高 50MHz | 最高 50MHz(支持高速外设) |
如果你在调试 SD/SDIO 设备时遇到过奇怪的问题(比如卡有时能识别有时不能),欢迎在评论区留言。