2. 物理层(Phy)时序
聊到MIPI物理层,有两个标准绕不开——D-PHY和C-PHY。我平时调试多路摄像头切换,大部分坑都跟这俩的时序差有关。今天我们就把它说透。
2.1 D-PHY和C-PHY,到底差在哪?
D-PHY是老大哥,用得最广。C-PHY是后来出来的,为了省引脚、提速率。你想想看,一个摄像头模组就那么多引脚,C-PHY一根线就能传数据和时钟,省掉一对时钟线,对模组小型化极有帮助。
| 特性 | D-PHY | C-PHY |
|---|---|---|
| 时钟通道 | 独立差分时钟对 | 时钟嵌入数据中(无独立时钟线) |
| 数据通道 | 1~4条差分数据对 | 1~3条3线数据对(triplet) |
| 每lane速率 | 最高2.5 Gbps/lane | 最高约2.5 Gsymbol/s每triplet(等效更高数据率) |
| 信号类型 | 差分(HS)+ 单端(LP) | 3线差分(HS)+ 单端(LP) |
| 抖动容忍度 | 对时钟抖动敏感 | 靠冗余编码鲁棒性更强 |
我个人习惯:在项目初期选型时,如果摄像头数量多、板子空间紧,我会优先考虑C-PHY;如果对时序余量要求高、调试工具成熟,那就还是D-PHY。有一次我在一个16路摄像头项目中用了D-PHY,结果FPC排线太长,时序吃紧,后来换成C-PHY反而稳了——因为它对线间时滞不那么敏感。
2.2 时钟通道与数据通道的关系
这是调试中最容易迷惑的地方。我先说D-PHY。
D-PHY:时钟通道是独立的差分对,数据通道也是差分对。时钟信号是DDR(双倍数据率)模式,每个时钟周期内传两个bit——上升沿和下降沿各采一次。数据lane与时钟lane之间必须满足建立时间和保持时间。说白了,就是数据相对时钟的相位要对齐。我习惯在主控端先反相时钟再采样,这样setup/hold余量更均衡。
C-PHY:没有独立的时钟线。时钟信息嵌在三根线(A、B、C)的跳变沿里。每根线只有两种电平(0或1),但三根线同时变化,每单位时间有6种合法状态(3-bit符号)。数据从符号间的相位差里读出来。嗯,这里要注意:C-PHY的接收端必须自己做时钟恢复,对PLL要求更高。
2.3 低速与高速模式切换
MIPI物理层有一个漂亮的设计:LP(低功耗)和HS(高速)两种模式。在摄像头不传输数据时,用LP模式省电;需要传数据时,瞬间切到HS模式。切换过程有一套严格的时序要求,搞不好就会丢包甚至烧坏接口。
我记得在第一次调试某款传感器时,发现MIPI总线总是超时,后来用示波器抓到LP→HS切换的那个瞬态毛刺,才发现是系统侧驱动的slew rate不够快。嗯,这里要注意:LP和HS的电压摆幅完全不同,LP是0~1.2V,HS是差分200mV左右,切换时如果匹配不好,会有一段不确定状态。
| 时序参数 | 最小值 | 典型值 | 最大值 | 说明 |
|---|---|---|---|---|
| TLPX | 50 ns | — | — | LP 脉冲宽度(用于状态信令) |
| THS-PREPARE | 40 ns | 80 ns | — | HS 准备时间 |
| THS-ZERO | 40 ns | 80 ns | — | HS 零期(驱动HS电平前) |
| THS-EXIT | — | 100 ns | — | 退出HS到LP的缓冲时间 |
| TTA | — | — | 可配置 | 总线周转时间(用于双向通信切换) |
切换流程本质上是一个状态机:从LP11(停靠态)→ LP01 → LP00 → HS → LP11。每个状态维持的时间都由控制器精确控制。我习惯在看MIPI规范里的Figure 26(D-PHY)和Figure 14(C-PHY)时,旁边放一个逻辑分析仪抓实际波形对比,很容易找到时序违规的地方。