硬件接口探秘:RGB、LVDS、MIPI DSI、eDP/DP的电气特性与时序差异

做显示驱动移植,说白了就是跟这几种接口打交道。我刚开始接触嵌入式Linux显示时,也被这些接口搞得晕头转向——明明都是传图像数据,怎么电气特性差这么多?今天咱们就把它们挨个捋一遍。

1. RGB接口:最原始的并行传输

RGB接口是最古老的显示接口了。它直接把像素的R、G、B分量通过并行总线传过去,再加上行同步、场同步、像素时钟和数据使能信号。

信号 说明 典型电平
R[0:n] 红色分量数据线 3.3V / 1.8V CMOS
G[0:n] 绿色分量数据线 3.3V / 1.8V CMOS
B[0:n] 蓝色分量数据线 3.3V / 1.8V CMOS
PCLK 像素时钟 3.3V / 1.8V CMOS
HSYNC 行同步 3.3V / 1.8V CMOS
VSYNC 场同步 3.3V / 1.8V CMOS
DE 数据使能 3.3V / 1.8V CMOS

RGB接口最大的问题是——线太多。24位真彩色需要24根数据线,再加上控制信号,总共30多根线。这在PCB布局时简直是噩梦。我记得有一次做项目,板子空间本来就紧张,RGB走线绕来绕去,最后时序跑不过去,折腾了两天才搞定。

注意:RGB接口的传输距离非常有限,一般不超过30cm。超过这个距离,信号完整性就会急剧下降。我曾经见过有人硬拉了50cm的排线,结果屏幕花得没法看。

2. LVDS:低压差分信号

LVDS(Low-Voltage Differential Signaling)的出现,就是为了解决RGB接口的痛点。它用差分对传输数据,抗干扰能力强,线数也少得多。

LVDS的核心思想是:把RGB数据串行化,通过差分对传输。一个LVDS通道通常包含4对数据线和1对时钟线。每对数据线传输7位数据(3对传RGB,1对传控制信号)。

LVDS典型配置:

  • 单通道:4对数据 + 1对时钟,支持18位色深
  • 双通道:8对数据 + 1对时钟,支持24位色深
  • 传输速率:典型值 85MHz ~ 135MHz
  • 电压摆幅:约350mV(差分)

LVDS的电气特性很有意思。它用的是电流驱动模式,发送端输出3.5mA的电流,在100Ω终端电阻上产生350mV的压降。接收端检测的是差分电压,而不是绝对电压。所以共模噪声会被抑制掉。

我个人的习惯是,在LVDS走线时一定要控制好阻抗。100Ω差分阻抗,±10%的容差。走线长度也要尽量匹配,差个几毫米问题不大,但超过1cm就可能出问题。

3. MIPI DSI:移动设备的王者

MIPI DSI(Display Serial Interface)是移动设备上最主流的显示接口。它比LVDS更进一步,不仅传数据,还能传命令——说白了就是可以跟屏幕芯片"对话"。

MIPI DSI的物理层叫D-PHY。它有两种模式:

  • 高速模式(HS):差分信号,用于传输像素数据,速率可达1Gbps/lane
  • 低功耗模式(LP):单端信号,用于传输命令,速率约10Mbps

这两种模式切换时,电压电平完全不同。HS模式下差分摆幅约200mV,LP模式下单端摆幅1.2V。我刚开始调MIPI时,就被这个切换搞懵了——示波器上看波形,一会儿大一会儿小,还以为信号有问题。

参数 HS模式 LP模式
信号类型 差分 单端
电压摆幅 200mV 1.2V
传输速率 80Mbps ~ 1Gbps ~10Mbps
功耗 高 低
用途 像素数据 命令/状态

经验之谈:MIPI DSI的时钟频率计算跟RGB不一样。RGB的像素时钟 = 分辨率 × 刷新率 × 帧消隐系数。而MIPI DSI的时钟 = 像素时钟 × 每像素位数 / (lane数 × 2)。因为D-PHY是DDR(双沿采样)的,所以除以2。

4. eDP/DP:PC领域的标准

eDP(Embedded DisplayPort)是DP(DisplayPort)的嵌入式版本,主要用于笔记本和平板的内置屏幕。它跟MIPI DSI有点像,但更"PC化"——支持更高的分辨率、更高的刷新率,还有AUX通道用来传控制信号。

eDP的物理层跟DP完全一样,只是协议上做了一些简化。它使用Main Link传输数据,AUX Channel传输命令,Hot Plug Detect检测屏幕插拔。

eDP有个很实用的特性——链路训练。每次上电时,主机和屏幕会协商链路参数:lane数、速率、电压摆幅、预加重等。这个协商过程是自动的,但有时候也会出问题。我记得有一次,某款屏幕在低温下链路训练失败,屏幕点不亮。后来发现是预加重参数没调好,在设备树里强制指定了参数才解决。

eDP常见速率等级:

  • RBR(Reduced Bit Rate):1.62Gbps/lane
  • HBR(High Bit Rate):2.7Gbps/lane
  • HBR2:5.4Gbps/lane
  • HBR3:8.1Gbps/lane

5. 四种接口的时序差异

时序是显示驱动中最容易踩坑的地方。四种接口的时序参数虽然都基于VESA标准,但具体实现上差异很大。

四种显示接口时序对比 RGB接口 • 像素时钟 = H_total × V_total × 刷新率 • 每个时钟传1个像素 • 时序参数:HBP, HFP, HSW, VBP, VFP, VSW LVDS接口 • 像素时钟同RGB,但串行化 • 7:1串行比,时钟频率 = 像素时钟 × 7 • 需要关注数据-时钟相位 MIPI DSI • 时钟 = 像素时钟 × bpp / (lane × 2) • 支持突发模式和非突发模式 • 需要配置LP/HS切换时序 eDP/DP • 链路训练自动协商时序 • 支持PSR(面板自刷新) • 时序参数通过EDID读取 核心差异总结 • RGB:并行,线多,距离短,适合小尺寸低分辨率 • LVDS:串行差分,抗干扰,适合中等尺寸屏幕 • MIPI DSI:高速串行+命令通道,移动设备首选 • eDP/DP:链路训练+AUX通道,PC/笔记本标准 时序参数在设备树中通过 display-timings 节点配置 不同SoC的时序计算方式略有差异,需参考芯片手册

这里有个容易混淆的地方:RGB和LVDS的时序参数是直接配置在设备树里的,而MIPI DSI和eDP的时序参数是通过协议协商或命令设置的。说白了,前两种是"硬配",后两种是"软配"。

避坑指南:我曾经在移植MIPI DSI驱动时,发现屏幕能亮但画面偏移。查了两天才发现是HBP(水平后肩)参数没配对。MIPI DSI的HBP跟RGB的HBP计算方式不一样——RGB的HBP是像素时钟周期数,而MIPI DSI的HBP是字节数。这个坑,我估计很多人都踩过。

6. 实际调试中的注意事项

说了这么多理论,最后分享几个实战经验:

  1. 先确认硬件连接:用万用表量一下电源、地、时钟线有没有短路。我见过太多人上来就调软件,结果发现是排线没插紧。
  2. 用示波器看波形:特别是时钟信号。频率对不对?占空比是不是50%?抖动大不大?这些一眼就能看出来。
  3. 从简单开始:先调最低分辨率、最低刷新率,确认接口能通,再往上加。不要一上来就上4K@60Hz。
  4. 看内核日志:dmesg里会有很多有用信息。比如MIPI DSI的链路训练状态、eDP的EDID读取结果等。

我的习惯:每次调新屏幕,我都会先写一个简单的测试程序,只刷纯色画面——红、绿、蓝、白、黑。这样能快速判断是接口问题还是时序问题。如果纯色正常但图像花屏,那多半是时序参数不对。

嗯,这四种接口的电气特性和时序差异,基本上就这些了。每种接口都有自己的适用场景和坑点,理解了它们的本质区别,移植驱动时就能少走很多弯路。