SDIO时序参数总览
调试SDIO接口,第一件事就是搞懂这些时序参数。说白了,这些数字决定了你的电路能不能稳定通信。我记得刚做硬件那会儿,被建立时间和保持时间搞得头大,觉得它们像玄学。其实不是,每个参数都有物理意义。
| 参数 | 缩写 | 定义 | 典型取值 (UHS-I SDR50) | 测量条件 |
|---|---|---|---|---|
| 时钟频率 | CLK freq | SDIO 时钟信号工作频率 | 0~100 MHz | Host 输出端 |
| 建立时间 | tSU | 数据在 CLK 采样沿前必须稳定的最短时间 | ≥ 3 ns | Card/Device 输入端 |
| 保持时间 | tHLD | 数据在 CLK 采样沿后必须稳定的最长时间 | ≥ 1.5 ns | Card/Device 输入端 |
| 输出延迟 | tOD | CLK 边沿到数据输出的最大延迟 | ≤ 7 ns | Card/Device 输出端 |
| 输入延迟 | tID | CLK 边沿到数据输入的采样窗口偏移 | ≤ 2 ns | Host 输入端 |
时钟频率:SDIO 的脉搏
时钟频率决定了你的数据能跑多快。SDIO 支持从 0 Hz 到 208 MHz(UHS-II),但实际用的最多的是 25 MHz、50 MHz、100 MHz 这三档。
我在项目中遇到过 CLK 频率调高后,CMD 线上出现误码。查了半天,发现是 PCB 走线太长导致时钟歪斜。所以频率越高,对布局布线要求越苛刻。
为什么说频率重要?因为所有时序参数都基于 CLK 周期来算。一个 100 MHz 的时钟,周期才 10 ns。你光建立时间就吃掉 3 ns,留给其他延迟的就不多了。
建立时间 (tSU) 与保持时间 (tHLD)
这两个参数是成对出现的,它们一起定义了采样窗口。你想想看,如果数据到达的时间不对,采样点就没法稳定读取。
- 建立时间不够:数据还没稳定,CLK 就来了。结果就是读到错误电平。
- 保持时间不够:CLK 采样后数据立刻跳变,寄存器锁存的值还是错的。
我曾经在一个项目中,把保持时间设得太乐观,结果在高低温测试时批量出错。后来才知道,温度变化会让保持时间漂移 0.5 ns 以上。
采样窗口 = tSU + tHLD。窗口越小,时序裕量越大。但窗口过小会降低抗干扰能力。我建议留 20% 的余量。
输出延迟 (tOD)
tOD 是指从 CLK 触发到数据脚(CMD、DAT)出现有效值之间的时间。说白了,就是器件内部电路的响应速度。
SDIO 卡在发送数据时,Host 端会等 CLK 边沿后 tOD 时间再去采样。如果 tOD 太大,后面建立时间的预算就被挤掉了。
调试时可以先测 CMD 线上的 tOD。如果发现 tOD 超规,多半是卡内部走线过长或驱动能力不足。
输入延迟 (tID)
tID 是 Host 端采样数据时,数据线相对 CLK 的延迟。这个参数通常很小,但线上负载会影响它。
为什么要注意 tID?因为 SDIO 总线上可能挂多个设备,每个设备的 tID 不一样。Host 必须用最坏情况来设计采样窗口。
- 典型值:1~2 ns
- 受负载电容影响:多挂一个设备,tID 可能增加 0.5 ns
注意:tID 不是固定值,它会随 VDD 和温度变化。建议选用宽的规格档,比如标 2 ns,实际测试最好小于 1.5 ns。
综合诊断思路
当你遇到 SDIO 通信不稳时,不要盲目调驱动。先按下面步骤排查:
- 确认 CLK 频率在芯片规格范围内,用示波器看波形有无抖动。
- 测量建立时间和保持时间是否满足最小要求。
- 检查 tOD 和 tID 是否在预期范围,尤其注意走线长度。
- 计算时序裕量:Margin = tCLK - tSU - tOD - tID
- 如果裕量小于 1 ns,就该降频或优化 PCB 布局了。
我个人习惯是在原型阶段就把所有时序参数测一遍,因为芯片数据手册给的典型值往往偏理想。实际板子上,加上寄生参数,差距可能达到 2~3 ns。
这里给一个简单的时序裕量计算代码,你也可以用它来批量判断:
def check_sdio_margin(clk_freq_mhz, tSU_ns, tOD_ns, tID_ns):
period_ns = 1000.0 / clk_freq_mhz
margin = period_ns - tSU_ns - tOD_ns - tID_ns
print(f"CLK周期: {period_ns:.2f} ns")
print(f"时序裕量: {margin:.2f} ns")
if margin < 1.0:
print("警告:裕量不足,建议优化!")
else:
print("正常")
check_sdio_margin(100, 3.0, 7.0, 2.0)
核心思路:所有时序参数最终都指向一个目标——保证 CLK 采样时数据有效。不要独立看某个参数,而要整体评估裕量。
嗯,到这里你应该对 SDIO 的时序参数有了清晰认识。时钟频率、建立时间、保持时间、输出延迟、输入延迟,这五个参数是调试的基石。下图表展示了它们之间的关系:
你可以把它当作速查地图。每次调试 SDIO 时,先确定频率和采样窗口,然后算裕量——只要保证裕量为正,系统基本稳定。
上表中我标了典型取值的参考,但千万不要原样照抄。我遇到过不少案例,就是因为没留余量,导致低温或高温下时序裕量变负。所以参数要实打实地测,测出来再决定怎么调。