第3章 SDIO物理层电气特性:电压、电流、上升/下降时间、眼图要求

讲物理层电气特性,说白了就是搞清楚信号在线上到底长什么样。很多工程师一上来就调软件协议,结果卡在莫名其妙的不通上,十有八九是电气特性没达标。我做过几轮 SDIO 验证,最深的一个体会是:波形好看不一定能通,但波形难看一定通不了。

3.1 电压域与电平标准

SDIO 卡支持两档电压:3.3V 传统模式 和 1.8V 高速模式(部分卡也兼容 1.2V,但主流是 1.8V)。卡在初始化阶段通过 CMD0 和 CMD8 协商电压,然后切换。

电压档位VOH minVOL max典型工作场景
3.3V2.7V0.6V普通 SD/MMC 卡,低速调试
1.8V1.55V0.35VUHS-I 高速模式,eMMC
1.2V1.05V0.25V未来低功耗设计(较少见)
踩过的一个坑: 我曾经遇到一块 FPGA 板,3.3V 输出高电平只有 2.5V,卡在初始化握手时死活不回应。量一下发现 VOH 低于 2.7V 阈值,但用示波器看波形幅度还可以。实际上 SDIO 规范对输入高电平的接受范围有严格下限,不能光靠眼睛看。

电压切换时要注意:主机必须在切换前先把驱动强度调到对应档位,否则瞬间过冲可能打坏卡。我建议在 GPIO 控制电源域的管脚上预留 RC 缓冲,确保切换缓坡进行。

3.2 电流驱动能力

SDIO 接口的驱动电流分几个等级,通常对应输出阻抗控制。主机侧一般提供 4 级驱动强度可配:Type A(弱)、Type B(标准)、Type C(强)、Type D(增强)。卡侧则相对固定。

  • Type A(8mA):适合短走线、单卡场景,功耗低。
  • Type B(16mA):最常见选择,多数主机默认值。
  • Type C(24mA):长走线或高负载(多卡分线)时启用。
  • Type D(32mA):极少用,容易引入振铃。

我个人习惯在 FPGA 或 SoC 的 IO 配置里先选 Type B,跑起来后抓一下眼图,如果眼睛张开太小就改成 Type C。注意,驱动能力不是越大越好——过冲会恶化时序裕量。

3.3 上升/下降时间与信号完整性

上升/下降时间(tr / tf)是信号完整性的硬指标。SDIO 规范要求:在 20%~80% 幅度之间,上升和下降时间应控制在 0.5ns ~ 30ns(具体取决于时钟频率和总线模式)。

总线模式最大频率tr / tf 建议范围
DS(默认速度)25 MHz3 ns ~ 30 ns
HS(高速)50 MHz1 ns ~ 10 ns
UHS-I SDR50100 MHz0.5 ns ~ 5 ns
UHS-I DDR5050 MHz(双沿)0.5 ns ~ 5 ns
实测技巧: 用高带宽示波器(建议 1 GHz 以上)抓单个跳变沿,看 20%~80% 区间的时间。如果上升沿太缓,说明负载电容太大或驱动不足;如果太陡,则要检查 PCB 走线阻抗匹配,避免反射。

你想想看,如果上升时间只有 0.2ns,信号在 PCB 上会振荡好几个周期才稳定,眼图里面全是毛刺。我遇到过一块板子,CLK 走线长了 3cm,没做阻抗控制,结果 HS 模式下一个时钟沿振荡了近 2ns,卡直接不认时钟。

3.4 眼图测量与模板

眼图是物理层的最终评判。SDIO 规范给出了明确的眼图模板(Mask),要求所有数据线和时钟线的眼图必须避开模板内的禁区。

// 以 1.8V 为例,眼图模板关键坐标(单位 V,ns)
// 模板中心对应采样点
X轴:-0.25 UI  ~ +0.25 UI  (UI = 单位间隔)
Y轴:0.35V  ~  1.55V   (1.8V 模式的电压窗口)

禁区形状:六边形
顶点1: (-0.25 UI, 0.35V)
顶点2: (-0.15 UI, 0.10V)
顶点3: (+0.15 UI, 0.10V)
顶点4: (+0.25 UI, 0.35V)
顶点5: (+0.25 UI, 1.55V)
顶点6: (-0.25 UI, 1.55V)

实际操作时,我习惯用示波器的「自动眼图测试」功能,设置触发源为 CLK,然后累加 1000 个以上波形。如果眼图开口不够大,先检查时钟抖动,再检查数据线上的串扰。

快速排查清单:
  • 电压不在眼图模板 Y 轴范围内 → 检查电源纹波、PI 滤波
  • 眼图水平开口 < 0.5 UI → 检查时钟抖动(抖动 < 0.1 UI)
  • 眼图上下不对称 → 检查驱动阻抗匹配(差分对等长)
  • 眼图内有毛刺 → 检查信号回流路径、过孔数量

知识体系:从电气特性到测试失败

SDIO 物理层电气特性知识体系 电压域 3.3V / 1.8V / 1.2V 驱动电流 8/16/24/32 mA 上升/下降时间 0.5~30ns 眼图模板 六边形禁区 电源纹波 / PI PCB 走线阻抗 负载电容 串扰 / 反射 示波器眼图测量 触发、累加、Mask FAIL:调整驱动/电源 PASS:进入协议测试 排查路径:电压→驱动→沿时间→眼图→失败原因定位

这张图把整个排查思路串起来了。从左到右是四个核心参数,往下是影响这些参数的因素,再往下汇聚到眼图测量,最后分叉到 PASS 或 FAIL 的处理。我在实际项目里就是照着这个路径一步步走的,很少有例外。

3.5 实测建议与避坑

最后分享几个我亲身踩过的坑,希望能帮你少走弯路。

  • 避坑1: 我曾经用 500MHz 示波器测 200MHz SDIO 信号,上升沿被探头带宽吃掉,眼图看起来永远不合格。后来换成 1GHz 探头才真相大白。测高速信号,示波器带宽至少是信号频率的 5 倍。
  • 避坑2: 卡侧和主机侧的驱动强度必须匹配。有一次我把主机侧设为 Type D,卡侧还是 Type B,结果上电瞬间驱动电流倒灌,直接打坏了一颗卡。后来在 FPGA 里加了软启动,才解决。
  • 避坑3: 眼图模板不能只看单边沿。我曾经只抓了 CLK 上升沿的眼图,结果卡在等特时间隔(等待时隙)时信号衰减严重,数据眼图完全闭合。建议数据线和时钟线都抓,特别是多卡分线时。
小提示: 如果你手边没有高级示波器,可以用差分探头测 SDIO_DAT[3:0] 和 CLK 之间的相对眼图。虽然不如单端眼图直观,但也能看出来回滞区宽度是否够用。我曾在临时搭建的测试台上用这个方法快速定位了一根 DAT 线虚焊的问题。

嗯,到这里物理层电气特性的核心内容就差不多了。记住一个原则:先看电压,再量沿时间,最后开眼图。顺序不能乱,否则你可能会在噪声里找半天,结果发现只是电源纹波超标。