第二章 SDIO接口电气特性与信号定义归纳总结

说到SDIO接口,大家第一反应可能都是那些协议栈、命令和状态。但依我看,最基础的反而是最容易踩坑的——电气特性和信号定义。这东西要是没搞透,后面调驱动或者在量产线上看到误码,你会头疼。我刚开始做SDIO验证时,也仗着懂点协议就往上冲,结果有一次板子亮都不亮……查了一天,就是CLK上升沿太缓,卡压根不认。

核心思想: SDIO的物理层是协议正确运行的基础。信号幅度、时序、驱动能力,哪一个差了,数据传输都会出问题。

2.1 信号定义:每一根线都在干什么

先看看SDIO总线上到底有几根信号线。标准SDIO接口一共就6根线:CLK、CMD、DAT0、DAT1、DAT2、DAT3。另外当然还有电源VDD和地VSS。咱们逐条说。

2.1.1 CLK 时钟信号

CLK是主机发给卡的。卡的所有操作都跟着这个时钟沿走。频率范围很宽,从0 MHz(可以停时钟)一直到正常模式下的25 MHz,UHS-I模式能跑到52 MHz。占空比标准要求在40%到60%之间。

嗯,这里要注意:不是频率越高越好。高频率下对PCB走线的要求也上来了。我个人习惯,初始化和识别阶段先跑400 kHz,等确认卡没问题了,再切到高频。

2.1.2 CMD 命令/响应线

CMD是双向的。主机发命令时,它输出;卡要回响应时,主机就得把输出释放掉,让卡来驱动。

这有个关键点:初始化阶段用的是开漏模式,靠上拉电阻把电平拉高。进入数据传输模式后,才切到推挽模式,速度一下子提上去。我在项目中遇到过几次,卡初始化死活过不去,最后发现是CMD线上的上拉电阻值不对,开漏模式下电平拉不起来。

2.1.3 DAT0 - DAT3 数据总线

数据总线支持1位模式和4位模式。只用DAT0就是1位,全用就是4位,后者速度快4倍。

  • DAT0: 必须用。1位模式下数据都走它。
  • DAT1: 除了传数据,在4位模式下还兼任中断线。卡想给主机发中断,就拉低DAT1。
  • DAT2: 纯数据。
  • DAT3: 除了数据,在卡识别阶段还用作忙检测。

你想想看,DAT1又传数据又传中断,要是电气上没处理好,容易出误触发。我曾经因为DAT1上拉电阻选型问题,整机功耗直接超标。这个我后面细说。

小提示: 在板级验证时,优先用逻辑分析仪把CMD和DAT0抓出来看看。如果这两个信号的电平和时序没问题,大部分问题已经排除了。

2.2 电气特性关键参数:电压与电平

电气特性大家容易忽略,但它直接决定了你的板子能不能和卡正常握手。说白了,卡对电压非常挑剔。

SDIO主要工作在两种电压区间:

参数 3.0V 模式(标称) 1.8V 模式(标称)
工作电压范围 2.7V - 3.6V 1.65V - 1.95V
VIH 输入高电平最小值 VDD × 0.625 VDD × 0.65
VIL 输入低电平最大值 VDD × 0.25 VDD × 0.25
VOH 输出高电平最小值 VDD - 0.4V VDD - 0.4V
VOL 输出低电平最大值 0.4V 0.4V
典型上拉电阻(CMD/DAT) 10kΩ - 100kΩ 10kΩ - 50kΩ

这里有个很多人都没注意到的点:卡不是一上电就工作在3.0V或1.8V的。它有个初始化流程,通过CMD0和ACMD41来协商电压。如果主机不支持卡要求的电压,卡就会保持空闲状态。我记得之前有个项目,用的卡是1.8V的,但主机在ACMD41里只报了3.0V的支持,结果卡怎么都不响应。查了半天,不是硬件坏了,是软件配置问题。

注意: 千万不要尝试在2.5V或2.0V这种非标电压下工作。SDIO卡内部有电压检测逻辑,超出范围会直接罢工,甚至伤到芯片。

2.3 信号质量与验证要点:我们实际测什么

讲完了静态参数,咱们说说动态的。光看电压准不准不够,还要看信号长什么样。

2.3.1 上升/下降时间

标准对CLK的上升和下降时间有要求。一般来说,在最大频率下,上升/下降时间要小于0.5 ns(这是一个典型经验值)。如果太慢,卡可能采不到正确的电平;如果太快,又会产生很大的EMI。

// 举个例子,你在示波器上看CLK波形
// 测量20% 到 80% 的幅度区间的时间
// 如果52MHz时超过0.5ns,就要考虑调整驱动能力了

2.3.2 过冲与下冲

过冲不能超过VDD的10%到20%(具体看UHS-I标准等级)。我见过最典型的就是驱动强度设置得太强,信号跟弹簧似的弹个没完。这种情况下,卡内部的IO可能被击穿或误读。解决办法是在主机端选低一点的驱动强度,或者在DAT线上串个小电阻(比如22Ω)。

2.3.3 建立/保持时间

这个主要看DAT和CMD相对于CLK的边沿位置。标准要求DAT在CLK上升沿前有足够的建立时间,在上升沿后要保持一段时间。其实这个主要是芯片内部决定的,但PCB走线长度差太大会破坏时序。我建议组内同仁在画板子时,确保SDIO信号线的长度差别控制在500 mil以内,越长越容易出问题。

验证清单:
  1. 确认VDD电压在卡要求的范围内(看ACMD41协商结果)。
  2. 用示波器看CLK上升/下降时间。
  3. 在CMD和DAT线上测过冲峰值。
  4. 读卡内寄存器,确认驱动强度匹配。
  5. 做个压力测试(全速4位连续读写),确保信号不断。

2.4 知识体系:一张图看懂SDIO电气与信号

说了这么多,最后我画个图把这些串起来。你对照自己的板子看,应该能快速定位问题。

SDIO接口信号与电气特性知识体系 SDIO主机控制器 SDIO卡 CLK CMD (双向) DAT[3:0] (双向总线) Rpu 上拉 Rpu 上拉 VDD: 3.0V / 1.8V VDD: 3.0V / 1.8V 图例与关键检查项 主机 卡 单向/双向信号 上拉电阻 电压域 ✅ 检查CLK上升/下降时间 ✅ 检查CMD/DAT过冲幅度 ✅ 检查上拉电阻值(10kΩ-50kΩ)

2.5 避坑指南:我踩过的那些坑

干这行时间长了,谁还没几个刻骨铭心的debug故事?分享两个我自己的,你们遇到了能少走弯路。

第一坑:上拉电阻选型不当。 有一回做平板项目,DAT1线上的上拉电阻用了4.7kΩ。按说也能用,但进入中断模式后,卡频繁拉低DAT1,结果功耗直接飙升。用示波器一看,电阻太小,放电电流太大。换了47kΩ,功耗立刻就正常了。我建议大家在允许范围内,尽量选大一点,省电。当然不要超过100kΩ,不然上升沿太慢。

第二坑:电平不匹配,导致卡烧了。 这个说起来有点丢人。之前评估一个模块,手册没说清楚,我直接给了3.3V的SDIO信号。结果那个模块只能承受1.8V,砰……虽然没冒烟,但那个卡再也不认了。从那以后,我再也不信手册上的“兼容”二字。每次接新硬件,一定先看ACTM41协商的电压,再用示波器量一下。

好了,第二章就到这里。信号和电气特性是后面所有测试动作的基础,务必亲手量一量、认一认。