4. AUX 通道详解:事务协议、读写操作与 Native / I2C 区别

AUX(Auxiliary)通道是 eDP 链路中除主链路(Main Link)和热插拔检测(HPD)之外的第三条逻辑通道。它承担着链路训练参数协商、显示能力读取(EDID)、显示控制(DPCD 寄存器读写)以及 MCCS 命令透传等关键任务。本章将深入解析 AUX 事务协议、读写操作流程,并重点区分 Native AUX 与 I2C-over-AUX 两种模式。

核心要点:AUX 通道是 eDP 通信的“控制面”,所有链路训练参数(如电压摆幅、预加重、通道数、速率)均通过 AUX 写入 DPCD 寄存器。AUX 事务失败是导致黑屏、闪屏、无法训练的最常见原因之一。

4.1 AUX 通道物理层与事务协议

AUX 通道采用差分信号(AUX+ / AUX-),运行在 1 Mbps 固定速率(eDP 1.4 及之前版本)。其事务协议基于请求-应答模型,所有事务由 Source(主设备,如 SoC/GPU)发起,Sink(从设备,如 eDP 面板)响应。

AUX 事务协议模型 Source (主设备) SoC / GPU / eDP 控制器 Sink (从设备) eDP 面板 / TCON 请求 (Request) 命令 + 地址 + 数据 (写) / 长度 (读) 应答 (Reply) ACK / NACK / 数据 (读) / 缺陷 (Defect) AUX 事务时序约束 • 每个事务由 1 个请求 + 1 个应答组成,不可流水线化。 • 请求与应答之间间隔 ≤ 300 µs(超时即视为事务失败)。 • 单次事务最大数据负载:Native AUX 为 16 字节,I2C-over-AUX 为 16 字节。

4.1.1 事务帧结构

AUX 事务帧由 4 个部分组成:前导码(Preamble)、同步码(Sync)、数据包(Data Packet)和填充位(Stuffing)。其中数据包是核心,包含以下字段:

字段 位宽 说明
命令 (Cmd) 4 bits 定义事务类型:Native 读/写、I2C 读/写、I2C 写状态等
地址 (Address) 20 bits DPCD 寄存器地址(Native)或 I2C 从设备地址 + 偏移(I2C-over-AUX)
长度 (Length) 4 bits 数据负载字节数(0~16),0 表示无数据(仅地址查询)
数据 (Data) 0~128 bits 写事务时携带写入数据;读事务时由 Sink 在应答中返回
调试提示:逻辑分析仪抓取 AUX 总线时,重点关注命令字段和应答类型。常见的失败模式包括:NACK(从设备拒绝)、Defect(物理层错误)和超时(无应答)。这些通常指向面板未上电、HPD 未就绪或 AUX 线对短路/断路。

4.2 Native AUX 读写操作

Native AUX 是 eDP 标准定义的直接寄存器访问协议,用于读写 DPCD(DisplayPort Configuration Data)寄存器。DPCD 是 Sink 设备内部的一块地址空间,包含链路能力、训练状态、错误计数等关键信息。

4.2.1 Native AUX 写操作流程

  1. Source 发送请求:命令 = 0x8 (Native Write),地址 = 目标 DPCD 寄存器地址,长度 = N (1~16),数据 = 待写入的 N 字节。
  2. Sink 处理:将数据写入指定 DPCD 寄存器,完成后返回应答。
  3. Source 接收应答:若为 ACK,则写操作成功;若为 NACK,则需重试或检查地址合法性。

4.2.2 Native AUX 读操作流程

  1. Source 发送请求:命令 = 0x9 (Native Read),地址 = 目标 DPCD 寄存器地址,长度 = N (1~16),数据字段为空。
  2. Sink 处理:从指定地址读取 N 字节数据,封装在应答中返回。
  3. Source 接收应答:解析应答中的数据字段,若为 NACK 或数据长度不匹配,则视为读失败。
Native AUX 读写操作序列 Native AUX 写 (Cmd=0x8) 1. Source → Sink: 请求 (地址 + 长度 + 数据) 2. Sink 写入 DPCD 寄存器 3. Sink → Source: ACK (成功) / NACK (失败) 4. Source 检查应答,失败则重试 Native AUX 读 (Cmd=0x9) 1. Source → Sink: 请求 (地址 + 长度, 无数据) 2. Sink 从 DPCD 读取数据 3. Sink → Source: ACK + 数据 (成功) 4. Source 解析数据,校验长度 调试中常用的 DPCD 寄存器 (Native AUX 地址) • 0x000~0x00F: 接收器能力 (最大速率、通道数、支持功能) • 0x100~0x107: 链路配置 (训练参数、电压摆幅、预加重) • 0x200~0x207: 链路状态 (训练成功/失败、错误计数、CR/CE 状态)

4.3 I2C-over-AUX 协议

I2C-over-AUX 是 eDP 标准中定义的另一种 AUX 事务模式,用于在 AUX 通道上模拟 I2C 总线协议。其主要用途是读取面板的 EDID(通过 I2C 地址 0x50)和 DDC/CI 命令透传。

4.3.1 I2C-over-AUX 事务类型

命令码 类型 说明
0x0 I2C Write 向 I2C 从设备写入数据,需指定从设备地址和寄存器偏移
0x1 I2C Read 从 I2C 从设备读取数据,需先通过 I2C Write 设置偏移地址
0x2 I2C Write Status 查询上一次 I2C 写操作的状态(用于长事务分段)
0x4 I2C Read (Mot) 带中间应答的 I2C 读(用于 E-DDC 分段读取)

4.3.2 I2C-over-AUX 读取 EDID 的典型流程

  1. I2C Write 设置偏移:Source 发送 I2C Write 请求,从设备地址 = 0x50 (EDID ROM),数据 = 目标偏移地址(如 0x00 表示 EDID 块 0 起始)。
  2. I2C Read 读取数据:Source 发送 I2C Read 请求,长度 = 128 (EDID 块大小),Sink 返回 128 字节数据。
  3. 分段读取(块 1 及以上):对于 EDID 扩展块,需先通过 I2C Write 设置偏移地址为 0x80(块 1 起始),再执行 I2C Read。
常见陷阱:I2C-over-AUX 单次事务最大数据负载为 16 字节,而 EDID 块大小为 128 字节。因此读取一个完整的 EDID 块需要拆分为 8 次 I2C Read 事务(每次 16 字节)。Source 必须正确处理分段和中间应答,否则会导致 EDID 读取不完整或校验和错误。

4.4 Native AUX 与 I2C-over-AUX 的区别

两种模式在地址空间、事务语义、使用场景上存在本质差异。下表从多个维度进行对比:

对比维度 Native AUX I2C-over-AUX
地址空间 DPCD 寄存器地址 (20 bits, 0x00000~0xFFFFF) I2C 从设备地址 (7 bits) + 寄存器偏移 (8/16 bits)
事务语义 直接寄存器读写,无中间应答 模拟 I2C 总线协议,支持起始/停止条件、中间应答
最大数据负载 16 字节/事务 16 字节/事务
主要用途 链路训练参数配置、状态查询、错误监控 EDID 读取、DDC/CI 命令、MCCS 控制
应答类型 ACK / NACK / Defect ACK / NACK / Defect + I2C 中间应答 (MOT)
地址冲突风险 无(DPCD 地址唯一) 存在(多个 I2C 设备共享总线,需地址仲裁)
调试复杂度 较低(直接映射寄存器) 较高(需模拟 I2C 状态机)
Native AUX vs I2C-over-AUX 协议栈对比 Native AUX DPCD 寄存器读写 Native AUX 事务层 AUX 物理层 (1 Mbps) I2C-over-AUX EDID / DDC / MCCS 应用 I2C 总线模拟层 AUX 物理层 (1 Mbps) 两种模式共享同一 AUX 物理层,但事务层语义和地址空间完全不同

4.5 调试实践:AUX 事务日志分析

在嵌入式系统调试中,通过 AUX 事务日志可以快速定位链路训练失败的原因。以下是一个典型的 Native AUX 写操作日志示例:

[AUX] Cmd=0x8 (Native Write) Addr=0x00100 Len=1 Data=0x41
[AUX] Reply: ACK (0x00)
[AUX] Cmd=0x8 (Native Write) Addr=0x00101 Len=1 Data=0x06
[AUX] Reply: ACK (0x00)
[AUX] Cmd=0x9 (Native Read)  Addr=0x00202 Len=1
[AUX] Reply: ACK Data=0x01  ← 链路训练成功 (CR=1, CE=1)

常见异常日志模式及排查方向:

日志模式 可能原因 排查方向
连续 NACK DPCD 地址无效、面板未初始化、HPD 未拉高 检查 HPD 电平、面板上电时序、DPCD 地址范围
Defect 应答 AUX 物理层故障(短路、断路、电平异常) 测量 AUX 差分对波形、检查连接器焊接
超时 (Timeout) Sink 未响应、AUX 线对断开、面板未供电 确认面板电源、复位时序、AUX 线缆完整性
I2C NACK 后重试 EDID 读取时偏移地址错误、I2C 从设备忙 验证 I2C 地址 (0x50)、分段读取逻辑、重试次数
调试工具推荐:使用逻辑分析仪(如 Saleae、Kingst)抓取 AUX 差分信号,配合 eDP 协议解析插件,可以实时查看每个事务的命令、地址、数据和应答状态。这是排查 AUX 通信问题最直接有效的手段。