本文轉載自:http://blog.csdn.net/u014770862/article/details/76274951?locationNum=2&fps=1
RK平台LCD調試說明
本篇博文使用Rockchip平台RK3288主控,向大家分享自己總結的Rockchip平台LCD調試的一些經驗。不足之處,敬請諒解!
Platform : Rockchip
Soc : RK3288
System : Android 5.1
RK3288的LCD調試,根據屏幕規格書對dts作相應的修改基本都可點亮,配置也較為簡單,有幾個概念容易混淆,單純的點屏基本上不需要了解相關的LVDS,EDP協議等。本篇博客大致講述RK平台LVDS、EDP屏的調試經驗,協議部分不會涉及,MIPI屏部分暫時還未深入了解。
前言
在fb驅動這塊,大致分為了四部分,rk_screen首先會讀取dts中screen信息,傳給screen_type驅動(本例也就是rk32_lvds.c),這些信息最終都會被fb獲取。詳細的流程分析請參考博文:RK平台fb源碼分析系列
LVDS調試
dts實例
貼一個LVDS屏參的實例,僅供參考:
disp_timings: display-timings {
native-mode = <&timing0>; timing0: timing0 { screen-type = <SCREEN_LVDS>; lvds-format = <LVDS_8BIT_2>; out-face = <OUT_P888>; color-mode = <COLOR_RGB>; clock-frequency = <43000000>; //43000000 hactive = <1024>; vactive = <600>; hback-porch = <100>; hfront-porch = <60>; vback-porch = <10>; vfront-porch = <8>; hsync-len = <5>; vsync-len = <2>; hsync-active = <0>; vsync-active = <0>; de-active = <0>; pixelclk-active = <1>; swap-rb = <0>; swap-rg = <0>; swap-gb = <0>; }; };
參數看起來挺多的,其實真正需要改的一般不多。那究竟哪些都需要修改呢?這當然是根據不同的LCD參考其規格書修改的,dts中需要重點關注的有以下幾個參數:
screen_type,lvds-format,out-face,clock-frequency,hactive,vactive,hbp,hfp,vbp,vfp
screen_type
screen-type表示屏幕類型(RGB,LVDS,EDP,MIPI,HDMI,MCU),如果該屏幕為LVDS屏,則screen-type就
應該取值為SCREEN_LVDS。如果是RGB屏幕,則screen-type取值為SCREEN_RGB。screen-type的值有以下
幾種:
SCREEN_RGB,SCREEN_LVDS(SCREEN_DUAL_LVDS,SCREEN_LVDS_10BIT,SCREEN_DUAL_LVDS_10BIT)
,SCREEN_HDMI,SCREEN_MIPI,SCREEN_DUAL_MIPI、SCREEN_EDP
#define SCREEN_NULL 0 #define SCREEN_RGB 1 #define SCREEN_LVDS 2 #define SCREEN_DUAL_LVDS 3 #define SCREEN_MCU 4 #define SCREEN_TVOUT 5 #define SCREEN_HDMI 6 #define SCREEN_MIPI 7 #define SCREEN_DUAL_MIPI 8 #define SCREEN_EDP 9 #define SCREEN_TVOUT_TEST 10 #define SCREEN_LVDS_10BIT 11 #define SCREEN_DUAL_LVDS_10BIT 12
lvds_format
lvds-format表示LVDS的數據方式,只有在該屏幕是LVDS屏的時候該參數才有效。該值需要結合屏幕和LVDS在
硬件上的連接方式來定義。lvds_format的值有以下幾種:LVDS_8BIT_1、LVDS_8BIT_2、LVDS_8BIT_3、
LVDS_6BIT。
#define LVDS_8BIT_1 0 #define LVDS_8BIT_2 1 #define LVDS_8BIT_3 2 #define LVDS_6BIT 3 #define LVDS_10BIT_1 4 #define LVDS_10BIT_2 5
LCD的datasheet一般都會說明LVDS信號在各個通道上的分配方式,如下: 
如上圖所示,我們將LVDS通道分為Y0、Y1、Y2、Y3,其中Y0對應於上圖的Rxin0,Y1對應於上圖的Rxin1,Y2和Y3以此類推,一個通道可以傳輸7bit數據。根據規格書,那么lvds-format我們究竟選擇哪一個呢?這幾種格式得區別如下:
當然了,事事無絕對,上述判斷只能得出大概結論,不能100%保證正確。主要還是由於屏線的原因,開發板底座和屏之間並不是一一對應起來的,也就是說屏的引腳和底座之間排線的選擇並不唯一。不過,最為穩妥的方法應該是根據” LVDS Data Input Format”與屏引腳定義來判斷lvds-format,因為我們總是要滿足”屏”(最起碼屏線不要接錯)。
LVDS兩種format:FORMAT 1、 FORMAT 2
兩者主要區別在於Y3通道上FORMAT 1傳輸的是顏色的高兩位,FORMAT 2傳輸的是顏色的低兩位。通常LCD顯示有水彩,就是lvds-format設置錯誤,調換format即可。
液晶屏中常見的LVDS數據映射標准(將像素的並行數據轉化為串行數據)有VESA和JEIDA兩種格式,一般情況下均是默認JEIDA格式。有些LVDS屏也會在datasheet中說明:
這款LG的LVDS屏,當第7腳為高電平時,邏輯板工作在JEIDA格式下,為低電平或NC時工作在VESA格式下。兩種格式的區別如下:
從規格書中可以發現,兩種格式的區別主要在於第3通道(D)上,JEIDA格式的第三通道是各種顏色的低兩位(R0 R1 G0 G1 B0 B1),而VESA格式的第三通道上傳輸的是顏色的高兩位(R6 R7 G6 G7 B6 B7)。對應於dts中的lvds_format,也就等同於:
JEIDA —-> LVDS_8BIT_2
VESA —-> LVDS_8BIT_1
LVDS有多種數據傳輸模式:單路6bit LVDS、雙路6bit LVDS、單路8bit LVDS、雙路8bit LVDS
SoC中,單路還是雙路工作方式不同:


因此,單路或是雙路處理方式不同而已。事實上,單雙路的控制就是通過配置lvds dual cnannel control的開關,配置如下: 
而代碼中,也是這樣控制來作區分的(可參考博文RK FB源碼分析之SCREEN_TYP)
如何從屏幕規格書中來區分是單路還是雙路?
有的規格書會簡述,如:LVDS(1 ch,8 bit),表示LVDS接口類型是單通道,8bit的信號帶寬(RGB每色有8階色彩,總色為2^8*2^8*2^8=1677W色)。
最直觀簡單的方式就是從屏的引腳定義分析,通常雙路LVDS屏都會有odd(or first) input channel和even(or second) input channel,例如:
而單路LVDS通常只有三組或者四組data input和一組clock,例如: 
clock-frequency
雙路LVDS時,clocks要取LCD規格書中典型值的2倍
單路LVDS時,clocks取LCD規格書中的典型值即可
out-face
屏幕采用多少位的接線方式。如果是24bit的屏幕,則為OUT_P888;如果是18bit的屏幕, 數據線分別接在每種
單元色的高六位則定義為OUT_D888_P666(就是B0 B1 G0 G1 R0 R1不接),如果數據線接在LCDC的低 18 位
(connect to lcdc D0~D17),則定義為 OUT_P666。這個如果設置的不正確,比如 24bit 的接法,定義成
OUT_D888_P666或者OUT_P666 就有可能出現色階。
該參數可判斷規格書Display Colors的值做參考。
其它參數
hback-porch,hfront-porch,vback-porch ,vfront-porch,hsync-len,vsync-len
上述六個參數按照規格書來填充(目前大多數屏都是DE mode,DE模式的話一般都會標明DE mode only),DE模式只需要關注兩個參數Vertical section blanking和Horizontal section blanking,例如:
上圖中,Vertical section blanking=42, Horizontal section blanking=204,在填充6個參數時只需要滿足關系:vbp+vfp+vs=42,hbp+hfp+hs=204,各值自行分配(通常hbp和vbp取較大值),例如
hback-porch = <150>;
hfront-porch = <50>;
vback-porch = <30>;
vfront-porch = <11>;
hsync-len = <4>;
vsync-len = <1>;
hsync-active,vsync-active,de-active,pixelclk-active,各參數含義如下:
hsync-active: hsync pulse is active low/high/ignored
vsync-active: vsync pulse is active low/high/ignored
de-active: data-enable pulse is active low/high/ignored
pixelclk-active:
active high = drive pixel data on rising edge/ sample data on falling edge
active low = drive pixel data on falling edge/ sample data on rising edge
ignored = ignored
其中,需要注意參數pixelclk-active,該參數控制有效的pixel data數據在rising edge還是falling edge顯示.LVDS顯示有雪花點,噪點等情況時可調整該參數。
EDP調試
待續
