LCD及DSI一些基本概念

  • 水平消隐(HBlank):
    电子枪从左到右画出象素,它每次只能画一条扫描线,画下一条之前要先回到左边并做好画下一条扫描线的准备,这之间有一段时间叫做水平消隐。
  • 垂直消隐(VBlank):
    在画完全部256条扫描线之后它又回到屏幕左上角准备下一次画屏幕(帧),这之间的一段时间就是垂直消隐。电子枪就是在不断的走‘之’字形。
  • 行同步(HSYNC):
    行同步就是让电子枪控制器知道下面要开始新的一行像素
  • 场同步(VSYNC:
    场同步就是告诉电子枪控制器下面要开始新的画面
  • 数据使能(DE):
    在数据使能区是有效的色彩数据,不在使能范围内的都显示黑色。
  • 前肩(Front Porch)/后肩 (Back Porch):
    行同步或场同步信号发出后,视频数据不能立即使能,要留出电子枪回扫的时间。以行扫描为例,从HSYNC结束到DE开始的区间成为行扫描的后肩(绿色区域),从DE结束到HSYNC开始称为前肩(紫色区域)。同样对于场扫面也可以由类似的定义
  • 像素时钟(Pixel clock)
  • 带宽

H-total = HorizontalActive + HorizontalFrontPorch + HorizontalBackPorch + HorizontalSyncPulse + HorizontalSyncSkew
V-total = VerticalActive + VerticalFrontPorch + VerticalBackPorch + VerticalSyncPulse + VerticalSyncSkew
Total pixel = H-total * V-total * 60(Hz通常都是这个,当然可以变).
Bitclk = Total pixel * bpp(byte) *8/lane number(有几路mipi data lane).
Byteclk = bitclk/8
Dsipclk(Dsi pixel clock) = (Byteclk * lane number)/bpp(byte) = Total pixel * 8
Byteclk = pclk * pixel depth / lane number

MIPI- LCD:

高通8x12平台 mipi屏 调试
DSI两种操作模式:

  • Command
    command mode从host端获取command和data。但是这个使用command mode的LCD有自己的RAM和controller,它会自刷新静态图片。MSM能直接进入休眠,节约电量。但会多出来RAM和Controller的成本。Command mode的信息是双向的,host能从panel上读和写数据。Host能同步数据通过从 panel中读取Tearing Effect(TE)信号(Vsync)去避免TE

  • Video
    video mode获取实时的pixel stream。DSI Controller必须不停的刷新image data,这个模式一般用于没有 RAM的panel。Host提供video data和同步信息,同步信息有Vsync、Hsync、data enable和pixel clock。Video mode操作与RGB接口很类似,但是使用的pin脚更少,所以EMI和无线电干扰更小

常用的是Video模式,LCD模组为Video Mode,但通常在LCD模组初始化时还是使用Command Mode模式来读写寄存器,因为在低速下数据不容易出错且容易测量

调试过程

电源控制脚与复位脚配置

参考原理图

disp_mipi_power_ctr: mipi_power_ctr {
	compatible = "rockchip,mipi_power_ctr";
	mipi_lcd_en:mipi_lcd_en {
		compatible = "rockchip,lcd_en";
		rockchip,gpios = <&gpio7 GPIO_A1 GPIO_ACTIVE_HIGH>;
		rockchip,delay = <100>;
	};
	mipi_lcd_rst:mipi_lcd_rst{
		compatible = "rockchip,lcd_rst";
		rockchip,gpios = <&gpio7 GPIO_A3 GPIO_ACTIVE_HIGH>;
		rockchip,delay = <200>;
		};
	};

配置LCD相关参数

配置宽,高,bpp等,参考LCD的datasheet

disp_timings: display-timings {
		native-mode = <&timing0>;
		timing0: timing0 {
			screen-type = <SCREEN_MIPI>;
			out-face    = <OUT_P888>;
			clock-frequency = <66670000>;
			hactive = <800>;
			vactive = <1280>;

			hsync-len = <18>;
			hback-porch = <18>;
			hfront-porch = <18>;
			
			vsync-len = <4>;
			vback-porch = <4>;
			vfront-porch = <16>;
			
			hsync-active = <0>;
			vsync-active = <0>;
			de-active = <0>;
			pixelclk-active = <0>;
			swap-rb = <0>;/*颜色翻转*/
			swap-rg = <0>;
			swap-gb = <0>;
		};
	};

配置DSI相关参数:

lane数和时钟:

rockchip,dsi_lane     = <4>; /* lane 数*/
rockchip,dsi_hs_clk   = <1000>;
rockchip,mipi_dsi_num = <1>; /*单 双mipi*/

初始化Command

具体参数需要LCD厂商提供, 格式因CPU厂商驱动代码而不同,以下是RK的
格式:命令类型(如 0x05/0x15/0x39)+指令+参数

0x05:只有指令,没有参数
0x15:只有一个参数
0x39:有多个参数

更多命令类型请参考MIPI-DSI协议

disp_mipi_init_cmds

rockchip,on-cmds1 {
	compatible = "rockchip,on-cmds";
	rockchip,cmd_type = <LPDT>;
	rockchip,dsi_id = <0>;
	rockchip,cmd = <0x15 0xE0 0x00>;
	rockchip,cmd_delay = <0>;/*命令发完后的延时,延时时间根据屏厂给的初始化序列来配置。*/
};

动态背光控制功能(CABC)