039、MIPI C-PHY vs D-PHY——不仅仅是lane数量的差异——从协议开销到PCB布局的工程对比——高帧率场景下C-PHY的时序收敛实战
039、MIPI C-PHY vs D-PHY——不仅仅是lane数量的差异——从协议开销到PCB布局的工程对比——高帧率场景下C-PHY的时序收敛实战
去年秋天,我们在一款旗舰手机的前摄方案上栽了个跟头。Sensor端用的是三星JN1,平台是骁龙8 Gen2,接口选的是C-PHY 3-lane,理论上带宽是D-PHY 4-lane的1.4倍,跑4K60毫无压力。结果一上电,预览画面在暗光下出现横向条纹,亮度越高越明显,最后定位到是C-PHY的symbol error率超标——不是sensor的问题,不是ISP的问题,是PCB上那几根线的阻抗连续性在作怪。那段时间我每天抱着TDR(时域反射计)在实验室里蹲到凌晨,把C-PHY和D-PHY的差异从协议层到物理层重新捋了一遍,才明白这俩接口的差距远不止“少一根lane”这么简单。
先说说协议开销。D-PHY是源同步差分接口,每个lane有独立的时钟lane,数据lane上每个bit周期对应一个时钟沿,协议开销主要花在同步头(SoT)和行尾(EoT)上,开销占比固定,大约在3%到5%之间。C-PHY则完全不同,它没有独立的时钟lane,时钟信息是嵌入在数据lane的三电平编码里的——每个lane上同时传输三根线(A、B、C),每根线在三个电平(高、中、低)之间跳变,一个symbol周期内三根线的组合状态有27种,但合法跳变只有7种(因为每次跳变必须保证至少一根线变化,且不能出现“全不变”或“全变”的非法状态)。这意味着C-PHY的每个symbol携带的信息量是log2(7)≈2.807 bit,而D-PHY每个bit就是1 bit。所以C-PHY 3-lane的理论带宽是3 × 2.807 × symbol_rate,而D-PHY 4-lane是4 × 1 × bit_rate。如果symbol_rate和bit_rate相同,C-PHY 3-lane确实比D-PHY 4-lane多出约5.4%的带宽——但这是理想情况。
实际工程中,C-PHY的协议开销比D-PHY高得多。因为C-PHY没有独立时钟,接收端必须从数据流中恢复时钟,这就需要在每个symbol周期内检测跳变沿。为了确保时钟恢复的可靠性,C-PHY协议规定每个symbol周期内至少有一根线发生跳变,这导致了一个关键问题:C-PHY的symbol rate不能无限提高,因为跳变沿的抖动(jitter)会直接影响时钟恢复的裕量。我们实测过,在同样的PCB板材和走线长度下,C-PHY的symbol rate超过2.5Gsps时,眼图闭合速度比D-PHY的bit rate超过3Gbps时快得多。原因在于C-PHY的三电平编码对串扰和反射更敏感——D-PHY是差分对,共模噪声可以被抑制,而C-PHY的三根线是单端信号,任何一根线上的噪声都会直接叠加到symbol判决上。
这就引出了PCB布局的差异。D-PHY的差分对走线有成熟的设计规则:100Ω差分阻抗、对内等长、对间等长、包地、远离时钟源。C-PHY的三线组(triplet)则复杂得多——它要求三根线之间保持严格的等长(误差小于5mil),而且三根线的间距必须一致,以保证三线之间的耦合系数相同。更麻烦的是,C-PHY的每根线都是单端50Ω阻抗,但三根线之间的串扰会改变有效阻抗——我们仿真时发现,如果三线间距小于2倍线宽,中间那根线的有效阻抗会下降10%以上,导致反射系数超标。所以C-PHY的PCB布局规则不是简单的“三根线等长等距”,而是要同时控制线宽、线距、参考平面距离,以及三线之间的耦合系数。
我们当时的问题就出在参考平面上。为了节省PCB面积,我们把C-PHY的三线组走在了内层,参考平面是电源层。结果电源层上有几个去耦电容的过孔,导致参考平面不连续,三线组的阻抗在过孔附近跳变了15Ω。TDR测试显示反射点就在过孔位置,symbol error率在高温下(85℃)飙升到10^-4量级。解决办法是把三线组换到表层,参考平面改为完整的地平面,同时在过孔区域加地孔阵列来缝合参考平面。改版后symbol error率降到10^-7以下,暗光条纹消失。
高帧率场景下的时序收敛是另一个坑。C-PHY的时钟恢复依赖于跳变沿,而跳变沿的抖动来源比D-PHY多——除了传统的电源噪声、串扰、ISI(码间干扰),还有三电平编码特有的“电平间串扰”。具体来说,C-PHY的每根线有三个电平,相邻symbol之间如果电平差不同,跳变沿的传播延迟就不同——从高到中的跳变和从中到低的跳变,由于接收端比较器的失调电压和带宽限制,会产生不同的延迟。这种延迟差异就是“电平相关抖动”(level-dependent jitter),它会导致时钟恢复的PLL锁定裕量下降。
我们实测过,在2.5Gsps symbol rate下,C-PHY的电平相关抖动可以达到0.15UI(单位间隔),而D-PHY在同样速率下的差分抖动只有0.05UI。这意味着C-PHY的时序预算更紧张——接收端的采样窗口更窄。为了收敛时序,我们做了三件事:第一,在sensor端调整C-PHY的驱动强度,从默认的6mA降到4mA,减小过冲和振铃;第二,在平台端增加接收均衡(RX equalizer),补偿高频损耗;第三,最关键的是调整PLL的环路带宽——从默认的2MHz降到800kHz,以滤除更多的抖动噪声。但环路带宽降低会延长锁定时间,所以我们又加了快速锁定模式,在开机初始化时用宽带宽快速锁定,进入稳定状态后再切到窄带宽。
这里有个经验值:C-PHY的PLL环路带宽应该设置为symbol rate的1/2000到1/5000,而D-PHY可以放宽到1/1000到1/2000。原因是C-PHY的抖动频谱更宽,需要更窄的环路来抑制高频抖动,但窄环路又会导致对低频漂移的跟踪变差——所以C-PHY的PLL设计比D-PHY更依赖VCO的相位噪声性能。我们对比过,同样工艺的PLL,C-PHY模式下的相位噪声要求比D-PHY模式低6dBc/Hz@1MHz offset,否则时序收敛不了。
还有一个容易被忽略的点:C-PHY的功耗比D-PHY高。因为三电平编码需要三个驱动电平,驱动器的线性度要求更高,静态功耗更大。我们实测过,在同样的有效带宽下,C-PHY 3-lane的功耗比D-PHY 4-lane高约20%。这在手机这种对功耗敏感的场景里是个不小的代价——尤其是前摄常开时,C-PHY的功耗优势会被抵消。所以如果带宽需求不是特别高,D-PHY 4-lane反而更划算。
最后说说跨域迁移的经验。我们在车载环视项目里也用过C-PHY,但车载的线缆长度和连接器质量比手机差得多,C-PHY对连接器回损的敏感度更高——同样的连接器,D-PHY能跑2.5Gbps,C-PHY只能跑1.8Gsps。所以车载场景我们最终放弃了C-PHY,回归D-PHY。这不是C-PHY不好,而是它的物理层特性决定了它对信道质量的要求更苛刻。
给各位同行的建议:如果你在选型,先算清楚有效带宽需求,别只看理论峰值。C-PHY的理论带宽优势在短距离、高质量信道下才能兑现,一旦走线超过10cm或者经过连接器,优势就大打折扣。如果你已经在用C-PHY,调试时优先查三线组的等长和参考平面连续性,用TDR扫一遍比看眼图更直接。时序收敛时,先调驱动强度,再调均衡,最后动PLL——顺序别反了,否则你会陷入“调了均衡又得重调PLL”的循环。还有,C-PHY的测试治具和D-PHY不通用,别省那个钱,买原厂的测试板,否则你测出来的symbol error率全是治具的反射贡献的。