2、SDIO 物理层规范:信号定义、电压等级、时序要求

做 SDIO 验证,第一关就是物理层。你想想看,如果连信号长什么样、跑多快、电平对不对都没搞清楚,后面协议分析全是空中楼阁。我个人习惯,拿到一块支持 SDIO 的芯片,第一件事不是翻协议栈,而是先把物理层的 datasheet 参数拉一张表贴在工位上。

2.1 信号定义——每根线都有自己的脾气

SDIO 接口一共多少根线?标准 SD 卡模式是 6 根,加上电源和地,总共 9 根。我放一张快速对照表:

信号名方向功能简述
CLKHost → Device时钟,所有同步操作的基准
CMD双向命令/响应通道,双向推挽
DAT0双向数据线 bit0,1-bit 模式唯一数据线
DAT1双向数据线 bit1,4-bit 模式使用
DAT2双向数据线 bit2
DAT3双向数据线 bit3,也兼卡检测
VDD—供电电源
VSS—地

注意 DAT3 这根线有点特殊。除了传数据,它还用来做卡插入检测和上电初始化的“忙”信号。我记得第一次调 SDIO 驱动时,发现卡死活不能识别,查了半天是 DAT3 上拉电阻没焊……嗯,这种坑踩过一次就记住了。

个人贴士: 平时做测试夹具,我会在 CMD 和每根 DAT 线上都预留串联电阻位置(22Ω 左右),实测时根据信号完整性再决定焊不焊。省得 layout 改版来回折腾。

2.2 电压等级——别插错槽位

SDIO 的电压不是一成不变的。规范定义了三种工作电压区间,但实际常用就两个:

  • 3.3V 传统区间(2.7V – 3.6V):兼容老设备,早期 SD 卡和 WiFi 模块大多用这个。
  • 1.8V 低压区间(1.65V – 1.95V):高速模式、UHS-I 以上必须用。省电,但驱动能力弱。
  • 3.0V 区间(2.7V – 3.0V):很少见了,偶尔在特殊工业卡里碰到。

工作中最容易出问题的就是电压切换。Host 先以 3.3V 发 CMD0 重置,然后通过 CMD8 探询卡支持什么电压。如果卡回应支持 1.8V,Host 再切到 1.8V 继续初始化。我曾经碰到过一个模块,用 3.3V 能读 CID,一切到 1.8V 就死掉——后来发现是模块内部 LDO 启动时序不够,需要 Host 拉低 DAT3 再等 5ms。这种事情,datasheet 上不会写,全靠示波器抓波形来查。

警告: 不要热插拔 SDIO 设备!尤其是 1.8V 模式,VDD 和信号线之间只有 0.6V 左右的噪声容限。带电插拔很容易烧接口 ESD 结构。我做认证测试时,每次插卡前都会手动确认 Host 已经关闭电源输出。

2.3 时序要求——快有快的规矩

时序是物理层验证的重头戏。SDIO 本质上是同步串行总线,所有信号都跟 CLK 对齐。我个人习惯把时序参数分成三类来记:

  • 频率相关: 默认模式 0–25 MHz,高速模式 0–50 MHz,UHS-I 可以到 208 MHz。每次换模式都要重新做眼图测试。
  • 建立/保持时间: CMD 和 DAT 相对于 CLK 上升沿的 setup/hold。标准 SD 规范要求 setup ≥ 5ns,hold ≥ 2ns(以 3.3V 为例)。1.8V 下这些窗口会更窄。
  • 输出延迟: 从 CLK 上升沿到数据有效的最大时间,通常 tODLY 在 14ns 以内(25MHz 时)。

下面这张图是我自己整理的知识结构,帮你把信号和时序串起来看:

SDIO 物理层核心结构 SDIO Host SDIO Device 总线信号组 CLK (时钟) CMD (双向) DAT[0:3] (双向) 电压等级:3.3V / 1.8V (CMD8 协商切换) 时序要求 setup≥5ns / hold≥2ns 注:Host 输出时钟,CMD/DAT 在 CLK 上升沿采样

2.4 实际操作中的避坑点

理论说完了,聊聊我遇到的真实案例。

  1. 上电时序: 有些 SDIO 设备要求 VDD 先稳定,CLK 再开始。反过来先给时钟、后供电,很可能导致卡内部锁死。我曾经在量产测试时复现过这个 bug,后来在 Host 固件里加了 10ms 的供电等待才解决。
  2. 信号斜率: 1.8V 模式下时钟上升沿不要太快(<1ns),否则会耦合到临近数据线上。简单解决办法是在 CLK 线上串一颗 10Ω 电阻,实测有效。
  3. 卡识别阶段: 按照规范,Host 发 CMD0 后必须等待至少 1ms 才能继续发 CMD8。但我遇到过有些卡需要 5ms 才能稳定。我自己的测试脚本里统一设成 10ms,省得换卡翻车。

核心总结: SDIO 物理层验证,信号定义靠查表,电压切换靠 CMD8,时序收敛靠示波器。我强烈建议在测试工具的第一个测试用例里就包含“连续写读 64 字节”的遍历,因为很多时序问题在单次传输中看不出来,连续跑才能暴露毛刺。

好了,该记的记,该测的测。下一环节我们聊聊命令与响应格式,那是协议层的敲门砖。