4. SDIO 电气特性:电压、驱动能力、阻抗匹配

做 SDIO 设计,电气特性是第一步。你要是连电压和阻抗都不搞清楚,后面时序调得再漂亮,板子一跑就挂。我当年刚接触 SDIO 时,就因为忽略了驱动能力,折腾了整整两天——现在想想,真没必要。

4.1 电压等级:别烧了卡,也别带不动

SDIO 卡支持两种工作电压:3.3V 和 1.8V。早期卡基本都是 3.3V,后来为了低功耗,1.8V 成了主流。新规范还允许双电压卡,自动切换。

我个人习惯在设计初期就确定好电压域。如果你主机是 3.3V,卡是 1.8V,直接连?不行。逻辑电平不匹配,卡可能不响应,甚至烧坏 IO。

关键点:双电压卡的电压切换通过 CMD 线上发送特定命令实现,主机需要先设置电压选择寄存器,再初始化卡。切换失败时,卡会一直停在初始状态。

参数3.3V 模式1.8V 模式
VDD 范围2.7V – 3.6V1.65V – 1.95V
VIH (min)0.625 × VDD ≈ 2.1V0.65 × VDD ≈ 1.17V
VIL (max)0.25 × VDD ≈ 0.83V0.35 × VDD ≈ 0.63V
输出高电平 (min)0.75 × VDD ≈ 2.5V0.75 × VDD ≈ 1.35V
输出低电平 (max)0.125 × VDD ≈ 0.41V0.125 × VDD ≈ 0.23V

注意:我曾遇到过一个项目,主机输出 1.8V 逻辑电平,卡端用了 3.3V 供电。结果 CMD 信号被卡识别成中间态,命令一直超时。后来加了电平转换 IC 才解决。别想着靠电阻分压凑合——SDIO 对边沿速率有要求,分压会毁时序。

4.2 驱动能力:不是越强越好

SDIO 主机输出的驱动电流通常在 4mA 到 12mA 之间可调。驱动能力太弱,信号上升沿变缓,建立时间不够;驱动太强,信号过冲严重,可能损坏卡端 IO。

我一般会先按 8mA 配置,然后上示波器看波形。如果上升沿超过 3ns,就提高驱动;如果过冲超过 VDD+0.5V,就降低。

  • 信号上升沿时间: 建议控制在 1.5ns 到 3ns(对应 25MHz 时钟)。
  • 输出阻抗: 主机 IO 的输出阻抗通常在 20Ω 到 40Ω 之间。
  • 输入阈值: 卡端用施密特触发器,典型回滞 0.2V,防止噪声误触发。

小技巧:如果你在调试时发现命令偶尔响应失败,可以用示波器看 CMD 线,检查是否出现“振铃”或“矮脉冲”。矮脉冲就是驱动不足导致电平没爬到 VIH 以上。我曾经在 SD 卡座接触不良时遇到这种问题——换了个座子就好了。

4.3 阻抗匹配:消除传输线效应

SDIO 工作频率最高可达 208MHz(UHS-II 模式),此时 PCB 走线必须当成传输线处理。特征阻抗 Z0 标准要求 50Ω ± 10%。

实际操作中,主机输出端与卡输入端的阻抗不匹配,会产生反射波,造成信号过冲或下冲。解决方法是在靠近主机输出端串联一个 匹配电阻 Rs,阻值通常为 10Ω 到 33Ω。

Rs 的计算公式:
Rs = Z0 − Rout
其中 Rout 是主机输出阻抗,一般约 20Ω。如果 Z0=50Ω,则 Rs 选 30Ω。

走线长度限制:

  • 25MHz 普通模式:走线不超过 15cm,不用串阻也能跑。
  • 50MHz 高速模式:走线控制在 10cm 以内,建议串 22Ω 电阻。
  • 100MHz 以上(DDR 或 UHS-I):走线尽量 < 5cm,串阻 + 包地处理。

我记得有一次做 FPGA 直接驱动 SDIO 卡,PCB 布局把 SD 座放在板子角落,走线绕了 20cm。100MHz 时 CLK 线上眼图几乎没睁开。后来把匹配电阻从 0Ω 换成 33Ω,眼图立马好看了。

另外,时钟线 CLK 要包地打孔,两侧加地线隔离,避免串扰到 CMD 或 DAT 线上。数据线之间等长要求 ±50ps,走线越短越容易满足。

避坑指南:我曾经在多层板布局时,把 SDIO 信号线走在相邻层参考平面被分割的地方(比如地平面被电源过孔切开)。结果阻抗突变,信号完整性问题频发。所以,所有 SDIO 走线必须有一个完整的、连续的参考平面。

4.4 电气结构总览

为了帮你直观理解 SDIO 的电气连接,我画了个示意图。左边是主机 IO,右边是卡座,中间是 PCB 走线。串联电阻 Rs 紧靠主机输出端,卡端尽量靠近卡座。

SDIO 电气连接示意图 SDIO 电气连接:主机 → PCB 走线 → 卡 SDIO 主机 Rout ≈ 20Ω 驱动 8mA CLK CMD DAT[3:0] Rs Rs Rs PCB 走线 Z0 = 50Ω 长度 < 10cm SDIO 卡 VDD = 1.8V/3.3V 施密特输入 CLK CMD DAT[3:0] 说明:串联电阻 Rs 用于吸收反射波,靠近主机输出端放置。阻值 ≈ Z0 − Rout。

图中,主机 IO 驱动后经过 Rs 进入 PCB 走线,卡端无端接(因为 SDIO 卡本身输入电容大,反射波会被吸收一部分)。串联匹配的要点就是 Rs 让主机输出阻抗 + Rs 刚好等于 Z0。

4.5 实战中的关键参数检查清单

做设计或调试时,我建议你按下面步骤过一遍:

  1. 确认电压域一致或设计好电平转换。如果混用,必须用双向电平转换器,比如 TXB0104 或分立电路。
  2. 测量主机输出阻抗。查 datasheet 或直接用 TDR 量。实在没有就按 20Ω 估算。
  3. 计算匹配电阻。 Rs = 50 − Rout。如果 Rout=20,Rs=30Ω;如果 Rout=10,Rs=40Ω。我一般取 22Ω 或 33Ω 常用值。
  4. 检查走线长度。 100MHz 以上尽量 < 5cm。做不到就把驱动调弱一些,配合 Rs 增大。
  5. 验证信号质量。 用示波器看 CLK、CMD、DAT 的眼图。干净的眼图开口应在 70% 以上。

最后提醒一句: 我见过很多团队在原理图阶段把 Rs 画成 0Ω 预留(方便调试),结果板子回来忘了焊。SDIO 在低速时可能还能工作,但高速下一定翻车。所以,量产设计请直接焊上匹配电阻。