无标题
https://doc.embedfire.com/linux/rk356x/linux_base/zh/latest/linux_app/drm/drm.html
介绍
DRM的图像系统可以分为两部分
- 应用层– libdrm
- 内核驱动层— GEM, KMS
libdrm: 对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装。
KMS(Kernel Mode Setting): 即Mode setting:更新画面和设置显示参数。
- 更新画面:显示buffer的切换,多图层的合成方式,以及每个图层的显示位置。
- 设置显示参数:包括分辨率、刷新率、电源状态(休眠唤醒)等。
GEM(Graphic Execution Manager): 主要负责显示buffer的分配和释放,内存管理与同步。
与fb区别

DRM Framebuffer
一片存放图像的内存区域, 且需要设置图像的格式(RGB888,YUV,C8等)以及画布的大小
CRTC
阴极射线显像管控制器—— 电子枪打出的电子撞击到屏幕上的荧光物质使其发光,
在DRM显示系统中CRTC会配置display timings和显示分辨率(Planes提供)来扫描framebuffer上的内容,传给Encoder。
LCD屏需要一定的时序(display timings)才能正确显示东西, 因此,CRTC在这里就有着很重要的作用,生成视频模式定时信号,输出内容到Encoder中,Encoder和Connector则只作为数据的转换和传输
lcd时序详解以及如何适配dts中timing:https://developer.aliyun.com/article/1326393
显示接口
参考链接:
https://blog.csdn.net/2301_76151015/article/details/149425565
https://blog.csdn.net/weixin_46768828/article/details/113852598
MIPI是一系列显示接口协议,包含液晶、摄像头等;液晶所使用的的MIPI接口是dsi
DSI协议层

物理层:硬件电路控制,将所有的数据转换为电平信号,以输出或者输入。这一层之间的连接就是DSI的接口连接了
通道管理层:对数据进行管理,将数据分给给Data通道或者从Data通道接收到后进行重组,以便交给下一层
协议层:对数据进行封包、检验等
应用层:初始化参数或者图像数据就在这一层发送或者接收。
Panel Driver IC :显示面板驱动芯片。
电脑的CPU(显卡)输出的是数字信号,但这个信号无法直接让液晶分子转动或让OLED像素点发光。Panel Driver IC 就扮演了一个“翻译官”和“指挥官”的角色,它的主要工作包括:
- 接收信号: 从设备的主板或显卡接收图像数据信号(数字信号)。
- 处理和翻译: 将接收到的数字信号进行处理和转换,变成面板能够理解的特定格式的指令。
- 精确控制:
- 对于LCD屏幕: 它需要产生精确的电压,来控制每个子像素(红、绿、蓝)的液晶分子的偏转角度,从而控制背光透过的多少,形成不同的灰阶和颜色。它通常分为两个部分:
- Source Driver(源极驱动芯片): 控制每一列像素的电压。
- Gate Driver(栅极驱动芯片): 控制每一行像素的开关。
- 对于OLED屏幕: 它需要精确控制流向每个像素点的电流大小,因为电流直接决定了OLED材料的发光亮度。这需要更精密的控制,所以技术也更复杂。
- 时序控制: 确保每一行、每一列的像素都在正确的时刻被激活,以形成一幅完整、稳定的画面,避免出现拖影、闪烁等问题。
其中短数据包主要用于传输命令、读写寄存器。短数据包长度为4byte,只有数据包头。
长数据包主要用用于传输大量图象数据或部分控制命令。长数据包长度为6 ~ 65541字节,包括4byte数据包头、0~65535byte有效数据、2byte数据包尾。
DSI支持的液晶类型
- video mode:host端一直发数据送显
- command mode:当画面变化时,host才发数据送显
| 特性 | Video Mode(视频模式) | Command Mode(命令模式) |
|---|---|---|
| 核心工作原理 | 显示控制器持续不断地将帧缓冲区的像素数据以固定频率“推送”到显示面板。 | 主机处理器通过命令来“指挥”显示驱动器,只有图像变化的部分才需要更新。 |
| 数据流 | 高速、连续、单向的数据流,像视频流。 | 低速、间歇、双向(可能)的数据流,像指令通信。发送数据以及读取状态信息 |
| 类比 | 电视/显示器:持续接收视频信号,不管画面是否变化。 | 智能手机/智能手表屏幕:大部分时间静态显示,只有你操作时局部刷新。 |
| 总线负载 | 高。即使显示静态图片,总线也在满负荷传输数据。 | 低。只在初始化或更新画面时传输命令和少量数据。 |
| 功耗 | 高。因为接口电路和总线持续工作。 | 低。在显示静态画面时,大部分电路可以进入低功耗状态。 |
| 典型应用 | 大屏幕显示器、电视、VR头盔等需要持续高速刷新的场景。 | 智能手机、智能手表、物联网设备等对功耗极其敏感的设备。 |
| 显示同步刷新机制 | 通过将v-sync及h-sync信号包含在数据包里发送给panel来做同步 | 通过TE pin来同步 |
RGB不同的是RGB专门有v-sync以及h-sync 管脚来同步

mipi屏的三种传输模式:
Burst mode: HSS——》HBP——》HACTIVE——》BLLP——》HFP
在 Burst 模式下,每一帧视频数据被紧凑地打包成多个长包(Long Packet),并且在一个短时间段内以 HS 模式连续发送到显示器。
特点:
- 没有显示同步(如 VSYNC、HSYNC)显式脉冲;
- 所有数据必须在一个刷新周期内发送完;
- 控制端必须掌握严格的帧率和定时;
- 接收端必须有自带时序控制器(TCON),才能正确解码图像;
- 显示屏不依赖 DSI 传输的同步信号,而是依靠自身内部定时。

协议核心机制
https://blog.csdn.net/qq_38131812/article/details/122394519
切换机制:
初始为 LP 模式(空闲)
向 DSI 控制器写入寄存器,触发切换到 HS 模式
PHY 层发出 LP11 → LP01 → LP00 → HS entry
连续发送图像数据
传输完成后,HS stop + LP00 → LP11
Packet 传输(DCS/DSI 协议)
使用 Data Type = 0x3E(RGB888 长包)
Long Packet 格式:
DSI时钟
Clock+ Clock-的连接线,就是DSI的时钟信号线了。主从设备依靠这组时钟线上传输的时钟信号来指挥数据的传输和解析(LP模式下不需要这组时钟,因为在LP模式下的数据传输依靠的是Data0+ Data0-的异或来作为时钟的)。

由于图像传输有一些时序要求,方便数据的同步等,所以每一行都会用一些无用(非图像数据)的像素(pixel)传输。
如RGB888格式图像代表一个像素点用24bit表示
实际双边沿采样,一个时钟可以穿两个bit的数据
展锐:Bitclk = Total pixel x 位深 x 1.2 / lane number (包含包头包尾协议数据);
RK平台通常是在理论计算出后直接加上100Mhz
高通在burst mode时,压缩图像,留出时间来传输协议数据
1 | Total pixel = H-total x V-total x fps(一般是60) |
D-phy
https://blog.csdn.net/2301_76151015/article/details/149424974?spm=1001.2101.3001.10752
D-PHY采用差分信号传输方式(不全是差分,LP是单端传输),每条lane由2根信号线组成,分别是P和N,clock lane是必不可少的,data lane的数量可以根据数据传输的吞吐率来选择,至少要有一个data lane。
Data信号可以是单向信号,也可以是半双工信号,即可以反向传输。反向传输的本质其实是通过Master去读Slave里的数据。这种半双工的双向信号的数据传送,在反向传输数据的时候(Slave To Master),带宽只有正向传输(Master To Slave)的四分之一。
D-PHY包含如下几种电气功能:高速发送(HS-TX),高速接收(HS-RX),低功耗发送(LP-TX),低功耗接收(LP-RX),低功耗争用检测(LP-CD)。

**HS:**High-Speed 也叫 Burst Mode,用于高速的数据传输,其实就是图像数据传输;在这种模式下,吞吐率可以达到 2500 Mbps,也就是 2.5Gbps/per Lane。
**LP:**Low-Power 模式用于一些控制信息,比如,传一些指令之类的(类似USB的控制传输);在这种模式下的最大速率是 10Mbps;

如上图,红色线为HS,HS 代表了 High-Speed,HS模式下,为差分信号传输,信号电平在100mV300mV(200mV的压摆);蓝色线代表LP,LP模式下,Lane上的2根线是独立的信号,不再具有差分的意义,为单端信号传输,信号电平在01.2V(1.2V压摆)。
从上图可以看出,HS差分传输的信号的最大摆幅是小于LP的低电压阈值的,所以LP的接收时钟接收到的是HS信号低。
无论是HS模式还是LP模式,都采用 LSB fisrt,MSB last 的传输方式
DSI lane的运行模式
CLOCK有三个模式:
低功耗模式LPM (Low Power Mode)
超低功耗模式ULPM(Ultra Low Power Mode)
高速时钟模式HSCM(High Speed Clock Mode)
DATA有三个模式:
Escape Mode,
High-Speed Data Transmission,
Bus Turnaround Request

MIPI D-PHY状态转换:
HS-0:表示High-Speed模式下,Dp那根线的数据是0,由于High-Speed是差分信号,那么Dn固然就是1。
HS-1:表示High-Speed 模式下, Dp那根线的数据是1,由于High-Speed是差分信号,那么Dn固然就是0。
前面说过,在Low-Power模式下,Lane的2根线是独立的,不代表差分信号,那么2根线就有4种表达方式:
LP-00:表示在Low-Power模式下,Dp那根线的数据是0,Dn那根线的数据是0。
LP-01:表示在Low-Power模式下,Dp那根线的数据是0,Dn那根线的数据是1。
LP-10:表示在Low-Power模式下,Dp那根线的数据是1,Dn那根线的数据是0。
LP-11:表示在Low-Power模式下,Dp那根线的数据是1,Dn那根线的数据是1。
High-Speed Data Transmission
Data Lane进入 High-Speed的方式:发送SOT 信号
即,顺序设置 LP-11、LP-01、LP-00、HS-0、发送 HS Sync 00011101序列,然后发送数据;
停止High-Speed Transmission:发送EOT信号
发送 LP-11
**可以看到不论开始还是最后都处于Lp-11,Stop State,可以理解为 PHY stand by **
- 进入Escape 模式:LP-11、LP-10、LP-00、LP-01、LP-00;
- Low-Power Data Transmission(LPDT):如果在进入 Escape mode 的时候 Entry Command 指定为了 Low-Power Data Transmission,那么会进入这个 LPDT 模式,这个模式下呢,数据可以在低速情况下进行传输;这种模式下,Lane 可以暂停发送

