對於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協議
mipi是mobile 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...