2. LCD硬件原理与接口协议:TFT-LCD工作原理、RGB接口与LVDS接口详解、MIPI DSI协议基础、时序参数解析

做显示驱动移植,第一件事不是翻芯片手册,而是搞懂屏幕那头到底在干什么。说白了,你得知道像素是怎么从主控芯片跑到液晶面板上的。这一章,我就带你把这些基础啃透。

2.1 TFT-LCD工作原理:每个像素是怎么亮起来的?

TFT-LCD,全称是薄膜晶体管液晶显示器。每个像素背后都藏着一个薄膜晶体管,相当于一个微型开关。我刚开始接触时,总觉得液晶面板很神秘,后来拆开一块报废屏才明白——它就是个巨大的矩阵开关网络。

工作原理可以拆成三步:

  1. 背光点亮:屏幕背面有一排LED灯珠,提供白色光源。
  2. 液晶偏转:每个像素的TFT开关控制电压,液晶分子在电场作用下扭转角度。
  3. 滤色成色:白光穿过液晶层后,经过红绿蓝滤色片,混合出最终颜色。

关键点:TFT-LCD是常亮型显示,背光一直开着,液晶只负责“挡光”或“透光”。这和OLED完全不同,OLED是自发光,每个像素自己发光。

我在项目中遇到过一块屏显示偏蓝,查了半天发现是背光色温不对。嗯,背光LED的色温参数也会影响最终显示效果,这点容易被忽略。

2.2 RGB接口详解:最经典的并行接口

RGB接口,也叫并行RGB接口,是嵌入式Linux显示驱动里最常见的接口之一。它把红绿蓝三路数据分开传输,配合时钟和同步信号,直接驱动屏幕。

典型的RGB接口信号线包括:

信号名 方向 说明
R[0:n] 输出 红色数据线,n+1位宽
G[0:n] 输出 绿色数据线,n+1位宽
B[0:n] 输出 蓝色数据线,n+1位宽
PCLK 输出 像素时钟,每个时钟传输一个像素
HSYNC 输出 行同步信号,标志一行开始
VSYNC 输出 帧同步信号,标志一帧开始
DE 输出 数据使能,有效时才传输有效像素

RGB接口的位宽常见有16位、18位、24位。24位就是真彩色,每个颜色8位。我建议你在选型时优先考虑24位,除非硬件引脚受限。为什么?因为16位会丢色,显示渐变图像时能看到明显的色阶断层。

实战经验:调试RGB接口时,先量PCLK频率对不对。我曾经遇到一块屏花屏,折腾了两天,最后发现是PCLK极性反了。RGB接口的时钟极性和数据采样沿是可以配置的,务必和屏厂规格书对齐。

2.3 LVDS接口详解:高速传输的差分方案

当分辨率上去后,RGB接口的并行线太多,信号干扰严重。这时候LVDS(低压差分信号)就派上用场了。它把并行数据串行化,用差分对传输,抗干扰能力强,线数也少。

LVDS接口的核心特点:

  • 差分传输:每路信号用两根线(正负),共模噪声被抵消。
  • 低压摆幅:典型摆幅350mV,功耗低。
  • 数据映射:常见的映射格式有JEIDA和VESA两种,数据位顺序不同。

LVDS接口通常分为单通道和双通道。单通道4对差分数据线+1对时钟,支持到WXGA(1366x768)左右。双通道8对数据线+1对时钟,可以支持1080p甚至更高。

避坑指南:我曾经在移植驱动时,LVDS屏死活不亮,量波形都对。后来发现是数据映射格式搞错了——屏厂用的是JEIDA,我配成了VESA。两种格式的RGB数据位排列不同,配错就会花屏或黑屏。一定要和屏厂确认映射格式。

2.4 MIPI DSI协议基础:移动设备的主流选择

MIPI DSI(显示串行接口)是目前手机和平板上最主流的显示接口。它也是差分串行传输,但比LVDS更灵活,支持双向通信和控制命令。

DSI的物理层叫D-PHY,使用差分时钟+差分数据通道。数据通道可以是1、2、3或4条lane。lane数越多,带宽越大。

DSI有两种工作模式:

  • 命令模式:通过发送命令和数据更新显示缓冲区,适合带帧缓存的屏幕。
  • 视频模式:实时传输像素流,类似RGB接口的串行版,适合不带缓存的屏幕。

视频模式又分三种子模式:Non-Burst Sync Pulses、Non-Burst Sync Events、Burst Mode。其中Burst Mode效率最高,能把更多时间留给数据传输。

个人习惯:我调试DSI接口时,会先用示波器抓D-PHY的LP(低功耗)和HS(高速)状态切换。如果LP->HS切换时序不对,屏幕根本不会响应。很多DSI驱动问题都出在初始化序列的时序上。

2.5 时序参数解析:HBP/HFP/VBP/VFP

不管用RGB、LVDS还是DSI,最终都要面对一组时序参数。这些参数定义了像素数据在时间轴上的排布方式。你想想看,屏幕刷新不是瞬间完成的,它需要一行一行、一帧一帧地扫描。

关键时序参数如下:

参数 全称 说明
HBP Horizontal Back Porch 行同步后肩,HSYNC结束到有效数据开始
HFP Horizontal Front Porch 行同步前肩,有效数据结束到下一个HSYNC开始
VBP Vertical Back Porch 帧同步后肩,VSYNC结束到有效数据开始
VFP Vertical Front Porch 帧同步前肩,有效数据结束到下一个VSYNC开始
HSW Horizontal Sync Width 行同步脉冲宽度
VSW Vertical Sync Width 帧同步脉冲宽度

这些参数合起来决定了实际的像素时钟频率。计算公式是:

PCLK = (H_Active + HBP + HFP + HSW) × (V_Active + VBP + VFP + VSW) × 刷新率

举个例子,一块1024x600的屏,刷新率60Hz,如果HBP=160、HFP=160、HSW=10、VBP=23、VFP=12、VSW=10,那么:

PCLK = (1024 + 160 + 160 + 10) × (600 + 23 + 12 + 10) × 60
     = 1354 × 645 × 60
     ≈ 52.4 MHz

调试技巧:如果屏幕显示偏移或闪烁,先检查HBP和HFP。我曾经调一块屏,图像整体右移了20个像素,把HBP减小20就正常了。这些参数在屏厂规格书里都有推荐值,但实际调试时可以微调。

下面这张图展示了时序参数在行扫描和帧扫描中的位置关系:

LCD时序参数结构图 LCD时序参数结构图 行扫描时序(水平方向) HSW HBP 有效像素数据(H_Active) HFP HSW 一行总像素 = HSW + HBP + H_Active + HFP 帧扫描时序(垂直方向) VSW VBP 有效行数据(V_Active) VFP VSW 一帧总行数 = VSW + VBP + V_Active + VFP 时序参数说明: • HSW/VSW:同步脉冲宽度,用于同步接收端 • HBP/VBP:同步后肩,给接收端准备时间 • HFP/VFP:同步前肩,给接收端缓冲时间 • 实际像素时钟 = 一行总像素 × 一帧总行数 × 刷新率

搞懂这些时序参数后,你在设备树或驱动里配置显示参数时就不会一头雾水了。每个参数都有它的物理意义,不是随便填的。

重要提醒:时序参数配错最常见的后果是黑屏、花屏或显示偏移。我建议你在调试时,先用屏厂规格书的推荐值,然后逐步微调。不要一次性改太多参数,否则出了问题都不知道是哪个改坏的。