2、SDIO物理层:信号定义、电压等级、时序参数、PCB设计要求

好了,咱们开始聊物理层。说白了,这是SDIO所有通信的物理基础。
你要是信号没摆弄明白,上层软件写得再好,跑起来也是一堆CRC错误。
我个人习惯,看一个板子的SDIO调试顺不顺利,先拿示波器看波形。
波形干净,后面多半没问题;波形乱七八糟,那基本是硬件硬伤。

2.1 信号定义 —— 别搞混这几根线

SDIO接口,标准配置是6根线,但很多人刚接手时容易忽略一个关键点:
它其实有两种模式,老一点的4线模式和现在主流的8线模式。

我先说4线模式,这是最常用的,也是兼容性最好的:

  • CLK —— 时钟。主机提供,所有数据操作都跟着它走。
  • CMD —— 命令线。双向的,主机发命令,设备回响应。
  • DAT[3:0] —— 数据线。4根双向数据总线。

8线模式呢?多了DAT[7:4]这4根线。带宽直接翻倍。
但是,这里有个坑 —— 不是所有设备都支持8线模式。
我在项目里见过有人把DAT[7:4]悬空,结果插上8线卡就死机。
我的建议是:即使你不用8线,也把这4根线拉到GND或者上拉到VDD,别悬空。

我的小技巧:
把SDIO的CLK、CMD和DAT在原理图上用不同颜色标出来。
调试时,一眼就能看过来,特别方便。

2.2 信号的方向性 —— 别小看这个细节

很多刚做硬件设计的同事会问:CMD和DAT上数据到底是主机发还是设备发?
其实,它俩都是双向的,但控制方式不一样:

  • CMD线:主机主动发命令,设备在特定时钟周期内回响应。
  • DAT线:主机控制数据方向。读操作时设备发数据,写操作时主机发数据。

你想想看,如果DAT方向搞反了,结果是啥?
总线冲突。两个输出同时怼线,波形直接乱掉。
我帮别人查过一个问题,SDIO读卡总超时,最后发现是DAT线的方向控制逻辑做反了。

2.3 电压等级 —— 3.3V还是1.8V?这是个问题

SDIO的电压等级,是我觉得最需要讲清楚的部分。
早期标准是3.3V,现在UHS-I(超高速一代)引入了1.8V。
但问题在于,设备启动时,默认是3.3V通信,然后通过一个专门的电压切换流程降为1.8V。

这个切换流程,说起来不难,但容易出错:

  1. 初始化阶段,主机以3.3V与设备通信。
  2. 主机发CMD11,告诉设备:“我要切电压了”。
  3. 设备在CMD线上回响应,同时把自己的电压调到1.8V。
  4. 主机也要在检测到响应后,把IO电压切换到1.8V。

注意,这个过程必须同步。主机切早了或切晚了,设备都可能挂掉。
我曾经遇到过一块板子,每次电压切换时SDIO就卡死。
最后查出来,是主板上的电源切换芯片响应太慢,主机切了但设备那边还是3.3V。

电压兼容性提醒:
如果设备只支持3.3V,不要试图用1.8V直接驱动它。
从3.3V降到1.8V,必须经过标准的电压切换流程。
强行拉低电压,可能烧坏设备内部的IO缓冲器。

2.4 时序参数 —— 速度由时钟决定,但质量由时序保证

SDIO时序参数,说白了就是信号在时钟边的建立时间和保持时间。
我列个表,把几个关键参数掰扯清楚:

参数 含义 典型值(正常速度) 典型值(高速模式)
fOD 数据输出延迟(从CLK边沿到数据有效) 0~14 ns 0~7 ns
tISU 输入建立时间(数据在CLK边沿前必须稳定) 5 ns 2 ns
tIH 输入保持时间(数据在CLK边沿后必须保持) 2 ns 1 ns
tCLK_cycle 时钟周期(最小) 40 ns (25 MHz) 12.5 ns (80 MHz)

为什么要注意这些参数?
因为PCB走线的长度差异,会导致信号到达时间不一致。
你想想看,如果CMD线比DAT线长5厘米,信号就会晚到约0.25 ns。
高速模式下,这0.25 ns可能就导致建立时间不够。

我的经验是:
在PCB布局阶段,就把CLK、CMD和DAT的走线长度控制在正负3 mm以内。
这样时序余量就会大很多。

2.5 PCB设计要求 —— 画板子是个细活

好,前面讲了信号、电压、时序,现在落地到PCB设计。
SDIO的PCB设计,核心就三件事:

  • 阻抗控制:单线50Ω,差分对100Ω。
  • 走线等长:组内偏差正负3 mm,组间不要差超过10 mm。
  • 参考平面完整:不能跨分割,信号底下必须是连续的GND。

另外,CLK信号一定要做包地处理。
我之前在调试一块高速SDIO板子时,发现DAT2线上的眼图惨不忍睹。
最后定位到,是CLK线没有包地,串扰到了旁边的DAT线。
加了一根地线隔离后,问题立刻消失。

PCB设计检查清单(SDIO部分):
  • CLK、CMD、DAT走线是否在同一个层?别跨层走。
  • 所有信号是否都有完整的GND参考平面?
  • 8线模式下,DAT[7:4]与DAT[3:0]的走线长度是否一致?
  • 是否有串联匹配电阻?一般靠近主机端放22Ω或33Ω。
  • 电源去耦电容是否靠近芯片引脚?不要放太远。

还有个细节:上拉电阻。
命令线和数据线在空闲时,需要被拉到高电平。
一般用10kΩ到47kΩ的上拉电阻到VDD。
我曾经见过有人用1kΩ,结果驱动电流太大,信号振铃严重。

SDIO物理层知识体系结构 SDIO物理层 信号定义 CLK/CMD/DAT 电压等级 3.3V / 1.8V 时序参数 建立/保持/延迟 PCB设计 阻抗/等长/包地 4线 / 8线模式 命令响应时序 电压切换流程 时钟频率选择 数据有效窗口 走线等长要求 包地隔离 核心一句话 SDIO物理层是信号完整性、电压兼容性和时序收敛的系统工程。 任何一环出问题,都会导致通信失败。

这张图把物理层的知识体系串了起来。
你可以看到,信号定义、电压等级、时序参数、PCB设计这四个维度,缺一不可。
我自己做项目时,会把这四个维度做成一个检查表,每完成一个节点就打勾。
这样能最大程度避免低级错误。