3. 显示时序基础:像素时钟、行同步、场同步与数据使能
在 SA8155 的 HDMI 显示链路中,GPU 生成的图像数据必须严格按照精确的时序信号进行传输,才能被显示器正确解析和显示。本章节将深入剖析构成显示时序的四大核心信号:像素时钟(Pixel Clock)、行同步(HSYNC)、场同步(VSYNC)和数据使能(DE),并介绍 VESA 与 CEA-861 两大标准体系。
核心要点:显示时序的本质是 GPU 与显示设备之间的一种“握手协议”。像素时钟提供数据传输的节拍,HSYNC 和 VSYNC 标记行与帧的边界,DE 信号则精确界定有效图像数据的范围。任何时序参数的偏差都可能导致画面偏移、闪烁或黑屏。
3.1 四大核心信号定义
下图展示了 HDMI 接口中,GPU 在发送一行图像数据时,各信号之间的典型时序关系。
3.2 信号详细解析
3.2.1 像素时钟(Pixel Clock)
- 定义:像素时钟是显示时序的基准节拍,每个时钟周期对应传输一个像素点的数据。在 HDMI 中,像素时钟频率决定了数据传输的速率。
- 计算:Pixel_Clock = H_Total × V_Total × Refresh_Rate。例如,1920x1080@60Hz 的典型像素时钟为 148.5 MHz。
- SA8155 调试要点:在 DPU(显示处理单元)的
PLL配置中,需要精确设置像素时钟频率。频率偏差超过 ±0.5% 可能导致显示器无法锁定信号。
3.2.2 行同步(HSYNC)
- 定义:行同步信号用于标识每一行像素数据的开始。通常为低电平有效或高电平有效(取决于标准),在同步脉冲期间,GPU 指示显示器开始新的一行。
- 组成:一行完整的时序周期包括:同步脉冲(Sync)、后肩(Back Porch)、有效数据区间(Active)和前肩(Front Porch)。
- 避坑指南:后肩和前肩的时长必须满足显示器的消隐要求。后肩过短可能导致图像顶部出现噪点,前肩过短可能引起行同步不稳定。
3.2.3 场同步(VSYNC)
- 定义:场同步信号用于标识每一帧(一幅完整图像)的开始。其结构与行同步类似,也包含同步脉冲、后肩、有效数据区间和前肩,但时间单位是“行数”而非“像素时钟周期”。
- 帧结构:V_Total = V_Active + V_Front_Porch + V_Sync_Width + V_Back_Porch。
- SA8155 调试要点:在调试过程中,如果遇到画面上下抖动或滚动,应优先检查 VSYNC 的总周期(V_Total)是否与显示器的 EDID 要求一致。
3.2.4 数据使能(DE)
- 定义:数据使能信号是一个高电平有效的控制信号。当 DE 为高电平时,数据总线上的 RGB 或 YCbCr 信号才是有效的图像数据;当 DE 为低电平时,数据总线处于消隐期,传输的是消隐数据。
- 作用:DE 信号是 GPU 与显示器之间最直接的“数据有效”指示。在 HDMI 传输中,DE 信号直接映射到 TMDS 通道的控制信号中。
- 调试价值:通过示波器观察 DE 信号与数据通道的对应关系,可以快速判断 GPU 是否在正确的时序窗口内输出了有效数据。
3.3 标准体系:VESA 与 CEA-861
显示时序标准主要分为两大阵营:VESA(视频电子标准协会)和 CEA-861(消费电子协会标准)。SA8155 的 DPU 需要同时兼容这两种标准,以适应不同显示设备。
| 对比维度 | VESA 标准 | CEA-861 标准 |
|---|---|---|
| 主要应用 | PC 显示器、工业显示屏 | 电视、消费电子设备(HDMI) |
| 典型分辨率 | 1920x1080、2560x1440、3840x2160 | 720p、1080i、1080p、4K |
| 时序特点 | 消隐期较长,同步脉冲宽度固定 | 消隐期较短,支持隔行扫描(Interlace) |
| 像素时钟 | 通常为整数倍(如 148.5 MHz) | 支持降低时钟(如 74.25 MHz 用于 1080i) |
| 色彩格式 | 优先 RGB | 优先 YCbCr 4:4:4 / 4:2:2 |
| EDID 信息 | 包含详细的时序描述符(DTD) | 包含短视频描述符(SVD) |
实战提示:在 SA8155 项目中,当连接电视时,应优先解析 EDID 中的 CEA-861 扩展块,并匹配 SVD 码对应的时序。如果连接的是 PC 显示器,则应使用 VESA 标准的 DTD 时序。错误的时序选择会导致显示器显示“无信号”或“超出范围”。
3.4 标准时序参数示例
以下为两种常见分辨率的 VESA 标准时序参数,供寄存器配置时参考。
| 参数 | 1920x1080 @ 60Hz | 1280x720 @ 60Hz |
|---|---|---|
| 像素时钟(MHz) | 148.5 | 74.25 |
| H_Active(像素) | 1920 | 1280 |
| H_Front_Porch(像素) | 88 | 110 |
| H_Sync_Width(像素) | 44 | 40 |
| H_Back_Porch(像素) | 148 | 220 |
| H_Total(像素) | 2200 | 1650 |
| V_Active(行) | 1080 | 720 |
| V_Front_Porch(行) | 4 | 5 |
| V_Sync_Width(行) | 5 | 5 |
| V_Back_Porch(行) | 36 | 20 |
| V_Total(行) | 1125 | 750 |
| HSYNC 极性 | 正极性(+) | 正极性(+) |
| VSYNC 极性 | 正极性(+) | 正极性(+) |
3.5 SA8155 寄存器配置示例
在 SA8155 的 DPU 驱动中,时序参数通常通过 msm_display_timing 结构体进行配置。以下是一个针对 1920x1080@60Hz 的配置片段:
struct msm_display_timing timing = {
.pixel_clock_khz = 148500, // 像素时钟,单位 KHz
.h_active = 1920, // 水平有效像素
.h_front_porch = 88, // 水平前肩
.h_sync_width = 44, // 水平同步宽度
.h_back_porch = 148, // 水平后肩
.v_active = 1080, // 垂直有效行数
.v_front_porch = 4, // 垂直前肩
.v_sync_width = 5, // 垂直同步宽度
.v_back_porch = 36, // 垂直后肩
.h_skew = 0, // 水平偏移(通常为 0)
.v_skew = 0, // 垂直偏移(通常为 0)
.flags = 0, // 极性标志位
};
调试警告:在修改时序参数后,务必通过示波器或逻辑分析仪抓取 HSYNC 和 VSYNC 的实际波形,与理论计算值进行比对。SA8155 的 DPU 内部可能存在时钟分频误差,导致实际输出的像素时钟与配置值有微小偏差。如果偏差超过 1%,建议调整 PLL 的反馈分频系数。
3.6 时序同步验证流程
在 SA8155 的 HDMI 调试中,验证 GPU 时序与 HDMI 接口是否同步,通常遵循以下步骤:
- 读取 EDID:通过 I2C 总线读取显示器的 EDID 数据,获取其支持的最佳时序(Preferred Timing)或 SVD 列表。
- 配置 DPU 时序:根据 EDID 信息,在 DPU 的时序控制器(Timing Controller)中写入对应的 H_Total、V_Total 等参数。
- 锁定 PLL:配置 DPU 的 PLL 模块,生成精确的像素时钟。使用频率计测量 PLL 输出,确保频率误差在允许范围内。
- 抓取波形:使用示波器探头测量 HDMI 接口的 HSYNC、VSYNC 和 DE 信号。验证 HSYNC 周期是否等于 H_Total × Pixel_Clock_Period。
- 检查 DE 对齐:确认 DE 信号的高电平区间是否精确对应 H_Active 和 V_Active 的窗口。DE 的上升沿应与有效数据的第一个像素对齐。
- 观察画面:连接显示器,观察画面是否完整、无偏移、无闪烁。如果出现异常,返回步骤 2 微调时序参数。
通过以上流程,可以系统性地定位 SA8155 显示链路中的时序问题,确保 GPU 输出的图像数据与 HDMI 接口的传输要求完全同步。