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 最常见的几个方向,我列出来你看看:

  1. 无线通信模块: WiFi / Bluetooth / Zigbee / LoRa,吞吐适中,SDIO 正好接。我在做物联网网关时,主控 SDIO 连着 WiFi + 蓝牙二合一芯片,一路 4 位高速跑视频流。
  2. 定位外设: GPS / GNSS / 北斗模块,数据量不大但要求实时,SDIO 的低延迟特性很合适。
  3. 近场通信: NFC 控制器,很多用 SDIO 接口,配合天线做支付/门禁。
  4. 摄像头/图像传感器: 低速预览或拍照,SDIO 的 4 位模式能传 VGA 画质。
  5. 存储 + I/O 混合设备: 有些 SD 卡插槽同时支持存储卡和 SDIO 卡,比如嵌入式板卡的 combo 方案。
我曾经踩过的坑: 把 SDIO 当作 SPI 来调,结果发现 Device 根本不响应。后来才意识到 SDIO 初始化必须走特定的 CMD0→CMD8→ACMD41 序列,不能随便发命令。嗯,这是新人最容易翻车的地方。

1.4 SDIO 协议栈结构

为了让你对 SDIO 的层次有个整体认知,我画了一张图。咱们这门课后面会一层层拆开讲,但先搭个骨架。

SDIO 协议栈层次结构 物理层 CLK, CMD, DAT0~DAT3;电气特性;上电时序 传输层 命令包格式;响应类型(R1/R2/R3…);数据块传输;CRC 保护 应用层(I/O 功能) CIS 配置;FBR 功能寄存器;中断处理;多块传输 层次之间通过 Host 控制器 驱动和 DMA 引擎交互

物理层管最基础的时钟、信号电平和上电流程;传输层定义命令和响应的格式、超时和重试逻辑;应用层才是设备实际干活的地方——读 CIS 获取能力,写 FBR 控制外设。你想想看,每一层都有对应的时序约束,后面咱们会逐个击破。

小结一下: SDIO 是一种基于 SD 卡接口、面向 I/O 外设的高速同步总线。它结构不复杂,但细节很多。尤其是时钟建立时间、信号斜率和 CRC 校验,稍不注意就会丢数据。我个人认为,学好 SDIO 的关键就是先理清这三层关系,再逐个场景调时序。