4、DDC通道(I2C):DDC的作用、EDID数据结构、SCDC在HDMI 2.0中的新特性
好,咱们接着聊。前面几章我们把HDMI的物理层、TMDS通道和热插拔检测都过了一遍。这一章,我们来聊聊DDC通道——也就是那个藏在HDMI接口里的I2C总线。
说实话,DDC这个通道,很多工程师容易忽略它。觉得它不就是读个EDID嘛,能有多复杂?但我告诉你,我遇到过不下十次因为DDC通信问题导致的显示异常。有的是花屏,有的是黑屏,有的干脆就是分辨率上不去。所以,这一章咱们好好掰扯掰扯。
4.1 DDC通道是什么?
DDC,全称是Display Data Channel(显示数据通道)。它本质上是一条I2C总线,运行在100kHz的标准速率下。
在HDMI接口中,DDC通道由两条线组成:
- SCL(串行时钟线)—— 对应HDMI的15脚
- SDA(串行数据线)—— 对应HDMI的16脚
这两条线加上一个地(HDMI的17脚),就构成了完整的I2C通信链路。源端(比如你的电脑显卡)作为主设备,显示器作为从设备。
核心作用:源端通过DDC通道读取显示器的EDID数据,从而知道显示器支持哪些分辨率、刷新率、色彩空间等信息。说白了,就是源端问显示器:“你能显示啥?”显示器回答:“我能显示4K@60Hz,支持HDR,色彩深度10bit...”
4.2 EDID数据结构详解
EDID(Extended Display Identification Data)是存储在显示器中的一组数据块。标准EDID大小为128字节,但HDMI的EDID可以扩展到多个128字节块。
我习惯把EDID分成几个关键区域来看:
| 字节偏移 | 内容 | 说明 |
|---|---|---|
| 0-7 | 头部标识 | 固定为00 FF FF FF FF FF FF 00 |
| 8-17 | 厂商信息 | 包含制造商ID、产品代码、序列号 |
| 18-19 | EDID版本 | 通常为1.3或1.4 |
| 20-24 | 基本显示参数 | 模拟/数字接口、屏幕尺寸、伽马值 |
| 25-34 | 色度信息 | RGB/YCbCr色度坐标 |
| 35-37 | 时序标准 | 支持的标准时序 |
| 38-53 | 标准时序列表 | 8个标准时序描述 |
| 54-125 | 详细时序描述 | 4个18字节的详细时序块 |
| 126-127 | 扩展标志和校验和 | 是否有扩展块、校验和 |
嗯,这里要注意一点:EDID的校验和是强制性的。我曾经遇到一个项目,显示器厂商的EDID校验和算错了,结果显卡死活不认这个显示器。排查了整整两天,最后用I2C抓包工具一看,校验和不对。所以,如果你自己写EDID,一定要算对校验和。
小技巧:EDID校验和的计算方法很简单——把前127个字节加起来,取低8位,然后用256减去这个值,结果就是第128字节的值。公式:checksum = (256 - (sum_of_bytes_0_to_126 % 256)) % 256
4.3 EDID扩展块与HDMI VSDB
标准EDID只能描述基本的显示能力。但HDMI需要传递更多信息,比如是否支持深色、是否支持音频回传通道(ARC)等。这些信息放在哪里呢?
答案就是——EDID扩展块。其中最重要的就是HDMI VSDB(Vendor Specific Data Block)。
VSDB的结构如下:
- IEEE注册标识符:HDMI LLC的注册ID是0x000C03
- 物理地址:用于CEC总线寻址
- 支持能力标志:深色支持、TMDS时钟频率、音频格式等
- 最大TMDS时钟:以MHz为单位,比如340表示支持340MHz
- 延迟信息:视频和音频的延迟数据
说白了,VSDB就是HDMI的“身份证”。没有这个块,源端就不知道你是个HDMI设备,只能把你当普通DVI显示器用。
4.4 SCDC:HDMI 2.0的新特性
到了HDMI 2.0,事情变得更有意思了。因为2.0的带宽高达18Gbps,传统的DDC通道已经不够用了。于是,HDMI论坛引入了SCDC(Status and Control Data Channel,状态与数据通道)。
SCDC是什么?我打个比方:DDC是单向的——源端读,显示器答。而SCDC是双向的,源端和显示器可以互相读写状态和控制信息。
SCDC的寄存器映射在I2C地址0xA8(写)和0xA9(读)上。关键寄存器包括:
| 寄存器地址 | 名称 | 功能 |
|---|---|---|
| 0x10 | SCDC Capability | 标识显示器支持的SCDC功能 |
| 0x11 | Source Version | 源端HDMI版本号 |
| 0x12 | Sink Version | 显示器HDMI版本号 |
| 0x20 | Update Flags | 状态更新标志位 |
| 0x30 | TMDS Configuration | TMDS时钟配置 |
| 0x31 | Scrambler Status | 加扰状态 |
| 0x40-0x45 | Error Counters | 错误计数 |
SCDC最核心的功能有三个:
- TMDS时钟比率配置:HDMI 2.0支持两种TMDS时钟模式——正常模式和1/40比率模式。通过SCDC寄存器0x30,源端可以告诉显示器使用哪种模式。
- 加扰控制:为了降低EMI,HDMI 2.0引入了数据加扰。SCDC寄存器0x31用于控制加扰的开启和关闭。
- 错误检测与报告:显示器可以通过SCDC的错误计数器,告诉源端接收到了多少错误数据。这对于调试非常有用。
避坑指南:我曾经在一个4K@60Hz的项目中,显示器始终无法锁定信号。排查了三天,最后发现是SCDC的TMDS配置寄存器没有正确写入。源端默认使用正常模式,但显示器只支持1/40比率模式。所以,HDMI 2.0的源端一定要在初始化时正确配置SCDC,否则高分辨率下很容易出问题。
4.5 DDC通道的电气特性
最后,聊点硬件工程师最关心的——电气特性。
DDC通道的I2C总线需要上拉电阻。标准规定:
- 上拉电阻值:1.5kΩ到2.2kΩ(5V供电时)
- 总线电容:不超过400pF
- 上升时间:不超过300ns
我个人的习惯是,在源端使用2.2kΩ上拉电阻,在显示器端使用1.5kΩ上拉电阻。这样即使线缆较长,信号质量也有保障。
另外,DDC通道的ESD保护非常重要。因为HDMI接口经常被插拔,静电很容易通过DDC线进入芯片。我建议在SCL和SDA线上各加一个5V的TVS管,钳位电压要低于芯片的耐压值。
4.6 知识体系总览
为了让你更直观地理解DDC通道在整个HDMI系统中的位置和作用,我画了一张图:
这张图把DDC通道的核心要素都串起来了。左边是源端,右边是显示器,中间是DDC通道。上面是SCDC(HDMI 2.0新增),下面是EDID。最底下是电气特性——这些是硬件工程师必须关注的点。
好了,这一章的内容就到这里。DDC通道虽然看起来简单,但它是整个HDMI通信的基础。没有它,源端连显示器支持什么都不知道,更别提正确输出信号了。
核心要点回顾:
- DDC通道是I2C总线,用于源端读取显示器的EDID
- EDID包含128字节基础块和多个扩展块,HDMI VSDB是关键
- SCDC是HDMI 2.0的新特性,支持双向状态和控制
- SCDC的核心功能:TMDS配置、加扰控制、错误检测
- 电气设计上注意上拉电阻和ESD保护
可可精品资料库