news 2026/10/14 10:54:14

通过 AUX 通道调试 DP Link Traning

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
通过 AUX 通道调试 DP Link Traning

1. Link Traning 流程

DP Sink 内部有一组标准寄存器,称为 DPCD(DisplayPort Configuration Data)。当 DisplayPort Source 和 Sink 建立连接后,Source 会通过 AUX(Auxiliary)通道读取和配置 Sink 的 DPCD 寄存器,从而完成链路训练。

调试时最常关注三个区域:

DPCD 地址作用
0x0000 ~ 0x000FSink Capability
0x0100 ~ 0x010FLink Configuration
0x0200 ~ 0x020FLink Status

整个 Link Training 过程主要包括以下几个阶段:

1.1. 读取 DPCD Capability

Sink 通过HPD (Hot Plug Detect)引脚的高电平通知 Source 当前的连接状态。Source 检测到 HPD 信号后,通过AUX (Auxiliary) 通道读取 Sink 端的DPCD (DisplayPort Configuration Data)寄存器,从而获取 Sink 的核心链路能力。

1.1.1 核心配置参数

  • Lane Count (通道数)

    • 核心定义:DisplayPort 物理层中用于传输高速视音频数据的差分对(对线)数量。
    • 规格配置:DP 标准允许灵活配置为1 Lane、2 Lanes 或 4 Lanes。
  • Link Rate (链路速率)

    • 核心定义:单条 Lane 上每秒传输的原始数据比特率,决定单通道的数据吞吐率。
    • 常见规格:
      • RBR(Reduced Bit Rate):1.62 Gbps/ Lane
      • HBR(High Bit Rate):2.70 Gbps/ Lane
      • HBR2(High Bit Rate 2):5.40 Gbps/ Lane
      • HBR3(High Bit Rate 3):8.10 Gbps/ Lane
  • Voltage Swing (电压摆幅)

    • 核心定义:差分信号正负峰值之间的电压差,决定了信号的绝对基准幅度。
    • DP 规格:分为Level 0 ~ Level 3(对应差分峰峰值约400mV到1200mV)。
  • Pre-emphasis (预加重)

    • 核心定义:一种高频补偿技术。对高频跳变信号(0 变 1 或 1 变 0 的第一个 Bit)进行瞬间电压放大,而对连续不变的低频信号进行物理衰减。
    • DP 规格:分为Level 0 ~ Level 3(对应约0dB到9.5dB的高频增强)。

1.2 Clock Recovery(时钟恢复)阶段 - Sink 能否从数据流中恢复时钟

由于 DP 物理接口不包含独立的物理时钟线,接收端(Sink)必须通过内置的锁相环(PLL)从发送端(Source)的时序数据流中提取并恢复出同步时钟。本阶段是整个链路训练(Link Training)的基础第一步。

1.2.1 发送 TPS1

首先,Source 根据 Sink 的能力确定本次 Link Training 使用的Lane Rate,并从最低的Voltage Swing和Pre-emphasis组合开始。

确定训练参数后,Source 通过AUX 通道向 Sink 的 DPCD 寄存器0x0102(TRAINING_PATTERN_SET)写入 TPS1 配置,通知 Sink 进入Clock Recovery阶段。

完成配置后,Source 在 Main Link 上发送 TPS1 训练序列,Sink 开始尝试从接收到的数据流中恢复时钟。

1.2.2 Voltage Swing 和 Pre-emphasis 组合

DP 通常定义 4 个 Voltage Swing 和 Pre-emphasis 等级:

LevelVoltage SwingPre-emphasis
0最低最低
1更高更高
2更高更高
3最高最高

Voltage Swing 和 Pre-emphasis 不能任意组合,传统 DP Link Training 中要求:

Voltage Swing Level + Pre-emphasis Level ≤ 3

因此,有效的组合包括:

Voltage SwingPre-emphasis 可选范围
00 ~ 3
10 ~ 2
20 ~ 1
30

例如,初始训练通常从:

Voltage Swing = Level 0 Pre-emphasis = Level 0

开始。

1.2.3 检查Clock Recorvery状态

Source 发送 TPS1 一段时间后,通过 AUX 通道读取 Sink 的 DPCD Link Status 寄存器:

0x0202 → LANE0_1_STATUS 0x0203 → LANE2_3_STATUS

其中,各 Lane 的 CR_DONE 用于表示 Clock Recovery 是否完成。

DPCD 地址LaneBit 0Bit 1Bit 2Bit 4Bit 5Bit 6
0x0202Lane 0CR_DONECHANNEL_EQ_DONESYMBOL_LOCKED———
0x0202Lane 1———CR_DONECHANNEL_EQ_DONESYMBOL_LOCKED
0x0203Lane 2CR_DONECHANNEL_EQ_DONESYMBOL_LOCKED———
0x0203Lane 3———CR_DONECHANNEL_EQ_DONESYMBOL_LOCKED

如果所有Lane的CR_DONE都为1则表示:Sink 已经成功从 Source 的数据流中恢复出时钟,Clock Recovery 完成。随后进入下一阶段。

1.3 通道均衡(Channel Equalization)

当 Clock Recovery 成功后,进入通道均衡(Channel Equalization)阶段。

此时继续使用 Clock Recovery 阶段确定的 Lane Rate、Voltage Swing和 Pre-emphasis 参数。Source 通过 AUX 通道向 DPCD 寄存器 0x0102(TRAINING_PATTERN_SET)写入对应的训练模式,然后在 Main Link 上发送 TPS2、TPS3 或 TPS4 中的一种训练序列。

Sink 接收到训练序列后,会对信号进行分析,检测高速信号经过传输通道后产生的失真,并通过内部 Equalizer 调整接收参数。

与此同时,Sink 会通过 DPCD 状态寄存器向 Source 反馈通道均衡的结果。Source 主要读取 DPCD 0x0202 和 0x0203 中各 Lane 的 LANEx_CHANNEL_EQ_DONE 状态位,用于判断对应 Lane 是否完成通道均衡。

当所有正在使用的 Lane 的 CHANNEL_EQ_DONE 均为 1 时,表示所有 Lane 均已完成 Channel Equalization,可以进入后续的 Symbol Lock 和 Inter-Lane Alignment 阶段。

1.4 符号锁定与 Lane 间对齐(Symbol Lock and Inter-Lane Alignment)

1.4.1 符号锁定 (Symbol Lock)

DP 使用特定的数据编码方式,Sink 需要从接收到的高速数据流中准确识别 Symbol Boundary(符号边界)。

当 Sink 成功完成符号锁定后,会在 DPCD 0x0202 和 0x0203 中设置对应的 LANEx_SYMBOL_LOCKED 状态位。表示对应 Lane 已完成符号锁定。

1.4.2 Lane 间对齐 (Inter-Lane Alignment)

对于多 Lane DP 链路,仅仅保证每个 Lane 独立工作还不够。

由于不同 Lane 经过的物理通道存在差异,各 Lane 到达 Sink 的时间可能不同。因此,Sink 还需要对不同 Lane 的数据进行延迟调整,使各 Lane 的数据重新同步。

这一过程称为 Inter-Lane Alignment(Lane 间对齐)。

Sink 通过 DPCD 0x0204(LANE_ALIGN_STATUS_UPDATED)反馈 Lane 间对齐状态,其中:

DPCD 0x0204 Bit 0 = INTERLANE_ALIGN_DONE

当:

INTERLANE_ALIGN_DONE = 1

表示所有使用中的 Lane 已经完成对齐。

1.5 视频流传输(Video Stream Transmission)

当上述所有 Link Training 步骤均成功完成后,表示 Source 与 Sink 之间的 DP Main Link 已经建立。

Source 通过读取 DPCD 0x0202(LANE0_1_STATUS)、0x0203(LANE2_3_STATUS)以及 0x0204(LANE_ALIGN_STATUS_UPDATED),确认各 Lane 的最终训练状态以及 Lane 间对齐状态。

确认训练成功后,Source 通过 AUX 将 DPCD 0x0102(TRAINING_PATTERN_SET)设置为 0,退出 Training Pattern。随后停止发送 TPS,并开始在 Main Link 上传输正常的 DisplayPort 视频数据。

2 AUX 信号采集

AUX 是低幅度的差分信号,普通逻辑分析仪的数字输入无法直接识别。

因此,需要先对 AUX 信号进行电平处理和整形,将差分模拟信号转换为逻辑分析仪可以识别的数字信号。

这里使用一块带有 Comparator(比较器) 的 STM32 开发板,通过 MCU 内部比较器对 AUX+ 和 AUX− 进行差分比较,将 AUX 信号转换成数字波形。

2.1 配置 STM32 Comparator

选择COMP1进行配置。

  • 勾选 Input[+], 选择Input[-]信号为INM
  • 勾选 ExternalOutput,表示将比较结果输出到外部。

比较器的基本工作原理是:

  • Input[+] > Input[-] → 输出高电平
  • Input[+] < Input[-] → 输出低电平

将待测试的 AUX 差分信号分别连接到 STM32:

  • AUX+ → COMP1_INM (PA0)
  • AUX− → COMP1_INP (PA1)

再将 比较器输出信号 COMP1_OUT(PA6) 接入 Logic Analyzer。

生成代码后,在程序中启动 COMP1:

HAL_COMP_Start(&hcomp1);

启动比较器后,AUX+ 和 AUX− 的差分电压经过比较器进行比较,原本的模拟差分信号就被转换成数字电平变化,随后即可使用 Logic Analyzer 进行采集。

2.2 AUX 信号电平处理

为了让 STM32 内部比较器能够可靠地处理 AUX 信号,这里采用交流耦合 + 直流偏置的方式对输入信号进行处理。

首先,通过电容进行交流耦合,隔离 AUX 信号中的直流电平,只保留信号的变化部分。

然后,通过电阻网络增加一个直流偏置,将比较器输入端的共模工作点设置在电源电压中间附近:

3.3 V / 2 ≈ 1.65 V

这样,经过处理后的 AUX 信号会以约 1.65 V 为中心上下摆动,同时 AUX+ 和 AUX− 之间的差分变化仍然可以被比较器检测到。

下面是具体的电路:

3 解码 AUX Channel 信号

3.1 安装 AUX Analyzer

采集到 AUX 的数字波形后,还需要对波形进行协议解析。这里使用开源的 AUX Analyzer 对 DisplayPort AUX Channel 进行解码。

首先下载 AUX Analyzer 扩展包:

https://github.com/Alex-the-Smart/DPAUXAnalyzer/tree/master/compiled/x64

将下载后的文件拷贝到 Logic 软件的 Analyzer 目录:

Logic\resources\windows-x64\Analyzers

重新打开 Logic 软件,在 Analyzer 列表中可以看到AUX Analyzer。

点击Add Analyzer,添加 AUX Analyzer。

然后选择需要分析的 Logic Analyzer Channel。

完成配置后,Logic 就可以对采集到的 AUX 数字波形进行协议解码,将原始的高低电平转换成可读的 AUX Read / Write、地址以及数据等信息。

这样,后续就可以直接通过 AUX Analyzer 观察 DisplayPort 的 DPCD 读写、Link Training 以及其他 AUX 通信过程。

4 Native AUX 包格式

  • AUX request
Byte位字段含义
Byte 0[7:4]Command操作类型
[3:0]Address[19:16]地址高 4 位
Byte 1[7:0]Address[15:8]地址
Byte 2[7:0]Address[7:0]地址
Byte 3[7:0]LEN数据长度 - 1
Byte 4...DataWrite 时的数据
Command含义
0x80Native AUX Write
0x90Native AUX Read

示例:

字节内容含义
Byte 090Native AUXRead
Byte 102Address[15:8]
Byte 202Address[7:0]
Byte 302LEN = 2 →读取 3 Bytes
  • AUX reply
Byte字段含义
Byte 0ReplyAUX Reply 状态
Byte 1...DataRead 操作返回的数据
Reply含义
0x00ACK,操作成功
0x01NACK
0x02DEFER,需要稍后重试

示例:

字节内容含义
Reply00ACK
Data77 77 01DPCD 数据
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 10:54:13

轻量级折叠组件 ponytail:告别长文本截断与展开难题

1. 为什么会有 ponytail&#xff1a;它到底在解决什么问题1.1 拿“展开全文”当需求的人&#xff0c;都经历过什么先说一个场景&#xff1a;网站首页要放十几条资讯卡片&#xff0c;每条卡片展示 200 字的摘要&#xff0c;超出部分折叠。需求听起来很简单&#xff0c;但真做起来…

作者头像 李华
网站建设 2026/10/14 10:54:06

Spring容器初始化原理与优化实践详解

1. 容器初始化过程概述 在基于SpringSpringMVC的Java Web项目中&#xff0c;容器初始化是整个应用启动的核心环节。作为从业十余年的老手&#xff0c;我见过太多因为不理解容器初始化原理而导致的配置错误和性能问题。今天我们就来彻底拆解这个看似简单实则暗藏玄机的过程。 当…

作者头像 李华
网站建设 2026/10/14 10:53:53

Kubernetes中Jenkins插件路径查询与运维指南

1. Jenkins插件路径查询需求背景在Kubernetes集群中运行的Jenkins实例&#xff0c;其插件管理方式与传统物理机或虚拟机部署存在显著差异。由于容器化环境的动态特性&#xff0c;插件存储路径往往隐藏在Pod内部&#xff0c;这对日常运维中的插件调试、版本核对和故障排查带来挑…

作者头像 李华
网站建设 2026/10/14 10:52:46

SpringBoot智慧社区系统架构设计与实践

1. 项目背景与核心价值金牛小区智慧社区系统是一个基于SpringBoot框架开发的综合性社区治理与服务平台。作为一名参与过多个智慧社区项目开发的全栈工程师&#xff0c;我深刻理解这类系统在现代化社区管理中的实际价值。传统社区管理往往面临信息孤岛、服务效率低下、居民参与度…

作者头像 李华
网站建设 2026/10/14 10:52:46

CS2卡顿掉帧闪退黑屏?一套从软件到硬件的完整排查流程

1. 先搞清楚&#xff1a;卡顿、掉帧、闪退、黑屏卡死根本不是同一个问题很多人一遇到CS2出问题&#xff0c;第一反应就是“优化太差了”或者“我电脑不行了”&#xff0c;然后开始到处抄所谓的“终极优化配置”&#xff0c;结果折腾一整天&#xff0c;该卡还是卡。我踩过这个坑…

作者头像 李华
网站建设 2026/10/14 10:52:42

SVR回归实战:ε参数调优与高噪声小样本建模指南

1. 项目概述&#xff1a;这不是一个“调包跑通就完事”的SVR入门 你搜“SVR模型&python应用”&#xff0c;大概率正卡在这样一个真实场景里&#xff1a;手头有一组带噪声的工业传感器数据&#xff0c;温度、压力、振动值波动剧烈&#xff0c;但你想精准预测设备下一次维护窗…

作者头像 李华