4. C-PHY物理层基础:C-PHY 3-Tap调制、三线差分信号、Trio概念、Symbol与Word映射

MIPI C-PHY 是 MIPI 联盟为摄像头与显示接口定义的高速串行物理层标准。与传统的 D-PHY 使用差分对(Data/Clock)不同,C-PHY 采用 3-Tap 调制 与 三线差分信号 技术,在更少的引脚上实现更高的带宽。本章深入剖析 C-PHY 的核心物理层概念,包括 Trio 结构、Symbol 编码以及 Word 映射机制,为后续的 Linux 驱动调试与信号完整性分析奠定基础。

4.1 三线差分信号与 Trio 概念

C-PHY 的基本传输单元是 Trio,即一组由三根导线组成的差分信号组。与 D-PHY 的“一对线传一个 bit”不同,C-PHY 通过三根线之间的电压差组合来编码信息。

核心概念: 在任意时刻,Trio 中的三根线(A、B、C)处于三种不同的电压状态:高(High)、低(Low)和中间(Mid)。每根线的电压相对于其他两根线是唯一的,从而形成 6 种可能的“线序状态”。
为什么用三线? 三线差分信号在相同引脚数下(对比 D-PHY 的 2 线差分对)能提供更高的带宽密度,且不需要独立的时钟线,时钟信息嵌入在数据跳变中。

Trio 状态与电压关系:

  • High (H): 电压最高,通常为 1.2V(HS 模式)。
  • Low (L): 电压最低,通常为 0V(GND)。
  • Mid (M): 电压介于 High 和 Low 之间,通常为 0.6V。

三根线在同一时刻必须处于三种不同的状态,即 {H, M, L} 的一个排列。因此,一个 Trio 在稳态下共有 3! = 6 种 不同的状态组合。

C-PHY Trio 三线状态与电压电平 Trio 三线状态示例 (A, B, C) = (H, M, L) A (H) B (M) C (L) 1.2V (H) 0.6V (M) 0.0V (L) 6 种可能状态:3! = 6

4.2 C-PHY 3-Tap 调制原理

C-PHY 采用 3-Tap 调制(也称为 3-Phase Modulation)来传输数据。其核心思想是:数据不是通过绝对电压值编码,而是通过 Trio 线序状态的跳变(Transition)来编码。

在每一个 UI(Unit Interval,单位间隔) 内,Trio 的状态会从一个有效状态跳变到另一个有效状态。由于有 6 种状态,从一个状态跳变到另一个状态(不包括自身)共有 6 × 5 = 30 种 可能的跳变。然而,C-PHY 标准规定,在跳变时,至少有一根线的状态必须改变,且不能出现“所有线都翻转”的情况(即不能从 HML 变为 MLH 这种完全反转)。这进一步限制了有效跳变数量。

关键限制: 3-Tap 调制不允许“无跳变”和“全翻转”两种模式。这保证了时钟信息始终嵌入在数据流中,且降低了 EMI(电磁干扰)。

有效跳变数量计算:

  • 总可能跳变:6 × 5 = 30
  • 禁止的“全翻转”跳变:每个状态有 1 个对应的全翻转状态(例如 HML 的全翻转是 MLH),共 6 个。
  • 禁止的“无跳变”:6 个(自身到自身)。
  • 有效跳变:30 - 6 - 6 = 18 种。

这 18 种有效跳变可以编码 log₂(18) ≈ 4.17 bits 的信息。在实际应用中,C-PHY 每个 UI 传输 16 bits 的数据,这通过将多个 Trio 组合(通常是 3 个 Trio)以及更复杂的映射表来实现。

C-PHY 3-Tap 状态跳变示例 3-Tap 调制:状态跳变示例 (UI 边界) UI n 状态: HML (A:H, B:M, C:L) 跳变 UI n+1 状态: MHL (A:M, B:H, C:L) 跳变 UI n+2 状态: LHM (A:L, B:H, C:M) 跳变规则 至少一根线改变状态,且不能全翻转。有效跳变共 18 种。 线状态变化 (UI n → UI n+1) A: H→M (变化) | B: M→H (变化) | C: L→L (不变)

4.3 Symbol 与 Word 映射

在 C-PHY 协议栈中,物理层传输的基本数据单元是 Symbol,而更高层(如 CSI-2)处理的是 Word。理解两者之间的映射关系是驱动开发的关键。

4.3.1 Symbol 定义

一个 Symbol 对应一个 Trio 在一个 UI 内的状态跳变信息。由于每个 UI 有 18 种有效跳变,一个 Symbol 可以承载 log₂(18) ≈ 4.17 bits 的信息。但在实际实现中,为了简化逻辑,C-PHY 通常将 3 个 Trio(即 3 个 Lane)组合起来,在一个 UI 内传输 16 bits 的数据。

Symbol 与 Lane 的关系: 一个 C-PHY 链路可以包含 1、2 或 3 个 Lane。每个 Lane 包含一个 Trio。因此,一个 3-Lane 的 C-PHY 链路在一个 UI 内可以传输 3 个 Symbol,共同编码 16 bits 数据。

4.3.2 Word 映射机制

Word 是 CSI-2 协议层与物理层之间的数据交换单位。标准的 C-PHY 映射方式如下:

参数 值 说明
Lane 数量 3 每个 Lane 包含一个 Trio
每个 UI 传输 bits 16 由 3 个 Symbol 共同编码
Symbol 编码效率 16/3 ≈ 5.33 bits/Symbol 高于理论最大值 4.17 bits,通过查表实现
映射方式 查表法 (LUT) 将 16-bit Word 映射到 3 个 6-bit Symbol 上

映射流程:

  1. 发送端: CSI-2 层将 16-bit 的并行数据(Word)发送给 C-PHY 物理层。
  2. 编码: C-PHY 编码器通过一个预定义的映射表(LUT),将 16-bit Word 转换为 3 个 6-bit 的 Symbol 编码(每个 Symbol 对应一个 Trio 的跳变指令)。
  3. 发送: 每个 Lane 的驱动器根据 Symbol 指令,在下一个 UI 内驱动 Trio 的三根线完成相应的状态跳变。
  4. 接收端: 接收器检测每个 Trio 的状态跳变,解码出 3 个 Symbol,再通过逆映射表还原出 16-bit Word。
C-PHY Word 到 Symbol 映射架构 16-bit Word 到 3×Symbol 映射架构 16-bit Word 来自 CSI-2 层 映射表 (LUT) 16-bit → 3×6-bit 编码/解码 Symbol 0 Symbol 1 Symbol 2 → Lane 0 (Trio A) → Lane 1 (Trio B) → Lane 2 (Trio C) 关键点:每个 Symbol 控制一个 Trio 在下一个 UI 的跳变方向 接收端通过检测跳变反向映射回 16-bit Word

4.4 关键参数对比:C-PHY vs D-PHY

为了更清晰地理解 C-PHY 的优势,下表对比了 C-PHY 与 D-PHY 在物理层的关键差异:

特性 C-PHY D-PHY
信号线结构 三线差分 (Trio) 双线差分对 (Data/Clock)
每 Lane 引脚数 3 根 (无独立时钟) 2 根 (Data) + 2 根 (Clock)
时钟嵌入 是 (通过数据跳变) 否 (独立时钟线)
每 UI 传输 bits (3-Lane) 16 bits 3 bits (每 Lane 1 bit)
带宽密度 高 中
EMI 特性 更低 (无同步时钟翻转) 较高 (时钟谐波)
驱动复杂度 高 (需要 3-Tap 调制器) 低 (标准差分驱动)
驱动开发启示: 在 Linux 驱动中,配置 C-PHY 时,需要特别注意 PHY 的 映射表 (LUT) 是否正确加载,以及 Trio 的线序极性 (Polarity) 是否与 PCB 布局匹配。错误的极性配置会导致 Symbol 解码错误,表现为图像花屏或链路不稳定。

4.5 本章小结

  • Trio 是 C-PHY 的基本物理单元,由三根线组成,具有 6 种稳态。
  • 3-Tap 调制 通过 Trio 状态跳变编码数据,每个 UI 有 18 种有效跳变。
  • Symbol 对应一个 Trio 的跳变信息,Word 是协议层的数据单位。
  • 在 3-Lane 配置下,一个 16-bit Word 通过映射表转换为 3 个 Symbol,分别控制 3 个 Trio 的跳变。
  • 理解 Symbol 与 Word 的映射关系,是调试 C-PHY 链路信号完整性的前提。