panel的从显示类型上分,主要可分为LCD和LED两种。
前者是由背光模块加上对液晶的控制来显示图像,最大的特点是背光不会闪烁,相对而言对眼睛更好。
后者是相对比较新的技术,“像素”颗粒可以各自独立地进行发光,从而省去了LCD的背光模块,可以做的更轻薄且不再需要很大的边框防止漏光,故也是超窄边框的首选。LED的动态比更好,理论上的显示效果也会强于LED,但像素颗粒中的蓝色发光材料衰减快,所以LED屏的调节难度会远高于LED,且无论怎样爱惜,从其点亮开始,使用寿命就已开始了倒计时。若长时间显示同样的图像,可能出现“烧屏”现象,将图像深深烙印在背景图像中。
从接口方式上讲:从最早的LCD接口(每bit数据一根data线,传入数据为raw data),到后来的HDMI和MIPI接口多种多样。
但无论使用何种接口,panel需要的关键参数及相应配置方式都是相通的。
先看一张图:
Kernel 源码中Documentation/fb/framebuffer.txt 目录有描述panel中framebuffer的抽象图示:
各参数的意义为:
- pixclock: pixel clock in ps (pico seconds)
- left_margin: time from sync to picture
- right_margin: time from picture to sync
- upper_margin: time from sync to picture
- lower_margin: time from picture to sync
- hsync_len: length of horizontal sync
- vsync_len: length of vertical sync
从上图linux系统进行的frame抽象,比较容易对比出porting panel过程中需要用到的及spec中比较重要的配置参数:
参数 | Spec中常用术语 | 意义 | 备注 |
refresh | Frame Rate / FPS | 每秒刷新的帧率 | 常被设为60 |
xres | x resolution | 行像素值 | |
yres | y resolution | 列像素值 | |
pixclock | pixel clock | 像素 clock | 单位可为HZ或时间 |
left_margin | HBP (Horizontal Back Porch) | 从Hsync信号enable起,到行有效像素数据输出时,中间需要插入的时钟周期数 | |
right_margin | HFP (Horizontal Front Porch ) | 从行有效数据输出完毕,到Hsync信号再次disable间,中途需要插入的时钟周期数 | |
upper_margin | VFP (Vertical Front Porch) | 从Vsync信号enable起(垂直同步信号开始)到有效的帧数据首行间的无效行数 | |
lower_margin | VBP (Vertical Back Porch) | 本帧数据输出结束到下一帧Vsync信号enable(垂直同步信号)前的无效行数 | |
hsync_len | Hsync Width | Hsync信号从非使能状态到enable状态间需要保持非使能状态电平的clock数 | 个人这么理解 |
vsync_len | Vsync Width | Vsync信号从非使能状态到enable状态间需要保持非使能状态电平的clock数 | 个人也是这么理解 |
PS:对于MIPI pane,还需要有panel的接口lane参数,其指的就是panel接的lane个数。
为了更好的理解上表的参数,引用另一篇<博客>中很清楚的图片(抱歉未找到其转载的博客源):
引用:
下面以天马的3.5寸TFT液晶屏 TM035KDH03为例进行讲解。
参数计算:
可以看到LCD时钟是28M,所以pixclock=1000000/28
行同步脉冲宽度是一个时钟周期,所以,hsync_len=1
场同步脉冲的宽度是一个行周期,所以vsync_len = 1
上图是一帧图像的显示时序图。的上图显示,up_margin = 13-1=12,, yres= 240,
整个场周期为263,所以lower_margin= 263-13-240 = 10
同时看到,列同步信号高电平有效,行同步信号也是高电平有效。
上图是一行的时序图。
可以看到,left_margin = 69, xres = 320, right_margin = 408 -320 - 70 = 18
数据在上升沿有效,输出使能是高电平有效。
这样一来,各个参数就很清楚了。
划重点:场信号的频率等于frame rate,行信号的频率等于出现的信号行数(这里的行数包含有效行数和VFP VBP及Vsync wide)
问题又来了,MIPI panel打的MIPI信号与上面所讲的这些参数是如何联系上的呢?
下面是panel ic内部的部分接口图,由图可见,mipi协议传来的mipi信息会通过内部芯片转换为内部可识别的vsnc hsync等信号。
所以我们需要将panel需要的HFP/HBP/FPS等参数,通过mipi控制器正常传输到芯片端,芯片就会处理这些参数。
从<转载来源>里可以看到:
我们先来看一个公式:Mipiclock = [ (width+hsync+hfp+hbp) x (height+vsync+vfp+vbp) ] x(bus_width) x fps/ (lane_num)/2
即mipi 屏的传输时钟频率(CLKN,CLKP)等于(屏幕分辨率宽width+hsync+hfp+hbp)x ( 屏幕分辨率高height+vsync+vfp+vbp) x(RGB显示数据宽度) x 帧率/ (lane_num)/2
简单解释下:
一帧画面需要的数据量为(单位bit):FRAME_BIT = (屏幕有效显示宽度+hsync+hfp+hbp) x ( 屏幕有效显示高度+vsync+vfp+vbp) x(RGB显示数据宽度24)
一秒钟内需要传输的数据量为(单位bps):FRAME_BIT x fps(帧率)。
那为何要除以lane_num----因为mipi通讯协议中,一个CLOCK几个lane是可以同时传输数据的。
为何又要除以2----因为根据mipi通讯协议,CLK_N、CLK_P这两根时钟线的上升沿/下降沿可以获取到数据。
因此我们可以得出如下结论:
1.在相同的时钟频率下,lane数越多,则单位时间内可以传输的数据越多。若显示帧率固定不变,则可以支持的更大的分辨率;而分辨率固定不变的情况下,则我们可以考虑支持更高的帧率显示。
2.在lane数固定的情况下,提高传输的时钟频率,则单位时间内也可以传输更多的显示数据。进而我们可以考虑是提高帧率还是提高分辨率,或两者做出平衡。
由此可大致了解相关原理。