LVDS 协议基础:传输模式、数据格式、时钟方式
当年我第一次调试 LVDS 显示链路,上来就被搞得一头雾水。明明是差分信号,怎么还分这么多模式?我当时拿着示波器看波形,好家伙——信号有,屏幕就是不亮。后来才发现,我把数据映射搞反了。所以这一章我想把我的教训和心得掰开揉碎了说给你听。
传输模式:三种主流玩法
LVDS 在显示链路里主要有三种传输模式。说白了,就是数据怎么打包、怎么扔到线上。你想想看,每个模式对应的是不同分辨率、不同色深的需求。
- JEIDA 模式:这是日本电子工业协会的标准。把 RGB 数据按 18-bit 或 24-bit 映射到 4 对差分数据线上。我个人习惯叫它「日规」。
- VESA 模式:视频电子标准协会出的。映射方式跟 JEIDA 略有不同,主要是低位和高位的分配差异。大家都叫它「美规」。
- SPWG 模式:这是笔记本屏幕上的老标准。现在已经不太常见了,但老项目里还能遇到。
| 模式 | 典型应用 | 色深支持 | 数据通道数 |
|---|---|---|---|
| JEIDA | 消费电子、工业屏 | 18-bit / 24-bit | 4 对 |
| VESA | 显示器、笔记本 | 18-bit / 24-bit | 4 对 |
| SPWG | 老式笔记本 | 18-bit 为主 | 3 对 |
嗯,这里要注意:JEIDA 和 VESA 虽然在 24-bit 模式下把相同的数据放到相同的数据通道上,但每个字节内的位顺序是反的。搞错了,屏幕颜色就会「乱套」。我上次修一块板,客户说颜色偏紫,我查了半天,最后发现是发卡把 VESA 映射写成了 JEIDA —— 就差了那么几个 bit 的交换。
数据格式:一条线里塞了啥
每对 LVDS 数据线在时钟周期内串行传输 7 位数据。为什么是 7?因为 7 个串行位刚好凑够一个时钟周期的 7x 倍频。你看,时钟是 7 倍于数据率的——这个后面再说。
4 对数据线在 7 个 bit 时间内总共送出 28 位数据。其中 24 位是 RGB 像素数据,剩下 4 位是控制信号(HSYNC、VSYNC、DE、保留位)。具体分配方案,JEIDA 和 VESA 各自有张映射表。
数据通道位分配(以 24-bit VESA 为例)
| 通道 | LVDS 线序 | 发送数据(7 bit) |
|---|---|---|
| CH0 | LV0+ / LV0- | R0, R1, R2, R3, R4, R5, G0 |
| CH1 | LV1+ / LV1- | G1, G2, G3, G4, G5, B0, B1 |
| CH2 | LV2+ / LV2- | B2, B3, B4, B5, HS, VS, DE |
| CH3 | LV3+ / LV3- | R6, R7, G6, G7, B6, B7, RSV |
你可以看到,每个通道的最后一个 bit 往往是下一个颜色分量的最低位,这样串起来能减少线间串扰——这是铁了心为高速信号考虑的。
我曾经遇到过一块屏,手册上写的是「兼容 VESA 和 JEIDA」,实际上它只认 JEIDA。我用 spi 读屏的 EDID,EDID 里也没告诉你映射模式。最后只能拿示波器抓数据线,对照像素颜色推出来的。那会儿真想把屏扔了。
时钟方式:锁相环的节奏
LVDS 用的是差分时钟,一对 CLK+ / CLK-。时钟频率等于像素时钟频率。比如 1024×768@60Hz 的屏,像素时钟约 65 MHz,那么 LVDS 时钟就是 65 MHz,数据率就是 65 × 7 = 455 Mbps 每对线。
为什么用 7 倍?因为每个时钟周期要传输 7 个数据位。时钟上升沿和下降沿都采样的话,你算算——那就是双沿采样,数据速率又翻一倍?不对!LVDS 可没用 DDR,它只在时钟上升沿采样。那 7 个 bits 怎么在一个周期内发完?
这里有个关键:数据串行化发生在发送端。发送端有锁相环(PLL)把像素时钟倍频 7 倍,得到串行时钟。串行时钟以 7 倍速率把每个通道的 7 位并行数据逐一打出去。接收端再用 PLL 恢复出串行时钟,做串转并。
经验之谈:调试时,如果屏幕出现「水波纹」或「闪屏」,先检查 PLL 锁定状态。大多数 LVDS 发送器(如 DS90C387/DS90CF388)都有 PLL 锁定指示脚,拉低就是没锁定。
我建议,首次上电一定要量时钟差分对的峰峰值。LVDS 标准要求 100Ω 终端匹配时差分摆幅在 250~450 mV。低于 200 mV,接收端大概率收不到数据。我有一块板,layout 走线太长,到屏端的摆幅只有 180 mV,屏幕就是间歇性黑屏。后来加了一对电阻调匹配才搞定。
重要坑点:LVDS 时钟极性不能搞反。如果发送端输出的是正相时钟(CLK+),接收端却接成反相,数据采样就全错位了。结果就是——屏幕有显示但全是雪花点。我曾经调了一整天,最后发现是排线焊接时把 CLK+ 和 CLK- 焊反了。换个接头就好了。
知识结构总览
下面这张图把传输模式、数据格式、时钟方式的关系串起来了。你读完这一章,再回头看这张图,整个 LVDS 数据流动的脉络就清楚了。
映射对照表(以 24-bit 为例)
很多屏手册会给你一张 JEIDA 和 VESA 的差异表。我自己干活时会把这张表贴在调试台旁。你看,差别就在 R0~R5、G0~G5、B0~B5 的分布。
| 数据通道 | VESA (24-bit) | JEIDA (24-bit) |
|---|---|---|
| CH0 (bit0~bit6) | R0~R5, G0 | R4, R5, R6, R7, G4, G5, B0 |
| CH1 (bit0~bit6) | G1~G5, B0~B1 | B4, B5, B6, B7, R2, R3, R0 |
| CH2 (bit0~bit6) | B2~B5, HS, VS, DE | G2, G3, G0, G1, HS, VS, DE |
| CH3 (bit0~bit6) | R6, R7, G6, G7, B6, B7, RSV | B1, B2, B3, B4, B5, B6, B7 |
你看,光 CH0 就不一样。VESA 里 CH0 的前 6 位是 R0~R5,而 JEIDA 里前 6 位是 R4、R5、R6、R7。如果你用错映射,红色分量全乱。我当时就是这个坑,屏幕显示正常但颜色不对,后来拿图卡对比才发现是映射错误。
避坑指南
- 终端电阻匹配:LVDS 接收端必须在每对差分线上跨接 100Ω 电阻。我见过有人用 120Ω,偏了 20%,信号反射导致眼图闭合。
- 共模电压范围:LVDS 接收器要求差分对共模电压在 1.125V ~ 1.375V。如果发送端输出共模不对,可以用电阻分压,但最好还是查器件数据手册。
- 不要混用模式:发端用 JEIDA,收端用 VESA,图像会错乱。两端的映射模式必须一致,或者通过 FPGA/Scaler 做转换。
- 时钟抖动的容忍:LVDS 时钟的峰峰值抖动建议控制在 < 0.3 UI(单位间隔)。如果抖动太大,收端 PLL 会失锁,屏幕闪。我曾经用示波器直接测时钟线,发现电源纹波耦合到时钟线上,加了 LC 滤波就好了。
我的调试顺序:上电后先测时钟差分摆幅 → 看 PLL 锁定信号 → 用示波器抓 CH0 波形,看看帧头 DE 信号是否正常 → 最后对照映射表验证颜色。按这个顺序走,95% 的问题半小时内能定位。
好了,这一块先讲到这。LVDS 基础搞懂,后面调 MIPI、eDP 也会顺手很多。核心就三件事:模式要对、映射要准、时钟要稳。你记牢这三个宗旨,翻车概率至少降一半。