2、显示接口协议:RGB接口、LVDS接口、MIPI DSI接口、HDMI接口的原理与对比
做嵌入式游戏机显示驱动,选对接口协议是第一步。我这些年折腾过不少屏幕,从最早的8位机到现在的掌机,接口选错了,后面全是坑。今天咱们就把四种主流接口——RGB、LVDS、MIPI DSI、HDMI——掰开揉碎讲清楚。
2.1 RGB接口:最朴素的并行传输
RGB接口,说白了就是直接把红绿蓝三原色的数据,通过并行总线一股脑塞给屏幕。每个像素的R、G、B分量各占几位,常见的有16位(RGB565)和24位(RGB888)。
它的原理很简单:像素时钟PCLK驱动数据线,行同步HSYNC告诉屏幕「新一行来了」,场同步VSYNC告诉屏幕「新一帧来了」。数据在时钟上升沿被锁存。
典型时序参数(以800×480分辨率为例):
- 像素时钟:33.3 MHz
- 行同步脉宽:2个像素时钟
- 场同步脉宽:2行时间
- 数据线:24根(RGB888)或16根(RGB565)
我在做第一台掌机原型时,用的就是RGB接口。当时图它简单,MCU直接拉GPIO就能点亮屏幕。但问题也很明显——线太多了。24根数据线加上控制线,排线粗得像根面条,而且距离一长信号就歪。
避坑指南:我曾经在5cm长的排线上跑RGB888,结果屏幕边缘出现鬼影。后来发现是信号反射。解决办法:加22Ω串联电阻,或者降低时钟频率。RGB接口不适合长距离传输,超过10cm建议换方案。
2.2 LVDS接口:低压差分,抗干扰强
LVDS(Low-Voltage Differential Signaling)的出现,就是为了解决RGB接口的痛点。它把并行数据串行化,用差分对传输。电压摆幅只有350mV左右,功耗低,抗干扰能力强。
它的工作原理:发送端将并行数据转换成串行数据流,通过4对或5对差分线传输。接收端再解串回并行数据。每对差分线传输速率可达几百Mbps。
举个例子,一个24位RGB数据加上控制信号,LVDS通常用4对数据线加1对时钟线。数据线每对传输7位串行数据,4对就是28位,足够容纳24位RGB和4位控制信号。
个人经验:我建议在游戏机设计中,如果屏幕和主板距离超过10cm,优先考虑LVDS。它的差分信号天生抗共模干扰,而且线缆可以做到很细。我做过一个项目,用LVDS在30cm排线上跑1024×600分辨率,画面稳得很。
LVDS的缺点?需要专门的发送器和接收器芯片。MCU不能直接驱动,得加一颗LVDS桥接芯片。成本比RGB高一点,但换来的是稳定性和布线便利性。
2.3 MIPI DSI接口:移动设备的王者
MIPI DSI(Display Serial Interface)是手机和平板上最常用的接口。它也是差分串行传输,但比LVDS更先进。它支持多通道(1-4 lane),每个lane的速率可达1Gbps以上。
它的核心优势:
- 高速率:4 lane配置下,总带宽可达4Gbps以上,轻松驱动2K甚至4K屏幕
- 低功耗:采用低压差分,且支持多种省电模式
- 协议灵活:支持命令模式和视频模式,可以控制屏幕寄存器
- 线缆少:4 lane加时钟,总共10根线左右
我记得第一次用MIPI DSI时,被它的协议栈搞晕了。它分物理层、协议层和应用层。物理层就是差分信号,协议层定义了数据包格式,应用层负责解析显示数据。
MIPI DSI数据包结构:
数据包格式:
- 包头:4字节(数据标识符 + 字计数 + ECC校验)
- 数据:可变长度(最长65535字节)
- 包尾:2字节(CRC校验)
Lane分配示例(4 lane):
Lane0: 像素字节0,4,8...
Lane1: 像素字节1,5,9...
Lane2: 像素字节2,6,10...
Lane3: 像素字节3,7,11...
做游戏机时,MIPI DSI有个好处:支持命令模式。你可以直接往屏幕的GRAM里写数据,不需要持续刷新。这对静态画面很省电。但缺点是需要MCU有MIPI DSI控制器,或者外挂桥接芯片。
注意:MIPI DSI的布线要求很高。差分对之间要等长,阻抗要控制在100Ω±10%。我曾经因为PCB走线没做等长,导致高速信号眼图闭合,屏幕出现雪花。后来重新布线才解决。
2.4 HDMI接口:消费电子的标准
HDMI(High-Definition Multimedia Interface)大家最熟悉了。电视、显示器、投影仪都用它。它也是差分串行传输,但比前面几种复杂得多。
HDMI的核心特点:
- 集成音频:视频和音频同一条线传输
- TMDS编码:8位数据转10位传输,减少电磁干扰
- 热插拔:支持即插即用,通过HPD引脚检测
- EDID:屏幕自动报告分辨率、刷新率等参数
- HDCP:内容保护,防止盗录
在嵌入式游戏机里用HDMI,通常是作为输出接口,连接外部显示器。比如你做一台复古游戏机,想输出到电视上玩,那就得用HDMI。
我的做法:在游戏机主板上,我一般用一颗HDMI发送器芯片,比如Silicon Image的SiI9022。MCU通过I2C配置芯片,然后把RGB数据送进去,芯片自动编码成HDMI信号。注意HDMI的ESD保护要做好,接口处加TVS管,不然插拔几次就烧了。
HDMI的缺点?协议复杂,芯片贵,而且有授权费。小批量做游戏机,成本压力不小。
2.5 四种接口对比
| 特性 | RGB | LVDS | MIPI DSI | HDMI |
|---|---|---|---|---|
| 传输方式 | 并行 | 差分串行 | 差分串行 | 差分串行 |
| 线缆数量 | 20-30根 | 8-10根 | 6-10根 | 19根 |
| 最大速率 | ~150MHz | ~1Gbps/对 | ~1.5Gbps/lane | ~18Gbps (HDMI 2.0) |
| 传输距离 | <10cm | <1m | <30cm | <10m |
| 功耗 | 高 | 低 | 极低 | 中 |
| 协议复杂度 | 简单 | 中等 | 复杂 | 复杂 |
| 成本 | 低 | 中 | 中高 | 高 |
| 典型应用 | 小尺寸屏、MCU直驱 | 工业屏、车载屏 | 手机、平板、掌机 | 电视、显示器 |
2.6 选型建议
做嵌入式游戏机,怎么选?我根据经验给几个建议:
- 屏幕尺寸小于3.5寸,分辨率低于480×320:用RGB接口。MCU直接驱动,成本最低,开发最快。我早期的掌机原型都这么干。
- 屏幕尺寸3.5-7寸,分辨率800×480到1024×600:用LVDS。线缆少,抗干扰好,适合做手持设备。
- 屏幕尺寸5寸以上,分辨率1280×720以上:用MIPI DSI。带宽够,功耗低,适合做高性能掌机。
- 需要输出到外部显示器:用HDMI。这是标准接口,兼容性好。
核心原则:接口选型不是越高级越好。RGB虽然老,但在小尺寸低分辨率场景下,它最简单可靠。MIPI DSI虽然强,但开发难度和成本都高。你想想看,一个320×240的屏幕,用MIPI DSI不是杀鸡用牛刀吗?
嗯,四种接口的原理和对比就讲到这里。下一章咱们聊聊帧缓冲的具体实现,包括双缓冲、撕裂避免这些实战技巧。到时候我会拿一个实际项目来拆解,保证干货满满。