1. 程式人生 > >S5PV210 液晶屏LCD

S5PV210 液晶屏LCD

1. LCD基本概念

1.1 LCD原理

液晶分子的偏轉,不會改變透過光線的多少,而能改變偏振光的偏振方向,所以在液晶面板的兩側,需要2張偏振片,在背光源和液晶分子之間的偏振片,負責把背光的自然光過濾為單一方向的偏振光,而液晶分子到你的眼睛之間的偏振片與第一張偏振片的偏振方向垂直90度,當沒有電壓驅動液晶分子旋轉時,透過第一張偏振片的偏振光完全被第二張偏振片擋住,顯示黑色(0灰階),當有電壓驅動液晶分子旋轉時,透過的偏振光與液晶分子旋轉角度相關,逐步顯示為白色(100%灰階)。
連結:https://www.zhihu.com/question/28261046/answer/68550355 來源:知乎

TFT-LCD是目前使用最多的LCD。

1.2 LCD介面

液晶屏提供的輸入電平是TTL電平的。一般各種控制器的輸出IO也是TTL電平的,理論上說,將兩者直接連線就好了,但是由於TTL電平不能長距離傳輸,所以需要轉接線,實現 TTL->VGA(或DVI/HDMI)->TTL。

  • VGA接頭:針數為15的視訊介面,主要用於老式的電腦輸出。VGA輸出和傳遞的是模擬訊號。大家都知道計算機顯示卡產生的是數字訊號,顯示器使用的也是數字訊號。所以使用VGA的視訊介面相當於是經歷了一個數模轉換和一次模數轉換。訊號損失,顯示較為模糊。
  • DVI介面:DVI介面有兩個標準,25針和29針。直觀來說,這兩種介面沒有區別。DVI介面傳輸的是數字訊號
    ,可以傳輸大解析度的視訊訊號。DVI連線計算機顯示卡和顯示器時不用發生轉換,所以訊號沒有損失。
  • HDMI介面:HDMI介面傳輸的也是數字訊號,所以在視訊質量上和DVI介面傳輸所實現的效果基本相同。HDMI介面還能夠傳送音訊訊號

但是由於TTL電平傳輸的不穩定,也有LVDS等電平介面的液晶屏。見下網頁。
http://blog.csdn.net/wocao1226/article/details/23870149

1.3 一些基本概念

畫素(pixel)
畫素就是組成影象的最基本元素,或者說顯示中可以被控制的最小單位,整個影象就是由很多個畫素組成的。

畫素間距(pitch)
pitch是連續2個畫素的畫素中心的距離。一般的畫素是方形的,所以橫向pitch和縱向的pitch一樣的。但是也有不一樣的。

螢幕尺寸
螢幕尺寸指的就是螢幕有幾寸,可以由螢幕的畫素數目和畫素間距計算出來。

解析度(resolution)
整個螢幕的橫向和縱向的畫素個數就叫解析度,譬如X210開發板用的螢幕是1024 X 600。

清晰度
螢幕尺寸固定時解析度越高越清晰,解析度越低就越不清晰;解析度固定下,螢幕尺寸越小越清晰,越大越不清晰。

畫素深度(bits per pixel,簡稱bpp)
計算機中用二進位制位來表示一個畫素的資料,用來表示一個畫素的資料位越多,則這個畫素的顏色值更加豐富。常見畫素深度:1位、8位、16位、24位、32位。

  • 1位:用1個二進位制位來表示顏色,這種就叫單色顯示。示例就是小飯店、理髮店門口的LED屏。
  • 8位:用8個二進位制位來表示顏色,此時能表示256種顏色。這種叫灰度顯示。這時候是黑白的,沒有彩色,我們把純白到純黑分別對應255到0,中間的數值對應不同的灰。示例就是以前的黑白電視機。
  • 16位:用16個二進位制位表示顏色,此時能表示65536種顏色。這時候就可以彩色顯示了,一般是RGB565的顏色分佈(用5位二進位制表示紅色、用6位二進位制表示綠色、用5位二進位制表示藍色)。這種紅綠藍都有的顏色表示法就是一種模擬自然界中所有顏色的表示方式。但是因為RGB的顏色表達本身二進位制位數不夠多(導致紅綠藍三種顏色本身分的都不夠細緻),所以這樣顯示的彩色失真比較重,人眼能明顯看到顯示的不真實。
  • 24位:用24個二進位制位來表示顏色,此時能表示16777216種顏色。這種表示方式和16位色原理是一樣的,只是RGB三種顏色各自的精度都更高了(RGB各8位),叫RGB888。此時顏色比RGB565更加真實細膩,雖然說比自然界無數種顏色還是少了很多,不過由於人眼的不理想性所以人眼幾乎不能區分1677萬種顏色和無數種顏色的差別了。於是乎就把這種RGB888的表示方法叫做真彩色。(RGB565就是假彩色)
  • 32位:總共用32位二進位制來表示顏色,其中24位表示紅綠藍三元色(還是RGB888分佈),剩下8位表示透明度。這種顯色方式就叫ARGB(A是阿爾法,表示透明度),現在PC機中一般都用ARGB表示顏色。


顯示器上一整個畫面的內容成為一個幀(frame),整個顯示器工作時是一幀一幀的在顯示。

掃描
掃描就是依次將顏色數值放入螢幕中所有的畫素的這個過程。顯示器的掃描顯示原理依賴於人眼的視覺暫留。(掃描頻率的概念就叫做重新整理率)。

顯示記憶體(簡稱:視訊記憶體)
SoC在記憶體中挑選一段記憶體(一般來說是程式設計師隨便挑選的,但是挑選的時候必須符合一定規矩),然後通過配置將LCD控制器和這一段記憶體(以後稱為視訊記憶體)連線起來構成一個對映關係。一旦這個關係建立之後,LCD控制器就會自動從視訊記憶體中讀取畫素資料傳輸給LCD驅動器。這個顯示的過程不需要CPU的參與。

驅動器與控制器
LCD驅動器一般和LCD顯示面板整合在一起(本來是分開的,做面板的是隻做面板的,譬如說三星、LG、臺灣的友達、奇美都是做面板的;驅動器也由專門的IC廠商生產;整合廠商買來面板和驅動器後集成在一起做成LCD螢幕),面板只負責裡面的液晶分子旋轉透光,面板需要一定的模擬電訊號來控制液晶分子;LCD驅動器晶片負責給面板提供控制液晶分子的模擬電訊號,驅動器的控制訊號(數字訊號)來自於自己的數字介面,這個介面就是LCD螢幕的外部介面。

LCD控制器一般整合在SoC內部,他負責通過數字介面向遠端的LCD驅動器提供控制畫素顯示的數字訊號。

1.4 LCD控制時序

LCD時序

時序圖如上所示。在一幀影象的顯示過程中,是逐行逐個顯示的。

  1. 一行的通訊過程是這樣的:LCD控制器先發送一個HSYNC高電平脈衝(脈衝寬度是HSPW),脈衝告訴驅動器下面的資訊是一行資訊。然後開始這一行資訊,這一行資訊包括3部分:HBPD+有效行資訊+HFPD。其中前肩和後肩都屬於時序資訊(和LCD螢幕具體有關),有效行資訊就是橫向解析度。所以可以認為一行總共包含4部分:HSPW+HBPD+有效行資訊+HFPD。
  2. 一幀影象其實就是一列,一列影象由多個行組成,每行都是上面講的這個時序。
  3. 一幀影象的通訊過程是這樣的:整個幀影象訊號分為4部分:VSPW+VBPD+幀有效訊號+VFPD。VSPW是幀同步訊號寬度,用來告訴驅動器一幀影象要開始了;VBPD和VFPD分別是垂直同步訊號前後肩。
  4. 必須說明:這6個引數對於LCD顯示器其實本來是沒用的,這些訊號其實是老式的CRT顯示器才需要的,LCD本身不需要,但是出於歷史相容性要求,LCD選擇了相容CRT顯示器的這些時序要求。
  5. 要注意,這幾個時序引數本身是LCD螢幕本身的引數,與LCD控制器無關。所以同一個主機板如果接的螢幕不一樣則時序引數設定也會不同。這些引數的來源一般是:第一,廠家會直接給出,一般以例項程式碼的形式給出;第二,來自於LCD的資料手冊。

1.5 S5PV210的LCD控制器

1.5.1 FIMD結構框圖

  • 210的LCD控制器叫FIMD,FIMD是210內部和影象處理相關的一些部件,在攝像頭等和影象處理有關的部分都可以有關聯。
  • FIMD在內部與AHB匯流排等相連線,在外部提供RGB介面、I80介面、YUV介面與外部相連線,我們實際使用的是RGB介面。

1.5.2 虛擬螢幕疊加(資料手冊P1194)

  • 虛擬螢幕的意思是,我們平時看到的螢幕上顯示出來的場景實際是很多個螢幕顯示疊加在一起的效果(譬如新聞影象、電視臺臺標、下方飄動的字幕新聞)
  • 像S5PV210的LCD控制器中有5個虛擬螢幕Window0到Window4,虛擬螢幕不存在於真實而存在於記憶體中。虛擬螢幕其實就是一個記憶體中的視訊記憶體區域,有幾個視訊記憶體區域就有幾個虛擬螢幕,但是這些虛擬螢幕都被對映到一個真實的顯示屏上面,所以將來真實的現實效果實際是這幾個虛擬螢幕的顯示內容的疊加。(疊加時要注意上面一層會覆蓋下面一層,所以要注意誰在前誰在後,設定暫存器時有這個選項)
  • 使用虛擬螢幕而不是整個LCD使用一個視訊記憶體是有一定好處的:第一,可以保證不汙染源影象,方便程式處理;第二,可以減少螢幕重新整理,提高顯示效率,減少CPU工作量。

1.5.3 虛擬顯示(資料手冊P1206)

  • 如何實現在小解析度的螢幕上(真實)顯示大解析度的影象?即使我們只需要螢幕顯示移動一點點,整個螢幕對應的視訊記憶體空間也需要整個重新重新整理,工作量和完全重新顯示一幅影象是一樣的。這個顯然不好,這樣CPU重新整理螢幕的工作量太大了,效率很低。
  • 如何能夠在顯示一個大圖片的不同區域時讓CPU重新整理螢幕工作量減少?有,方法就是虛擬顯示。具體做法就是在記憶體中建立顯示快取的時候實際建立一個很大的區域,然後讓LCD去對應其中的一部分割槽域作為有效的顯示區域。將來要顯示大影象時,直接將大影象全部一次性載入入顯示快取區,然後通過移動有效顯示區域就可以顯示大影象的不同區域了。

1.6 畫素著色函式

u32 *pfb = (u32 *)(0x23000000);
static inline void lcd_draw_pixel(u32 x, u32 y, u32 color)
{
    *(pfb + COL * y + x) = color;
}

這個函式是所有畫線、顯示影象等的基礎:對某一個畫素進行操作。指標pfb就是視訊記憶體的起始地址。 pfb顯然是一個32位的指標,即指向四個位元組的資料,這四個位元組的資料控制一個畫素點。在計算某個畫素點的視訊記憶體地址時有兩種寫法:

  • 0x23000000+ 4 * (COL * y + x)
  • pfb + COL * y + x

這兩者都是可行的,指標pfd是一個32位的指標,所以其加一就相當於地址加4。