android lcd驅動簡析

2021-07-04 14:21:47 字數 3736 閱讀 6530

對於lcd驅動的分析主要分為三部分:

底層硬體結構**

framebuffer**

mipi**

底層硬體結構**

1、    要使一塊lcd正常的顯示文字或影象,不僅需要lcd驅動器,而且還需要相應的lcd控制器。在通常情況下,生產廠商把lcd驅動器與lcd玻璃基板製作在一起,而lcd控制器則是由外部的電路來實現(平台自帶),現在很多的mcu內部都整合了lcd控制器,。通過lcd控制器就可以產生lcd驅動器所需要的控制訊號來控制stn/tft屏了。

2、    lcd控制器結構圖(旨在說明原理,lcd的結構因其通訊方式的不同而不同)

我們根據資料手冊來描述一下lcd控制器:

a:lcd控制器由regbank、lcdcdma、timegen、vidprcs暫存器組成;

b:regbank由17個可程式設計的暫存器組和一塊256*16的調色盤記憶體組成,它們用來配置lcd控制器的;

e:timegen(脈衝發生器)由可程式設計的邏輯組成,他生成lcd驅動器需要的控制訊號,比如vsync、hsync、vclk和lend等等,而這些控制訊號又與regbank暫存器組中的lcdcon1/2/3/4/5的配置密切相關,通過不同的配置,timegen就能產生這些訊號的不同形態,從而支援不同的lcd驅動器(即不同的stn/tft屏)。

3、     常見tft屏工作時序分析

vsync:垂直同步訊號(幀同步訊號) , 通知lcd屏新的一幀顯示

hsync:水平同步訊號(行同步脈衝訊號),代表重新整理一行

vclk:象素時鐘訊號(乙個畫素代表乙個點)

vd[23:0]:lcd畫素資料輸出埠(rgb訊號線)

vden:資料使能訊號(tft),代表傳送資料有效

lend:行結束訊號訊號,代表一行結束

上面時序圖上各時鐘延時引數的含義如下:(這些引數的值,lcd產生廠商會提供相應的資料手冊)

vbpd(vertical back porch):表示在一幀影象開始時,垂直同步訊號以後的無效的行數,對應驅動中的upper_margin;

vfbd(vertical front  porch):表示在一幀影象結束後,垂直同步訊號以前的無效的行數,對應驅動中的lower_margin;

vspw(vertical sync pulse  width):表示垂直同步脈衝的寬度,用行數計算,對應驅動中的vsync_len;

hbpd(horizontal back porch):表示從水平同步訊號開始到一行的有效資料開始之間vclk的個數,對應驅動中的left_margin;

hfpd(horizontal front  porth):表示一行的有效資料結束到下乙個水平同步訊號開始之間的vclk的個數,對應驅動中的right_margin;

hspw(horizontal sync  pulse width):表示水平同步訊號的寬度,用vclk計算,對應驅動中的hsync_len;

幀緩衝(framebuffer)**

1、    幀緩衝(framebuffer)**結構

圖中fbmem.c為linux核心部分,它定義了乙個統一的與userspace互動的字元裝置(這裡暫時把它稱為file_operations),這個檔案還定義了乙個register_framebuffer操作(這個操作的目的是建立乙個與主裝置號相同的裝置,例如fb0,fb1,fb2)。因為註冊的裝置都需要通過file_operations來實現userspace與kernel的互動,因此,register_framebuffer之前,需要填充乙個fb_info來儲存裝置的資訊,fb_info是區分fb0,fb1,fb2…的關鍵。

2、    fb_info的構成(只列出關鍵組成部分)

struct fb_info ;

fb_var_screeninfo主要記錄使用者可以修改的控制器的參 數,比如螢幕的解析度和每個畫素的位元數

fb_fix_screeninfo fix主要記錄使用者不可以修改的控制 器的引數,比如螢幕緩衝區的實體地址和長度等

structfb_var_screeninfo

structfb_fix_screeninfo

struct fb_ops

mipi**

在android體系中,lcd使用mipi匯流排來實現控制器(cpu一端)與驅動器(外設lcd屏)的通訊,因此這裡介紹一下mipi協議

1、mipi協議

mipimobile industry processor inte***ce的縮寫。mipi(移動行業處理器介面)是mipi聯盟發起的為移動應用處理器制定的開放標準。為了把移動裝置內部的介面如攝像頭、顯示屏、基帶、射頻介面等標準化,從而增加設計靈活性,同時降低成本、設計複雜度、功耗和emi。

mipi在android體系中常見的有兩種:dsi, csi (displayserialinte***ce, cameraserialinte***ce)

dsi 定義了乙個位於處理器和顯示模組之間的高速序列介面。(lcd連線協議)

csi 定義了乙個位於處理器和攝像模組之間的高速序列介面。(camera連線協議)

2、dsi分層結構

dsi相容的外設支援command或video操作模式兩種模式

• command模式是指採用傳送命令和資料到具有顯示快取的控制器。主機通過命令間接的控制外設。command模式採用雙向介面,用於傳送指令,傳輸速率較低,精確率高

• video模式是指從主機傳輸到外設採用時實象素流。這種模式只能以高速傳輸。為減少複雜性和節約成本,只採用video模式的系統可能只有乙個單向資料路徑。用於傳送幀資料,傳輸速率高,精確率低

d-phy

物理描述 乙個

phy配置包括:乙個時鐘

lane

,乙個或多個資料

lane • 

兩個lane

的phy

配置如下圖

的傳輸模式 • 

低功耗(

low-power

)訊號模式(用於控制):

10mhz (max) • 

高速(high-speed

)訊號模式(用於高速資料傳輸):

80mbps ~ 1gbps/lane

傳送資料時必須低位在前,高位在後.

驅動中位域操作簡析

在sm501的驅動中,暫存器非常多,每個暫存器位域的定義也特別多。驅動採用了一套非常奇妙的巨集來操作暫存器的位域。覺得有必要總結一下。1 相關定義 包括3 個方面 暫存器,暫存器位域,暫存器位域的可取值。其中,暫存器位域的表示用以0為起始索引的 高位 低位 來表示。這點非常重要,因為後面的巨集定義就...

linux4 3 2 塊裝置驅動簡析 2

上次我們了解到,mmc card裝置驅動通過mmc bus type這條匯流排找到了block驅動,由block驅動去載入該裝置。今天我們再進一步去了解這整個過程。我們都知道,mmc card的驅動需要啟動中斷並配合定時器去檢測是否有卡插入,那這個功能是在 實現的呢?在函式 mmc alloc ho...

strtok函式簡析

官方的strtok函式,用來通過分隔字元 不支援字串,傳入的串中每個字元單獨當分隔符,如下例子組合的如123會處理1而23會被跳過 返回分隔的串的首位址 比如呼叫strtok abc123def 123456 返回值是指向abc的指標 下次要獲得 def 需要呼叫strtok null,123456...