3. CSI-2 物理层(C-PHY):C-PHY 3-Triplet 编码、速率优势与 D-PHY 对比
CSI-2 标准定义了两套物理层(PHY)方案:D-PHY(1.0/1.1/1.2)和 C-PHY(1.0/1.1/2.0)。C-PHY 是 MIPI 联盟为应对更高带宽需求而推出的替代方案,它通过创新的 3-Triplet 编码机制,在相同引脚数下实现了比 D-PHY 更高的数据吞吐量。本章将深入解析 C-PHY 的核心编码原理、速率优势,并与 D-PHY 进行系统对比。
3.1 C-PHY 物理层架构与 3-Triplet 编码
C-PHY 使用 3 根线(A、B、C)组成一个通道(Lane),每根线有三种电平状态:高(+)、低(-)、中(Z)。与 D-PHY 的二进制(0/1)不同,C-PHY 的每根线可以处于三种状态之一,因此一个 Triplet(三线组合)共有 3³ = 27 种可能的状态。
然而,C-PHY 并非直接使用这 27 种状态。它采用了一种称为 3-Triplet 编码 的机制,将数据映射到 线状态跳变 上,而非静态电平。这意味着接收端检测的是三根线之间电平关系的 变化,而不是绝对电平值。
3.1.1 3-Triplet 编码原理
在 C-PHY 中,数据不是通过单根线的电平来传输,而是通过三根线之间的 电压差跳变 来编码。每根线可以驱动为高(+)、低(-)或高阻(Z)状态。但有效的传输状态只有 6 种,称为 线状态(Wire States),它们满足以下约束:
- 三根线中,恰好有一根为高(+),一根为低(-),一根为高阻(Z)。
- 不允许出现两根线同为高或同为低的情况。
这 6 种有效线状态构成了一个循环。在每次传输(UI,Unit Interval)中,发送端必须从当前状态 跳变 到下一个有效状态。由于有 6 种状态,从当前状态出发,有 5 种可能的下一状态(不能保持原状态)。因此,每个 UI 可以传输 log₂(5) ≈ 2.32 比特的信息。
下图展示了 C-PHY 的 6 种有效线状态及其跳变关系:
3.1.2 3-Triplet 编码的数据映射
发送端将 16 位数据(2 字节)映射到 7 个 UI 中传输。因为 7 × 2.32 = 16.24 比特,略大于 16 比特,所以存在一些冗余状态用于控制或同步。这种映射关系由硬件编码器/解码器(Encoder/Decoder)自动完成,对软件透明。
下表展示了 C-PHY 与 D-PHY 在单 Lane 下的编码效率对比:
| 特性 | D-PHY(1 Lane) | C-PHY(1 Triplet) |
|---|---|---|
| 物理线数 | 2(Dp/Dn 差分对) | 3(A/B/C 三线) |
| 每 UI 传输比特数 | 1 比特(NRZ) | ≈ 2.32 比特(3-Triplet) |
| 典型数据映射 | 1 UI = 1 比特 | 7 UI = 16 比特 |
| 编码效率 | 1 比特/UI | 2.32 比特/UI |
| 时钟信号 | 独立时钟 Lane | 内嵌时钟(从数据跳变恢复) |
3.2 C-PHY 的速率优势
C-PHY 的核心优势在于 更高的每引脚带宽。在相同的 PCB 走线数量和相同的信号频率下,C-PHY 能提供比 D-PHY 更高的数据吞吐量。
3.2.1 速率计算公式
对于 D-PHY,单 Lane 的数据速率(Gbps)为:
DataRate_D-PHY = UI_Rate (Gbps) × 1 (bit/UI)
对于 C-PHY,单 Triplet 的数据速率(Gbps)为:
DataRate_C-PHY = UI_Rate (Gsym/s) × 2.32 (bit/symbol)
其中 UI_Rate 是信号跳变频率(Symbol Rate)。例如,当 UI_Rate 为 1 GHz 时:
- D-PHY 单 Lane 速率为 1 Gbps。
- C-PHY 单 Triplet 速率为 2.32 Gbps。
3.2.2 实际带宽对比(以 4 Lane / 3 Triplet 为例)
在高端摄像头传感器中,通常使用多 Lane 配置。下表对比了 D-PHY 4-Lane 与 C-PHY 3-Triplet 的典型带宽:
| 配置 | 物理线数(数据) | 典型 UI_Rate | 总带宽 | 每线带宽效率 |
|---|---|---|---|---|
| D-PHY 4-Lane | 8 根(4 对差分) | 2.5 Gbps | 10 Gbps | 1.25 Gbps/线 |
| C-PHY 3-Triplet | 9 根(3 组三线) | 2.5 Gsym/s | 17.4 Gbps | 1.93 Gbps/线 |
从上表可以看出,C-PHY 3-Triplet 在仅多用 1 根线的情况下,总带宽提升了 74%,每线带宽效率提升了 54%。这使得 C-PHY 成为高分辨率、高帧率摄像头(如 8K/30fps 以上)的首选物理层。
3.3 C-PHY 与 D-PHY 的全面对比
下表从多个维度对 C-PHY 和 D-PHY 进行了系统对比:
| 对比维度 | D-PHY | C-PHY |
|---|---|---|
| 信号线结构 | 差分对(2 线/Lane) | 三线组(3 线/Triplet) |
| 编码方式 | NRZ(非归零) | 3-Triplet 跳变编码 |
| 每 UI 比特数 | 1 比特 | ≈ 2.32 比特 |
| 时钟传输 | 独立时钟 Lane(DDR) | 内嵌时钟(从数据恢复) |
| 信号摆幅 | 200 mV(LP)/ 200 mV(HS) | 200 mV(HS) |
| 功耗效率 | 约 1.5 pJ/bit | 约 1.0 pJ/bit(更低) |
| 最高速率(v1.2/v1.1) | 2.5 Gbps/Lane | 5.8 Gbps/Triplet |
| PCB 布线难度 | 较低(差分对等长) | 较高(三线等长、阻抗匹配) |
| 兼容性 | 广泛支持(成熟生态) | 较新,高端 SoC 支持 |
| 典型应用 | 1080p/4K 摄像头 | 8K/高帧率/多摄像头 |
3.4 C-PHY 的物理层架构图
下图展示了 C-PHY 发送端(TX)和接收端(RX)的物理层架构,重点突出了 3-Triplet 编码器/解码器的位置:
3.5 驱动开发中的关键考量
在 Linux 内核驱动中对接 C-PHY 时,需要关注以下几点:
- PHY 配置寄存器: C-PHY 的 PHY 芯片(如 D-PHY 兼容的 C-PHY PHY)通常需要配置工作模式(D-PHY 或 C-PHY)、速率、均衡参数等。驱动需要通过 I2C/SPI 或 SoC 内部寄存器进行初始化。
- 时钟恢复(CDR)锁定: C-PHY 没有独立时钟,接收端必须依赖 CDR 电路从数据流中恢复时钟。驱动需要监控 CDR 锁定状态,并在失锁时触发重同步。
- Lane 映射与极性: 与 D-PHY 类似,C-PHY 也支持 Lane 重映射和极性反转。设备树中需要正确配置这些映射关系。
- 功耗管理: C-PHY 在低功耗模式下(ULPS)的行为与 D-PHY 不同。驱动需要实现正确的 ULPS 进入/退出序列,避免总线冲突。
3.6 本章小结
C-PHY 通过 3-Triplet 编码和 6 种有效线状态跳变,实现了每 UI 传输 2.32 比特的高效率。在相同引脚数下,C-PHY 的总带宽比 D-PHY 高出 70% 以上,同时功耗更低。然而,C-PHY 对 PCB 布线和信号完整性要求更高,且需要更复杂的 CDR 电路。在 Linux 内核驱动开发中,需要针对 C-PHY 的特性进行专门的配置和调试,尤其是在时钟恢复和功耗管理方面。