3、D-PHY物理层特性:差分信号、LP/HS模式切换、电压电平标准
大家好,我是老张。今天咱们聊D-PHY的物理层。说实话,很多工程师调MDIO时链路通了,但图像花屏、闪屏,最后查出来是物理层配置没对。我个人习惯把物理层比作“信号公路”——路修不好,车再好也白搭。
D-PHY物理层,说白了就是差分信号对加上两种工作模式:LP(低功耗)和HS(高速)。你想想看,手机摄像头每秒传几十帧高清画面,全靠这一对线在高速和低功耗之间来回切换。嗯,先从最基础的差分信号讲起。
3.1 差分信号:为什么非要用它?
D-PHY的数据线和时钟线都是差分对——Dp和Dn。信号不接地,而是靠两根线的电压差来表示逻辑“0”和“1”。
- 抗共模干扰:外部噪声同时加到Dp和Dn上,差分信号只差,噪声被抵消。我在一个项目中遇到过电源纹波很大,换成差分后问题直接消失。
- 低电压摆幅:HS模式下差分电压才200mV左右,功耗极低。
- 无参考地依赖:发送端和接收端可以地电位不一样,差分对能容忍一定共模偏移。
关键参数:
- 单端电压范围:0V ~ 1.2V(典型)
- 差分电压(HS): |Vdp - Vdn| ≈ 200mV
- 共模电压(HS): ~200mV(相对GND)
注意:差分对的PCB走线必须等长,不然skew会吃掉你的眼图。我曾经因为一条线长了2mm,导致800Mbps数据出错。忍了。
3.2 LP/HS模式切换:两个世界,一条线
D-PHY的每条差分线既要传低速控制信号(LP),又要传高速数据(HS)。怎么做到的?答案就是切换。
LP模式下,Dp和Dn分别独立驱动,电压是0~1.2V的单端逻辑。典型的LP状态有四种:
| 状态 | Dp电压 | Dn电压 | 含义 |
|---|---|---|---|
| LP-00 | 0 | 0 | 桥接(Bridge) |
| LP-01 | 0 | 1.2V | HS请求 |
| LP-10 | 1.2V | 0 | 高速退出 / 反向HS准备 |
| LP-11 | 1.2V | 1.2V | 停止(Stop) |
HS模式下,Dp/Dn变成差分对,驱动一个摆幅约200mV的差分信号。切换过程有严格时序:先通过LP-01请求,然后进入一个“桥接”期,最后差分驱动拉起来。我建议在设计MDIO脚本时,一定要检查从LP到HS的转换时间是否在规范之内(通常几十纳秒)。
避坑指南:我曾经在调试一块CMOS sensor时,发现LP-01请求后HS一直起不来。查了三天,最后发现是终端电阻没使能。D-PHY要求HS模式下终端电阻必须打开(100Ω差分),否则信号反射会把眼图关掉。
3.3 电压电平标准:别以为只是0和1.2
D-PHY的电压电平比标准GPIO复杂得多。HS模式下,共模电压Vcm约200mV,差分摆幅100~300mV。LP模式下,单端高电平=1.2V,低电平=0V。但注意:
- LP接收器的阈值:VIL ≤ 0.3V,VIH ≥ 0.88V。
- HS接收器的共模范围:50mV ~ 450mV(相对GND),差分阈值±50mV。
- 发送端LP驱动:电流源型,输出阻抗约40~50Ω。
这里容易掉坑:很多开发板用3.3V电平去驱动LP模式,烧芯片是小事,关键是HS模式下的共模点会跑偏。我建议MCU或FPGA的D-PHY IO口必须用专用PHY芯片,或者确认IO支持MIPI电压。
⚠️ 警告:不要把普通GPIO直连D-PHY差分对!哪怕你只做LP通信也不行。差分线上的HS摆幅很小,普通GPIO的输入电容会把信号“吃掉”。
3.4 D-PHY物理层状态机简图
下面这张图梳理了从LP到HS再回LP的典型流程,也涵盖了主要的电压电平区域。我每次调试前都会先对着这个图看一遍链路,心里就有底了。
3.5 用MDIO能看什么?
既然咱们课程标题是《MDIO调试D-PHY链路问题》,那物理层特性跟MDIO有什么关系?嗯,我一般用MDIO读取PHY的以下几个寄存器来判断物理层是否正常:
| 寄存器地址 | 名称 | 能看什么 |
|---|---|---|
| 0x10 | PHY状态 | 是否检测到D-PHY时钟、数据lane极性 |
| 0x11 | LP/HS状态 | 当前D-PHY处于LP还是HS模式 |
| 0x12 | 电压电平告警 | 共模电压是否超范围、差分幅度是否不足 |
| 0x13 | 链路错误计数 | CRC错误、Escape模式错误等 |
实战经验:有一次客户说摄像头间歇性黑屏。我通过MDIO读到0x12寄存器告警位为1,显示共模电压偏低。后来发现是PCB上Dp/Dn的差分对有一个过孔导致阻抗不连续,共模点偏移了30mV。重做PCB后问题解决。
3.6 小结一下
D-PHY物理层看着简单,其实细节很多。差分信号的共模范围、LP/HS切换时序、电压阈值这三个地方,是我在项目中踩坑最多的。你记住一句话:MDIO能帮你看到物理层的“心电图”——电压电平、模式切换、错误计数都能反映在寄存器里。调链路时先读这些,别闷头改代码。