基本概念
屏幕的选择

分辨率决定"总共有多少像素",PPI 决定"这些像素挤得有多密"。

VOP
VOP 全称 video output processor,也就是 lcd 控制器。比较老的平台叫做 LCDC,也有的资料里面叫 CRTC,但是不管叫什么,都是一个意思。
在 TRM 手册中告诉我们,RK3568 使用的是 VOP2。目前 RK 处理器中有俩种 VOP 架构,一种是 VOP1,另一种是 VOP2。VOP1 和 VOP2 的主要区别是对多显的支持方式不同。
正常情况下**,一个 VOP 只能在同一时刻驱动一个屏幕独立显示** 。如果需要多屏显示,则需要多个 VOP 来实现。VOP1 使用的就是这种方式。看驱动中集成了几个显示控制器

而 VOP2 在处理器中仅存在一个 VOP,但是在VOP 的后端设计了多路独立的 VP (Video Port)输出接口,这些VP 可以同时独立工作 ,所以有几个 VP 就可以实现几路同显或异显。看显示控制器的后端有几个VP就可以
我们RK3568是用的VOP2


打开 rk3568.dtsi 设备树文件,找到 vop: vop@fe040000 节点。通过这个来确定支持哪些
drm框架
CRTC/LCDC/VOP:显示控制器。
显示控制器的作用:将内存中的图像数据转换成电信号给到显示设备。随着技术的发展,也可以在没有 CPU 的参与下做一些简单的图像处理,比如缩放,旋转,合成等。
Encoder:指 RGB,LVDS,DSI,EDP,DP,HDMI 等显示接口信号 (把图像信号转换成显示器需要的信号 )
Connector:负责硬件的接入
Bridge:桥接设备,一般指转换芯片,比如 RGB 转 HDMI
Panel:一般只具体的显示屏
需要注意的是,CRTC,Plane,Encoder,Connector 是对硬件的抽象,所以即使没有硬件与与之对那个,在驱动中也存在这些。
GEM:即 generice DRM memory-management,也就是对 DRM 使用的显存进行管理。
屏幕拓展技术
mirror

通过 spectror/mirror 技术,把两路 HDMI/eDP 连接在 VP0 上,把两路 DP 连接在 VP1 上,把两路 MIPI DSI 连接在 VP2 上,VP3 通过 BT656,BT1120 可以同时输出 7 路,四组独立的显示输出,其中在显示控制器内部,让多个物理显示接口共享同一个 Video Port(同一套时序发生器和帧数据源),而不是各自独立取图。
每一组(同一个 Video Port 上的两个显示接口)输出的显示时序相同,且显示内容相同,从而用一颗 SoC 同时驱动多组独立屏幕,每组内各接口显示内容一致。
在这种应用模式下,每一组显示通路输出的最大分辨率由对应的 Video Port 和显示接口的最大分辨率限制。
这种显示特性可以通过 dts 配置开启,在 dts 里面只要把两个显示接口挂接在同一个 VP 上即可。
目前NVR SDK 支持这种功能,Android 暂时不支持这种特性。
vop-split

VOP2 提供的 vop-split 功能是一种类似 mipi 双通道模式的技术**,可以让一路 Video Port 输出按照水平方向平分成左右两路,同时驱动两个显示接口,显示时序相同,内容独立的画面。**
如上图所示,如果在 VP0 上开启 split 模式,则 VP0 的输出可以同时驱动两个显示接口 (HDMI0/1、eDP0/1 或者其他能与 VP0 连接的显示接口),两个显示接口上显示的内容为 VP0 输出的内容水平方向左右平分,比如 VP0 以 3840x1080 的分辨率输出,则两个显示接口各显示 1920x1080 的输出。
需要注意的是,每一个 VP 上参与 split 输出的两个显示接口,输出的时序,帧率必须相同。 目前只有 RK3588 支持该功能。
LCD时序
这个原因就要从 CRT 显示器说起,CRT 显示器屁股后面是一个电子枪,通过电子枪打出的电子撞击到屏幕上使其放光,所以只要控制电子枪逐行进行扫描就可以显示一帧画面。

电子枪扫描一行以后会等待HSYNC信号结束以后重新开始下一行扫描
-
HSYNC 结束 → 电子枪打开之前 :叫 HBP(行后沿,back porch)
-
打开电子枪 → 一行有效像素结束 :叫 hactive(有效显示时间)
-
一行结束 → 关闭电子枪 → 等待 HSYNC 开始 :叫 HFP(行前沿,front porch)
HSYNC → HBP → hactive → HFP →(下一行)HSYNC
现在因为显示接口的行业标准(如 HDMI、MIPI DSI)至今仍沿用 CRT 时代的时序规范,芯片硬件也必须按这套规范来发送信号,所以这些延时参数必须保留。
HBP(行后沿):HSYNC 结束后,留给显示器驱动 IC 锁定新行起始位置的时间。
HFP(行前沿):一行有效像素传完后,留给接收端(屏/接口芯片)准备接收下一行同步信号的时间。
HSPW(HSYNC 宽度):同步脉冲本身的持续时间,用来告诉接收端"新的一行开始了"。
虽然看不到电子枪了,但是LCD 屏幕内部有芯片也需要反应时间。

而VFP等就会涉及到帧

RGB接口

所以 LCD 驱动和 LCD 之间要达成一种共识,比如LCD 得知道现在发送的是 HFP 的数据,不用显示出来 ,基于这个原因,RGB LCD 一般有 DE 和 HV 这俩种模式,使用 DE 模式需要用到 DE 信号线,而使用 HV 模式不需要使用 DE 信号线。
当 DE 信号有效时(上图中是高电平有效),表示有效数据开始。当 DE 信号无效时(上图是低电平),表示有效数据结束。所以**在 DE 模式下,不需要确定 HFP,HBP 等具体参数。**使用起来比较简单。
在 HV 模式下,不需要 DE 信号线,但是需要 HSYNC 和 VSYNC 信号线来进行同步。 在使用 HV 模式时**,需要 HFP,HBP 等具体参数。**一般可以在 LCD 屏幕的数据手册中找到。
LVDS
常用于笔记本电脑屏幕

发送器内部由 4 个 MOSFET 组成 H 桥电路,通过交替导通改变 3.5mA 恒流源流过 100Ω 终端电阻的方向:
-
正逻辑(逻辑 1) :电流从正端流向负端,接收端测得 +350mV电压差。
-
负逻辑(逻辑 0) :电流从负端流向正端,接收端测得 -350mV 电压差。
一句话总结:MOSFET 像开关一样不断换向,把"电流方向"变成"正负电压差",接收器据此还原出 0 和 1,同时差分传输还能抵消共模干扰。

| 类型 | 传输方式 | 每基色位宽 | 每路数据量 | 总 RGB 数据量 |
|---|---|---|---|---|
| 单路 6 位 LVDS | 单路 | 6 位 | 18 位 | 18 位 |
| 单路 8 位 LVDS | 单路 | 8 位 | 24 位 | 24 位 |
| 双路 6 位 LVDS | 双路 | 6 位 | 奇路 18 位 + 偶路 18 位 | 36 位 |
| 双路 8 位 LVDS | 双路 | 8 位 | 奇路 24 位 + 偶路 24 位 | 48 位 |
区分 6 位和 8 位
6 位采用的是 4 对差分信号线,其中 3 对是数据线,1 对时钟线:
8 位采用的是 5 对差分信号线,其中 4 对是数据线,1 对时钟线:
MIPI
而 MIPI 接口全称是 Mobile Industry Processor Interface,即移动产业处理器接口。是 MIPI 联盟发起的为移动应用处理器制定的开放标准和规范,**目的是把手机内部的接口如摄像头,显示屏,射频/基带接口标准化,从而减少手机设计的复杂程度。**所以 MIPI 并不是一个单一的接口或协议,比如有 MIPI DSI, MIPI CSI, MIPI I3C, MIPI RFFE(射频前端控制接口), MIPI SPMI(系统电源管理接口)。
DBI 接口又叫做 MCU 接口和 8080 接口,全称为 Display Bus Interface。通过并行接口传输控制命令和数据,并通过往液晶模组自带的 GRAM 更新数据实现屏幕的刷新。
GRAM 就是屏幕自己的一块"画面缓存",有它主控可以只写不管,没它主控必须一直喂数据。

RGB 接口就是 DPI 接口,DPI 全称为 Display Pixel Interface。

在 DSI 接口中。数据是经过封包处理的 ,不像 DBI 接口或 DPI 那样可以知道传输的内容。
| 接口 | 别名 | 传输方式 | 是否封包 | 刷新方式 | Framebuffer 关系 |
|---|---|---|---|---|---|
| DBI | MCU / 8080 | 并行,传命令和数据 | 不封包 | 写入模组自带 GRAM | FB 数据经驱动写入模组 GRAM |
| DPI | RGB | 并行,直接传像素 | 不封包 | 直接输出像素流 | FB 数据直接按时序输出 |
| DSI | --- | 串行,数据封包 | 封包 | 通过封包命令/数据更新 | FB 数据需打包成 DSI 封包 |
MIPI DSI
| 模式 | 所属状态 | 信号方式 | 主要用途 | 关键特征 |
|---|---|---|---|---|
| High-speed(HS) | HS | 差分信号 | 传图像数据等高速数据 | 数据 Lane 高速工作状态 |
| Control | LP | 单端信号 | 发同步序列、切换模式 | 有 LP00~LP11 四种电平组合,如 LP11-LP01-LP00 表示进入 HS |
| Escape | LP | 单端信号 | 传低速控制命令(LPDT)、读寄存器等 | 数据 Lane 在 LP 下的特殊功能状态,用来传低速控制命令(LPDT)、读寄存器等。 |
这三种状态(Control 模式、High-speed 模式、Escape 模式 )都是 MIPI D-PHY 物理层中 Data Lane(数据通道) 的状态。
模式切换必须经过控制模式进行中转
DSI 兼容的外围设备支持两种基本操作模式:命令模式(Command Mode)和视频模式(Video Mode)。
命令模式
Command mode 主要针对**自带 GRAM(framebuffer)**的 LCD 屏,画面发生变化时,DSI Host 才发送数据给屏幕,屏自己刷新。
屏自带 GRAM,只在画面变化时发送数据,屏自己刷新。
Date Lane 0 :双向,(返回数据,向主机发送 ACK 或错误)

视频模式
video mode 主要针对没有 framebuffer 的 lcd 屏进行操作 ,DSI Host 必须持续不断发送像素流,一停就黑屏;类似 RGB/DPI,但同步和控制信息以报文形式走 MIPI 总线,不用专用信号线。
Data Lane 0:双向或单向,视频数据仅使用高速(HS)模式传输。


DCS 全称为 Display Command Set,即显示控制命令。是 MIPI 联盟制定的命令集规范。其中命令从主机处理器发送到显示模块。在显示模块上,一个显示控制器接收并解释命令,然后采取相应操作。命令大致分为四大类:读取、寄存器操作、写寄存器、读取内存和写入内存。一个命令可能伴随有多个参数。
SDF 全称为 Stereoscopic Display Formats,即立体显示格式。SDF 定义了移动设备主机处理器与显示外设之间传输立体图像数据的方法。

MIPI DSI 等高速串行接口在发送前,会把字节流按 Lane 进行分配,再经 SerDes 串行化后通过多条 Lane 并行传输;单 Lane 时所有字节都走 Lane 0,多 Lane 时字节轮流分配到各 Lane 上。
PHY

如 D-PHY 中的 D 指的是罗马数字 500(最初的设计目标是 500Mbits/s),不是 Display,C 和 M 分别表示罗马数字中的 100 和 1000。
物理层支持:
HS: High-Speed 模式,用来传输高速数据 ,如屏幕数据。
LP: Low-Power 模式,用于控制,如配置指令。此时 Lane0 上是俩跟独立信号线。
注:只有 Lane0 且在 LP 模式下,才可以双向传输,其他都是单向的。
HS 和 LP 使用俩种不同的传输电平和传输模式:
在 HS 模式下是差分信号,信号电平在 100mv 到 300mv(200mv 的压摆)。
在 LP 模式下是单端信号,信号电平在 0 到 1.2v(1.2v 压摆)

左侧是协议接口层(PPI),右侧是物理引脚 Dp/Dn,中间由 Lane 控制逻辑统一管理,并通过 HS-TX/RX(差分高速收发) 、LP-TX/RX(单端低速收发) 和 LP-CD(低功耗冲突检测) 完成 HS 与 LP 两种模式的数据传输。
数据包
短数据包
短数据包(short packet)一共 4 个字节,包括 1 字节 DI,俩字节数据和 1 字节 ECC
格式:DI+DATA0~1+ECC
-
数据标识符(DI):包含虚拟通道标识符和数据类型信息 。数据类型表示应用程序特定负载数据的格式/内容。由应用层使用。
-
数据包数据:长度固定为两个字节 ,数据没有值限制。
-
数据包头部 8 位 ECC:用于纠正一位错误并检测两位错误。
长数据包
| 长包组成 | 部分 | 位宽/长度 | 说明 |
|---|---|---|---|
| 包头(PH) | 数据标识符(DI) | 8 位 | 标识数据类型/通道 |
| 包头(PH) | 字数计数(WC) | 16 位 | 载荷字节数 |
| 包头(PH) | 错误校正码(ECC) | 8 位 | 校正包头错误 |
| 应用特定数据载荷 | Data Payload | 可变字节数 | 实际传输的数据 |
| 包尾(PF) | 校验和(Checksum) | 16 位 | 校验整包 |
格式:PH(DI+WORD COUNT+ECC)+ PACKET DATA + PF。
数据标识符(DI):包含虚拟通道标识符和数据类型信息。数据类型表示应用特定负载数据的格式和内容。
16 位字长计数器(WC):字长计数器表示数据包载荷中有多少个字(字节)。接收方使用 WC 来确定数据包的结束位置(即在载荷和校验和之后)。
数据包头部 8 位 ECC:保护头部最多 8 字节,可纠正单比特错误,检测双比特错误。
数据包数据(Payload):长度 = 字长计数器(WC)* 数据字长(8 位),Payload 中的数据字没有值限制。
初始化序列格式转换
操作一个芯片可以直接读写它的寄存器;MIPI 屏幕内部也有一颗驱动 IC,因此点亮屏幕前需要向这颗 IC 写寄存器,完成配置------这一系列寄存器配置操作就叫向 MIPI 屏 IC 发送初始化序列。
要操作哪些寄存器,要给这些寄存器写入什么内容需要和屏幕厂家进行沟通,一般厂家均会提供。(这些对寄存器的操作是什么意思厂家一般不会告诉我们,也不会给提供寄存器手册,因为这是他们的知识产权)
通用的数据格式:
命令类型+延时数量+数据长度+数据
29 00 03 E0 AB BA
W_COM(0xE0,0xAB,0xBA);
HDMI接口

HDMI 在针脚上和 DVI 兼容,DVI 是早期的数字视频显示接口,属于显示屏接口,只传视频不传音频,现已被 HDMI/DP 取代。 只是采用了不同的封装。所以 HDMI 向下兼容 DVI 接口。我们可以在市面上看到 HDMI 转 DVI 线。与 DVI 相比,HDMI 可以传输数字音频信号,并增加了对 HDCP(High-bandwidth Digital Content Protection)和 DDC 的支持(Display Data Channel),提高了对知识产权的保护。
HDMI 最远可传输 15 米,而且只需要一条 HDMI 线便可以同时传送影音信号,而不需要多条线材来连接。
| 接口类型 | 别名 | 特点 | 主要应用场景 |
|---|---|---|---|
| HDMI-A | 标准接口 | 使用最广泛 | 日常通用设备 |
| HDMI-B | --- | 传输能力约为 HDMI-A 的 2 倍,日常基本看不到 | 专业场景 |
| HDMI-C | Mini HDMI / 迷你 HDMI | 尺寸比 HDMI-A 小近三分之一 | 游戏机、数码相机等小型设备 |
| HDMI-D | Micro HDMI / 微型 HDMI | 体积小 | 平板电脑、便携车载设备等小型移动设备 |
TMDS 是 HDMI 的底层数字信号编码与传输方式,HDMI 在 TMDS 基础上扩展了音频、CEC、EDID、HDCP 等功能。
HDMI 传输由 3 组 TMDS 数据通道和 1 组 TMDS clock 时钟组成。
TMDS 全称 Transition Minimized Differential Signaling,即最小化差分传输信号。
| 对比项 | TMDS | LVDS |
|---|---|---|
| 全称 | 最小化传输差分信号 | 低电压差分信号 |
| 抗干扰方式 | 一根传原信号、一根传反信号,接收端相减还原,抵消共模干扰 | 恒流源切换电流方向,在终端电阻上形成正负压差 |
| 编码 | 有 8b/10b 编码,减少跳变、保持直流平衡 | 无编码,结构更简单 |
| 信号表示 | 差分信号相减还原 | +350mV 表示逻辑 1,-350mV 表示逻辑 0 |
| 驱动方式 | 电压型差分发送 | 3.5mA 恒流源 + MOSFET 开关切换方向 |
| 通道结构 | 3 组数据通道 + 1 组时钟通道 | 多对差分数据线 + 时钟线 |
| 应用 | HDMI、DVI | LCD 屏、高速数据传输 |
一句话区别:TMDS 靠"原信号与反信号相减"抗干扰,并多了 8b/10b 编码;LVDS 靠"恒流源切换电流方向,在 100Ω 电阻上形成正负压差"表示 0/1,没有编码,结构更简单。

从图中可以看出,TMDS 传输分为发送端 source 和接收端 sink 俩部分。TMDS 链路包括 3 个传输数据的通道和 1 个传输时钟信号的通道。
发送端对这些数据进行编码和并/串转换 ,再将数据分别分配到独立的传输通道发送出去。
接收端接收来自发送端的串行信号,对其进行解码和串/并转换,然后发送到显示器的控制端。
| 项目 | 内容 |
|---|---|
| EDID 是什么 | Extended Display Identification Data,外部显示设备标识数据;是 DDC 通讯中传输的显示设备数据,通过 DDC 传输 |
| 包含什么数据 | 分辨率、时序信息、厂商信息、产品 ID、生产日期等 |
| 作用 | 显示器通过 EDID 告诉处理器自己的分辨率和其他参数,处理器据此设置屏幕参数,适配不同显示器,达到最佳显示效果 |
| 组成 | HDMI 的 EDID 一般 256 字节,分 Block0 和 Block1;Block0 必须要有,Block1 可选 |
-
显示器插上 HDMI,拉高 HPD,告诉主机"我接上了"。
-
主机通过 DDC 读取显示器的 EDID。
-
主机根据 EDID 里的分辨率和时序,配置 HDMI 输出。
-
配置好后,通过 TMDS 通道发送图像和音频。
一句话:EDID 是显示器通过 HDMI 的 DDC 通道告诉主机"我能显示什么"的身份证,HDMI 靠它来适配不同显示器。
eDP
eDP 全称是 Embedded DisplayPort,即嵌入式显示接口,由视频电子标准协会(VESA)创始。
eDP 协议是针对 DP(Display Port)应用在嵌入式方向架构和协议的拓展,所以 eDP 协议完全兼容 DP 协议。已广泛应用于笔记本电脑、平板电脑等领域。
VGA
VGA 全称是 Video Graphice Array。翻译过来为视频图像阵列。VGA 是一种使用模拟信号 进行视频传输的协议,于 1987 年由 IBM 公司推出。起初因分辨率高,显示速度快,颜色丰富在台式电脑应用中非常普遍。
VGA 接口体积较大,现在便携笔记本电脑越来越普及,所以在追求轻薄笔记本领域已经逐渐被淘汰。

常用接口总结
| 接口 | 原理 | 用途/场景 | 优点 | 缺点 |
|---|---|---|---|---|
| RGB / DPI | 并行直接传像素流,配 HSYNC/VSYNC/DE 等时序信号,屏无 GRAM | 中小尺寸屏、MCU/SoC 直驱 | 简单直接、无需封包、成本低 | 线多、抗干扰差、带宽低、分辨率受限 |
| DBI / MCU / 8080 | 并行传命令和数据,写入屏自带 GRAM,屏自己刷新 | 小尺寸 MCU 屏、低功耗场景 | 主控只写不管、省带宽、接口简单 | 屏需带 GRAM、刷新率受限、不适合大屏高分辨率 |
| LVDS | 3.5mA 恒流源切换电流方向,在 100Ω 电阻上形成正负压差表示 0/1,差分抗干扰,无编码 | 笔记本屏、工业屏、中大尺寸 LCD | 抗干扰好、功耗低、结构简单、成熟稳定 | 线多(含独立时钟线)、带宽有限、不支持音频/封包 |
| MIPI DSI | 串行差分传输,数据封包,D-PHY 分 HS(差分高速传图像)和 LP(单端低速传命令);分 Command mode(屏有 GRAM,按需发)和 Video mode(屏无 GRAM,持续发) | 手机、平板、移动设备屏 | 线少、带宽高、功耗低、支持命令和视频双模式 | 协议复杂、需封包、调试门槛高 |
| eDP | 基于 DP,主链路微封包传视频,AUX 通道读 EDID/DPCD 并做链路训练,无独立时钟线,支持 PSR 省电 | 笔记本、平板、一体机内部屏 | 带宽高(4 Lane 可达 21.6Gbps)、线少、支持音频/HDCP、省电 | 协议复杂、成本高于 LVDS、生态不如 LVDS 广 |
| HDMI | 3 组 TMDS 数据通道 + 1 组时钟,8b/10b 编码,差分传视频/音频,DDC 读 EDID,CEC 控制,HDCP 加密 | 显示器、电视、投影等外接显示 | 音视频一体、兼容 DVI、带宽高、通用性强 | 线缆成本高、远距离需中继、协议复杂 |
| DP | 微封包串行传输,主链路传视频/音频,AUX 传控制,支持多流 MST | 显示器、显卡外接 | 带宽高、支持多屏 MST、可传音频、免认证费 | 生态不如 HDMI 广、部分设备兼容性差 |
| DVI | 基于 TMDS,只传视频不传音频,分 DVI-D(数字)、DVI-A(模拟)、DVI-I(数字+模拟) | 早期显卡/显示器 | 与 HDMI 电气兼容、数字画质好 | 不传音频、体积大、已被 HDMI/DP 取代 |
| VGA | 模拟信号传 RGB + 行/场同步 | 老式显示器、投影 | 兼容性好、成本低 | 模拟易受干扰、分辨率低、体积大、已淘汰 |