SDIO接口概述与协议基础
SDIO协议简介
SDIO,全称Secure Digital Input/Output,说白了就是在SD卡物理接口上扩展出来的通用IO协议。你可以把它理解成SD卡协议的“升级版”——不光能存数据,还能接Wi-Fi模块、蓝牙芯片、GPS、摄像头这些外设。我刚开始做硬件那会儿,看到板子上焊个SDIO接口接Wi-Fi,还以为是SD卡槽走错片场了。
SDIO协议由SD协会定义,底层兼容SD存储卡的电气和时序规范。这意味着:
- 同一个控制器,既能读写SD卡,也能驱动SDIO外设。
- 传输命令和数据的物理层完全一致。
- 上层通过命令格式和响应来区分当前连接的设备类型。
信号线定义
SDIO接口一共有11根信号线,但真正用于数据传输的只有6根。嗯,剩下的都是电源和地。我列个表,你看着更清楚:
| 信号名 | 方向(主机→设备) | 功能描述 |
|---|---|---|
| CLK | 主机→设备 | 时钟,频率范围0~208MHz(取决于速度等级) |
| CMD | 双向 | 命令/响应线,主机发送命令,设备返回响应 |
| DAT0~DAT3 | 双向 | 数据线,默认DAT0只用作1-bit模式,4-bit模式用全部四根 |
| VDD | — | 电源,典型值3.3V或1.8V |
| VSS | — | 地 |
其实还有个CD/DAT3复用脚——卡检测信号。但在SDIO设备里,这个脚往往直接接地或者悬空。我遇到过一块Wi-Fi模块,DAT3引脚没接上拉,结果主机一直检测不到设备。后来我在DAT3上加了10kΩ上拉到VDD,问题就解决了。这些细节,书本上很少写。
工作模式
SDIO有两大类工作模式,分得挺清楚:
- SD模式(1-bit和4-bit):兼容SD卡通信协议,默认启动是1-bit模式,初始化后可以通过ACMD6切换到4-bit模式。4-bit模式下数据吞吐量翻倍,但布线时四根数据线必须等长——这个跟咱们后面要讲的阻抗不连续直接相关。
- SPI模式:用CS、SCLK、MOSI、MISO四根线实现串行通信。速度慢,但引脚少,适合低端MCU。我一般在调试早期先用SPI模式验证基本读写,等逻辑通了再切回SD模式。
为什么会有两种模式?你想想看,SDIO协议诞生时,很多嵌入式设备已经标配SPI接口了。为了降低门槛,协议直接把SPI物理层拿来用。但代价是SPI模式没有4-bit传输,性能上不去。
速度等级
SDIO速度等级和SD卡基本一致,但需要结合应用场景理解。我从工程角度把常见的几个档位整理出来:
| 速度等级 | 时钟频率 | 典型带宽(4-bit) | 适用外设示例 |
|---|---|---|---|
| Default Speed | 0~25 MHz | ~12.5 MB/s | 低速GPIO、简单传感器 |
| High Speed | 25~50 MHz | ~25 MB/s | Wi-Fi(802.11b/g/n)、蓝牙 |
| SDR12 | 50~100 MHz | ~50 MB/s | 高速相机模块、千兆以太网控制器 |
| SDR25 | 100~208 MHz | ~100 MB/s | 高端Wi-Fi 6、5G模块(需严格SI设计) |
注意:时钟频率不是越高越好。我个人习惯在项目初期先按50MHz跑,验证完功能再往上调。曾经在一个项目里,Wi-Fi模块标称支持SDR25,但layout走线没处理好,导致100MHz以上眼图闭合。最后降频到50MHz才稳定。你说冤枉不冤枉?高频下的阻抗不连续问题,正是咱们这门课要深挖的核心。
SDIO协议栈与信号交互逻辑
下面这张SVG图,把SDIO的核心要素串起来了。你把它当作本章知识地图,后续每个章节都会回到这个框架里。
总结一下本章核心:SDIO协议不是凭空冒出来的,它从SD卡协议延伸而来,信号线定义清晰,工作模式灵活,速度等级覆盖从几MB到上百MB。但所有这些优雅的设计,都建立在物理层信号完整性的基础上。一旦阻抗不连续,协议再强也是空中楼阁。