物理层基础:D-PHY 架构、传输线与模式切换

D-PHY 的组成:不只是差分对那么简单

说起 MIPI DSI 的物理层,核心就是 D-PHY。它专门为显示和摄像头这类高速串行接口设计的,说白了就是一套高速串并转换的收发器标准。

一个典型的 D-PHY 链路包含 1 条时钟通道(Clock Lane)和 1-4 条数据通道(Data Lane)。每条通道都是点对点的单向连接,时钟永远从主机发向设备,数据也是主机到设备的方向。当然 D-PHY 也支持双向,但 DSI 协议里通常只用到单向。

每个通道内部,物理上是一个差分对,也就是两条走线 —— Dp 和 Dn。接收端通过检测两条线之间的电压差值来恢复数据,而不是对地电压。这就是差分信号的好处:抗干扰能力强、EMI 低。

嗯,这里要注意,D-PHY 的每个通道内部不只是两根线和一对差分缓冲器那么简单。我来拆解一下 D-PHY IP 内部的主要模块:

模块名称功能说明
HS-TX高速发送器,输出 100mV 差分摆幅,速率最高可达 2.5 Gbps
LP-TX低功耗发送器,输出 1.2V 单端信号,速率约 10 Mbps
HS-RX高速接收器,检测差分信号的 0/1 状态
LP-RX低功耗接收器,检测单端电压来判断 LP-00、LP-01、LP-10、LP-11 四种状态
Termination高速模式下启用的 100Ω 终端电阻,用来匹配差分阻抗
Byte Clock Gen将高速串行时钟分频,产生字节时钟供协议层使用

我记得第一次画 MIPI DSI 原理图时,以为 D-PHY 就是一对差分对走线插上电平转换器就行。实际看 datasheet 才发现,D-PHY 内部有复杂的状态机和协议控制逻辑,光是 LP 状态切换的时序就有几十个参数要配置。后来我习惯了在设计阶段就用 SI 仿真的方式把走线阻抗和终端匹配都算清楚,而不是凭经验估计。

传输线模型:高速信号逃不开的物理定律

当 DDR 速率跑到 800Mbps 以上时,D-PHY 的物理层就进入了传输线世界。通俗地讲,信号在 PCB 上传播的速度大约是 15cm/ns,如果你的走线长度正好等于信号上升时间对应的传播距离,反射和串扰就会变得不可忽略。

D-PHY 对传输线阻抗有明确要求:单端 50Ω,差分 100Ω。在高速模式下,信号幅度只有 200mV 摆幅的差分信号,任何阻抗失配都会造成回波损耗,直接吃掉眼图裕量。

  • 微带线 vs 带状线: 我习惯在顶层走 MIPI 信号,控制到参考平面距离,保证单端 50Ω。
  • AC 耦合电容: 记住 MIPI D-PHY 要求 100nF 的隔直电容必须 靠近发送端,而且电容封装建议 0201 或 0402 来降低寄生电感。
  • 等长约束: 同一条通道的 Dp 和 Dn 长度差不超过 5mil,通道间长度差不超过 100mil。这个真的不能马虎,因为差 10mil 就可能产生 1.6ps 的歪斜,对 2Gbps 信号来说已经足够影响采样窗口了。
  • 过孔换层: 尽量避免 D-PHY 信号换层。不得不换的时候,给差分对加回流地过孔,间距小于上升时间对应的空间距离。

我遇到过一个问题——某次单板 DSI 屏幕花屏,用示波器抓时钟通道的眼图,居然看到明显的台阶和振铃。后来用 TDR(时域反射计)测了一下走线阻抗,结果发现有一段走线因为在 BGA 焊盘下面经过了两个不连续的过孔,局部阻抗降到了 60Ω 左右。补上回流通孔并缩短 stub 后,眼图就没问题了。这个坑我踩过,所以现在做 D-PHY 布局时总会在关键路径上预埋 TDR 测试焊盘,方便调试。

高速与低功耗模式:优雅的「双速驱动」

D-PHY 的巧妙之处在于把高速传输和低功耗控制两种需求优雅地融合在同一个物理链路上。你能想象吗?显示接口既要传输每秒上 G 的数据流,又要支持屏幕的睡眠、唤醒、命令写入等低速交互,如果全都用高速模式跑,功耗和 EMI 简直是个灾难。

D-PHY 的解决方案是两种工作模式:

High Speed (HS) 模式

  • 差分信号,共模电压约 200mV,摆幅 100mV - 200mV
  • 每通道速率从 80 Mbps 到 2.5 Gbps 不等
  • 启用了 100Ω 终端电阻
  • 持续模式:发送完成后立刻进入 LP-11(停止态)

Low Power (LP) 模式

  • 单端信号,电压轨从 0V 到 1.2V,信号幅度 1.2V
  • 速率大约 10 Mbps
  • 未启用终端电阻,功耗极低
  • 用于命令发送、总线仲裁(双向时)、以及 HS 的前导/退出序列

那高速和低功耗模式到底是怎么切换的呢?这其实依赖于 D-PHY 的电气序列。一条数据通道的 LP 有三种逻辑状态:LP-00、LP-01、LP-10 和 LP-11,分别由 Dp 和 Dn 的电压组合编码而来。而高速传输前,发送方先发出 LP-11 → LP-01 → LP-00 序列,发送方在进入 LP-00 后,经过 SoT(Start of Transmission)序列将链路置入差分模式。接收端检测到序列后同步启用终端电阻和差分接收器。

举个例子:一条数据通道从 LP 切换到 HS 的完整时序大致是这样:

  1. LP-11(停止态): 空闲状态,Dp、Dn 都是 1.2V。
  2. LP-01 → LP-00: 前导序列,告诉接收方准备接收。
  3. HS 前导: 发送方先发 8 个周期的 HS-0(Dp 低、Dn 高),把链路从 LP 域平滑切换至 HS 差分域。
  4. HS 数据包: 差分信号以持续方式发送,HS-RX 有效。
  5. HS 后导 + LP-11: 发送完数据后回到 LP-11,链路重新进入低功耗空闲态。

个人经验: 我在实际硬件调试时,喜欢先去拉一把 D-PHY 的专有调试寄存器(比如 CSI/DSI 控制器的 Lane State 监测寄存器)。它能实时读出 LP 状态,方便我确认链路是否正常进入了 HS 模式。如果在 LP 序列就卡住了,那大概率是电平或者终端电阻配置错了。

D-PHY 物理层核心逻辑图

D-PHY 物理层框架 主机协议层 Test Pattern Gen D-PHY PHY HS/LP TX + RX + Term 差分传输线 100Ω 差分阻抗 设备端 PHY HS/LP RX 设备协议层 Display Ctrl HS/LP 切换时序 LP-11 → LP-01 → LP-00 → HS 前导 → HS 数据 → LP-11 停止态 8-bit 像素 串行位流 HS/LP 切换 像素/命令 硬件走线
⚠️ 关键提醒: 如果 LP 状态机卡死或 HS 前导时长不足,接收端可能无法正确识别开始位,导致整个数据包被丢弃。我曾经在调试中遇到一个罕见的问题:示波器抓到的 LP 序列波形完全正确,但接收端就是无法进入 HS 模式,后来排查发现是 LP 时钟与 HS 主时钟之间的相位关系不对,导致前导序列被采样错误。嗯,最终我在 PHY 的时钟域同步逻辑里加了一处重新同步的器件才解决。

高速与低功耗模式的差异一览

特性高速 (HS) 模式低功耗 (LP) 模式
信号形式差分 (Dp-Dn)单端 (Dp 和 Dn 各自独立)
摆幅/电压约 100-200 mV (峰峰值)0V 到 1.2V (轨对轨)
速率80 Mbps – 2.5 Gbps约 10 Mbps
终端电阻启用 100Ω断开
功耗高 (每通道几十 mW)极低 (μW 级)
用途传输像素数据、高频命令命令交互、总线仲裁、睡眠唤醒
电气编码NRZ(不归零码)电压编码(4 种 LP 状态)

我个人调试建议: 当你拿到一块新板子时,最好先用逻辑分析仪抓一下 DSI 时钟通道的 LP 状态序列,确认它是否按 D-PHY 规范的要求正确切换到了 HS 模式。如果有逻辑分析仪支持 MIPI D-PHY 协议解码,那就更方便了,直接看解码后的 SoT 和 EoT 序列,就能快速判定链路能否进入高速模式。