Linux Framebuffer 驅動框架之一概念介紹及LCD硬件原理

一、基本概念

    幀緩衝(Framebuffer)是Linux系統爲顯示設備提供的一個接口,它將顯示緩衝區抽象,屏蔽圖像硬件的底層差異,允許上層應用程序在圖形模式下直接對顯示緩衝區進行讀寫操作。用戶不必關心物理顯示緩衝區的具體位置及存放方式,這些都是由幀緩衝設備驅動本身來完成。對於幀緩衝設備而言,只要在顯示緩衝區與顯示點對應的區域寫入顏色值,對應的顏色會自動在屏幕上顯示,下一小節重點講解各種模式下緩衝區與顯示點的對應關係。

/**********************************************************************************************************************************/

 原創作品,轉載時請務必以超鏈接形式標明文章原始出處:http://blog.csdn.net/gqb666/article/details/9338679,作者:gqb666  
/**********************************************************************************************************************************/

    幀緩衝設備爲標準字符設備,主設備號爲29,對應於/dev/fbn設備文件。應用程序可以通過打開讀寫此設備文件而講視頻及圖像數據輸出到顯示設備上。在接下來的博文中會介紹用戶態如果操作幀緩衝設備的方法,Linux抽象出FrameBuffer這個設備來供用戶態進程實現直接寫屏。 Framebuffer機制模仿顯卡的功能,將顯卡硬件結構抽象掉,可以通過Framebuffer的讀寫直接對顯存進行操作。用戶可以將Framebuffer看成是顯示內存的一個映像,將其映射到進程地址空間之後,就可以直接進行讀寫操作,而寫操作可以立即反應在屏幕上。這種操作是抽象的,統一的,用戶不必關心物理顯存的位置、換頁機制等等具體細節,這些都是由Framebuffer設備驅動來完成的,但Framebuffer本身不具備任何運算數據的能力,就只好比是一個暫時存放水的水池,CPU將運算後的結果放到這個水池,水池再將結果流到顯示器,中間不會對數據做處理,應用程序也可以直接讀寫這個水池的內容。在嵌入式系統中一般沒有專門的顯存,而僅僅是從RAM(SDRAM)空間中分配一段顯示緩衝區,典型結構如下圖所示:

     

二、顯示緩衝區與顯示點的關係

   在介紹顯示緩衝區與顯示點的關係前,先介紹下SOC或者CPU支持的色彩模式或者叫顏色位域色彩模式即一個像素的三元色分別有幾位數據組成。如RGBA8888則表示一個像素點由32位數據組,紅、綠、藍及透明度分別是8位。再或者ARGB8888則類似,只是在設置有有關數據結構時注意下順序及偏移即可。幀緩衝設備中,對屏幕顯示點的操作通過讀寫顯示緩衝區來完成,在不同的色彩模式下,顯示緩衝區和屏幕上的顯示點有不同的對應關係,下圖展示了一個像素點8位和16位情況下顯示緩衝區與顯示點的對應關係。

三、LCD的硬件原理及時序關係

    利用液晶製成的顯示器稱爲LCD,依據驅動方式可分爲靜態驅動、簡單矩陣驅動、以及主動矩陣驅動3種。其中,簡單矩陣型又可再細分爲扭轉向列型(TN)和超扭轉式向列型(STN)2種,而主動型矩陣則以薄膜式晶體管型(TFT)爲主流。下表列出這幾種顯示器的區別


   一塊LCD屏不但需要LCD驅動器,還需要有相應的LCD控制器。通常LCD驅動器會以COF/COG的形式與LCD玻璃基板製作在一起,而LCD控制器則由外部電路來實現。許多MCU內部直接集成了LCD控制器,通過LCD控制器可以方便地控制STN和TFT屏。

   TFT屏是目前嵌入式系統應用的主流。下圖給出了TFT屏的典型時序。時序圖中的VCLK、HCYNC、和VSYNC分別爲像素時鐘信號(用於鎖存圖像數據的像素時鐘)、行同步信號和幀同步信號,VDEN爲數據有效標誌信號,VD爲圖像的數據信號。


   作爲幀同步信號的VSYNC,每發出一個脈衝,都意味着新的一屏圖像數據開始發送到屏幕上,而作爲行同步信號的HSYNC,每發出一個脈衝都表明新的一行圖像數據開始發送到屏幕上。在幀同步以及行同步的頭尾都必須留有回掃時間,即圖中的(HBPD+1)和(HFPD+1)爲行回掃時間,(VBPD+1)和(VFPD+1)爲幀回掃時間。這樣的時序安排起源於CRT顯示器電子槍偏轉所需要的時間,但後來成爲實際上的工業標準,因此TFT屏也包含了回掃時間。

   下圖給出一幀數據在實際LCD顯示器上顯示的映射圖。其中的上邊界和下邊界即爲幀切換的回掃時間,左邊界和右邊界即爲行切換的回掃時間,水平同步和幀同步分別是行和幀同步本身需要的時間。x-res和y-res則分別是屏幕的水平和垂直分辨率。

               

下轉博文《Linux Framebuffer驅動框架之二軟件架構》。

接下來將有如下博文:

  Linux Framebuffer驅動框架之二軟件架構
 Linux Framebuffer 驅動框架之三相關數據結構
 Linux Framebuffer 驅動框架之四設備驅動接口
 Linux Framebuffer 驅動框架之五DVI設備驅動的實現
 Linux Framebuffer 驅動框架之六用戶態操作framebuffer


發佈了41 篇原創文章 · 獲贊 38 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章