MIPI-LCD调试
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)去避免TEVideo
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>;/*命令发完后的延时,延时时间根据屏厂给的初始化序列来配置。*/
};