一、概述
全志平台在board.dts(或sys_config.fex)文件的lcd0节点中,对LCD屏幕的timing时序参数进行了配置。
时序参数对于调屏非常关键,决定了发送端(SoC)发送数据时序。由于涉及到发送端和接收端的调试,除了分辨率和尺寸之外,其它几个数值都不是绝对不变的,两款一样分辨率,同种接口的屏,它们的数值也有可能不一样。
二、timing获取方式
最好的获取方式是通过询问LCD屏厂获得确切的时序参考值。其次或是从屏手册或者Driver IC手册中查找(向屏厂索要这些文档)。
至少需要从屏厂获得Width(屏宽),Height(屏高),HBP,HFP,HSW,VBP,VFP,VSW的数值。
三、全志board.dts中屏时序参数说明
lcd_x
含义:显示屏的水平像素数量,也就是屏分辨率中的宽。
数值:对应屏厂Width。
lcd_y
含义:显示屏的垂直行数,也就是屏分辨率中的高。
数值:对应屏厂Height。
lcd_hspw
含义:Horizontal Sync Pulse Width。指行同步信号的宽度。单位为1个dclk的时间(即是1个data cycle的时间)。
数值:对应屏厂HSW。
lcd_hbp
含义:Horizontal Back Porch。指有效行间,行同步信号(hsync)开始,到有效数据开始之间的 dclk 的 cycle 个数,包括同步信号区。
数值:是包含了hspw段,也就是lcd_hbp = 实际的hbp + 实际的hspw。对应屏厂HBP+HSW。
lcd_ht
含义:Horizontal Total time。指一行总的 dclk 的 cycle 个数。
数值:lcd_ht = lcd_x + lcd_hspw + lcd_hbp + lcd_hfp。对应屏厂Width+HSW+HBP+HFP。
由上面公式可知,我们不需要设置lcd_hfp参数,因为驱动会自动根据其它几个已知参数中算出lcd_hfp。
lcd_vspw
含义:Vertical Sync Pulse Width。指场同步信号的宽度。单位为行。
数值:对应屏厂VSW。
lcd_vbp
含义:Vertical Back Porch。指场同步信号(vsync)开始,到有效数据行开始之间的行数,包括场同步信号区。
数值:是包含了vspw段,也就是lcd_vbp = 实际的vbp + 实际的vspw。对应屏厂VBP+VSW。
lcd_vt
含义:Vertical Total time。指一场的总行数。
数值:lcd_vt = lcd_y + lcd_vspw + lcd_vbp + lcd_vfp。对应屏厂Height+VSW+VBP+VFP。
由上面公式可知,我们不需要设置lcd_vfp参数,因为驱动会自动根据其它几个已知参数中算出lcd_vfp。
lcd_dclk_freq
含义:Dot Clock Frequency。传输像素传送频率。单位为MHz。
数值:lcd_dclk_freq = lcd_ht * lcd_vt * fps,fps一般是60。注意lcd_dclk_freq数值取整数,单位是MHz。
如果是串行接口,发完一个像素需要2到3个周期的,那么,
lcd_dclk_freq * cycles = lcd_ht * lcd_vt * fps 或者 lcd_dclk_freq = lcd_ht * cycles * lcd_vt * fps。
实例演练
假如调试一款mipi屏,通过询问屏厂获得了屏的时序参数如下:
Width-200,Height-400,HBP-120,HFP-130,HSW-60,VBP-20,VFP-40,VSW-40。
Width-200,Height-400,HBP-120,HFP-130,HSW-60,VBP-20,VFP-40,VSW-40。
lcd_x ---------------------> Width(200)
lcd_y ---------------------> Height(400)
lcd_hspw ---------------------> Hsw(60)
lcd_hbp ---------------------> HBP+HSW(120+60=180)
lcd_ht ---------------------> Width+HSW+HBP+HFP(200+60+120+130=510)
lcd_vspw ---------------------> VSW(40)
lcd_vbp ---------------------> VBP+VSW(20+40=60)
lcd_vt ---------------------> Height+VSW+VBP+VFP(400+40+20+40=500)
lcd_sclk_freq ---------------------> lcd_ht * lcd_vt * fps,fps一般是60,结果取整,单位是MHz(510*500*60=15300000),即15M
那么,对board.dts文件中的屏时序相关参数配置如下:
lcd_x = <200>;
lcd_y = <400>;
lcd_dclk_freq = <15>;
lcd_hbp = <180>;
lcd_ht = <510>;
lcd_hspw = <60>;
lcd_vbp = <60>;
lcd_vt = <500>;
lcd_vspw = <40>;