1. SDIO 总线概述
1.1 什么是 SDIO?
SDIO 全称 Secure Digital Input/Output,是从 SD 存储卡协议扩展出来的通用 I/O 总线。说白了,它就是用 SD 卡的物理接口和通信协议,去接 WiFi、蓝牙、GPS 这类外设,而不是只插存储卡。
我记得第一次接触 SDIO 是在做一款车载 WiFi 模块。当时一看引脚定义跟 SD 卡一模一样,心里还嘀咕:这能跑起来?结果调完时序才发现,SDIO 本质上就是一套带命令、响应和数据传输的同步串行总线。主机(Host)通过命令线发指令,从设备(Device)从响应线回复,然后数据线(DAT0~DAT3)就开始搬数据。就这么简单。
我个人的习惯: 拿到一个新 SDIO 设备,先看它的初始化序列——很多坑都出在默认速率和总线宽度上。
1.2 SDIO 的核心特点
SDIO 并不是“万能总线”,但它有几个非常实用的特性,让我在项目选型时经常优先考虑它。
- 复用 SD 卡接口: 很多 SoC 已经集成了 SD 主机控制器,加个 SDIO 设备不用额外引脚,成本低。
- 双速率模式: 支持低速(0~400 kHz)初始化,之后切到高速(最高 25 MHz / 50 MHz / SDR/DDR)。
- 1 位或 4 位数据总线: 灵活配置,按吞吐需求选。我做过一个 NFC 读卡器,只用 1 位线就够,省了两根 DAT 脚做别的。
- 命令-响应交互: 所有事务由 Host 发起,Device 只能响应,避免总线冲突。
- 支持 SPI 兼容模式: 部分低端设备可以用 SPI 通信,但速度远不如 SD 本机模式。
下面这个表格把 SDIO 跟几种常见总线做了对比,方便你快速了解它的定位。
| 参数 | SDIO | SPI | I2C | UART |
|---|---|---|---|---|
| 最大时钟 | 50 MHz (DDR) | 几十 MHz | 3.4 MHz | ~几 MHz |
| 数据线宽度 | 1/4 位 | 1 位全双工 | 1 位半双工 | 1 位 |
| 典型吞吐 | ~200 MBps | ~几十 MBps | ~几 MBps | ~几 MBps |
| 设备数 | 1 个 Host + 多 Device | 1 主多从 | 多主多从 | 点对点 |
| 协议复杂度 | 中 | 低 | 低 | 低 |
1.3 应用场景
SDIO 最常见的几个方向,我列出来你看看:
- 无线通信模块: WiFi / Bluetooth / Zigbee / LoRa,吞吐适中,SDIO 正好接。我在做物联网网关时,主控 SDIO 连着 WiFi + 蓝牙二合一芯片,一路 4 位高速跑视频流。
- 定位外设: GPS / GNSS / 北斗模块,数据量不大但要求实时,SDIO 的低延迟特性很合适。
- 近场通信: NFC 控制器,很多用 SDIO 接口,配合天线做支付/门禁。
- 摄像头/图像传感器: 低速预览或拍照,SDIO 的 4 位模式能传 VGA 画质。
- 存储 + I/O 混合设备: 有些 SD 卡插槽同时支持存储卡和 SDIO 卡,比如嵌入式板卡的 combo 方案。
我曾经踩过的坑: 把 SDIO 当作 SPI 来调,结果发现 Device 根本不响应。后来才意识到 SDIO 初始化必须走特定的 CMD0→CMD8→ACMD41 序列,不能随便发命令。嗯,这是新人最容易翻车的地方。
1.4 SDIO 协议栈结构
为了让你对 SDIO 的层次有个整体认知,我画了一张图。咱们这门课后面会一层层拆开讲,但先搭个骨架。
物理层管最基础的时钟、信号电平和上电流程;传输层定义命令和响应的格式、超时和重试逻辑;应用层才是设备实际干活的地方——读 CIS 获取能力,写 FBR 控制外设。你想想看,每一层都有对应的时序约束,后面咱们会逐个击破。
小结一下: SDIO 是一种基于 SD 卡接口、面向 I/O 外设的高速同步总线。它结构不复杂,但细节很多。尤其是时钟建立时间、信号斜率和 CRC 校验,稍不注意就会丢数据。我个人认为,学好 SDIO 的关键就是先理清这三层关系,再逐个场景调时序。