FIMD架構分析

2021-06-18 08:02:40 字數 4611 閱讀 4966

**:

fimd架構分析

華清遠見嵌入式學院講師。

一、名稱含義(fimc& fimd)

fimc :

fully interactive mobile camera (完全互動式移動攝像機)

fimd: 

fully interactive mobile display (完全互動式移動顯示裝置)

二 、fimd 體系分析

lcd 的基本特性如下:

●    the conventional rgb inte***ce 

●    the indirect-i80 inte***ce 

●    itu-r bt.601

●    itu-r bt.656

每種介面支援 5 overlay image windows

●    win 0(base): local /(ycbcr,rgb without pallette)

●    win 1(overlay 1): rgb (palette)

●    win2(overlay 2) : rgb (palette)

●    win 3(caption ) 標題層:rgb(1/2/4)with 16 level color lut (16級1,2,4bits顏色對照表)

●    win4 (cursor) 游標層: rgb(1/2) with 4 level color lut (rgb 1,2bits 顏色對照表)

在測試過程中,我們只關注rgb介面,所以我們這裡是考察rgb型別inte***ce的時序。

lcd 一般需要三個時序訊號:vsync、hsync 和vclk。vsync 是垂直同步訊號,在每進行乙個幀(即乙個屏)的掃瞄之前,該訊號就有效一次,由該訊號可以確定lcd 的場頻,即每秒螢幕重新整理的次數(單位hz)。hsync 是水平同步訊號,在每進行一行的掃瞄之前,該訊號就有效一次,由該訊號可以確定lcd 的行頻,即每秒螢幕從左到右掃瞄一行的次數(單位hz)。vclk 是畫素時鐘訊號,理說,對於乙個已知尺寸(即水平顯示尺寸hozval 和垂直顯示尺寸lineval 已知)的lcd 屏,只要確定了vclk 值,行頻和場頻就應該知道了。但這樣還不行的,因為在每一幀時鐘訊號中,還會有一些與屏顯示無關的時鐘出現,這就給確定行頻和場頻帶來了一定的複雜性。如在hsync 訊號先後會有水平同步訊號前肩(hfpd)和水平同步訊號後肩(hbpd)出現,在vsync 訊號先後會有垂直同步訊號前肩(vfpd)和垂直同步訊號後肩(vbpd)出現,在這些訊號時序內,不會有有效畫素訊號出現,另外hsync 和vsync訊號有效時,其電平要保持一定的時間,它們分別叫做水平同步訊號脈寬hspw 和垂直同步訊號脈寬vspw,這段時間也不能有畫素訊號。因此計算行頻和場頻時,一定要包括這些訊號。hbpd、hfpd 和hspw 的單位是乙個vclk 的時間,而vspw、vfpd 和vbpd 的單位是掃瞄一行所用的時間。

說明下:其中的hspw ,hbpd,hfpd,vspw,vspd,vfpd都是可程式設計的。

再來看下lcd時鐘源:

整個fimd可選用兩路時鐘源,一路是hclk1,即d1_bus,第二路是sclk_lcd,它可由mpll分流,也可由epll分流。具體需要配置時鐘相關的暫存器。這裡筆者推薦使用sclk_lcd這一路,且由mpll過來的時鐘源。(lcd max clock is 66mhz),在測試中我們使用的是9mhz;

如下是fimc通用介面以及功能。

整個lcd control可以分為 data enter , data process ,data display 三個部分,每個環節都有自己的技術特點,data enter 分為兩路,一路是內建dma , 一路是本地fifo。

前者是通過axi master從記憶體中的某一片area直接引用進來,可以看成是種對映,也可以是把記憶體關聯好後,開啟dma。讓它自行資料獲取。再來說說後者,後者是一種fimd/c框架的特點,它是fimc 到fimc的本地通訊手段,它避開了axi匯流排。直接通道資料訪問,使得效能更強勁。

再來看看,data process部分,data process部分具體羅列如下

簡單解釋下這兩個線性方程,b' 是乙個色值函式,它由a的色值分量與b的色值分量線性疊加而成。此處,a的色值來自win(n+1),b的色值來自win(n), a,b則是線性因子。我們只需要考慮a,b的值,就可以得到我們想要的結果,同理alphab' 是乙個b'色值的伴隨灰度值函式,專業點說,就是一組alpha通道。

它的構成與前乙個方程是同構的。 p,q也是線性因子,這樣4個因子決定了兩個視窗的最終疊加色值以及伴隨alpha的值。(注意,a,b,p,q是只能可選值,從圖中可以看出這一點。)

在fimd中,只需要配置winn blending equation control register,並將具體的因子配好後,就可以實現了,注意5個視窗需要同時配置方程。

在來重點考察下alphab灰度值,它是乙個8bits的值,從0-255分別代表了不同的灰度級。從方程中可以看出,如果乙個alpha值與乙個色值相乘後,就會得到乙個該色值的分量,這樣兩個視窗的疊加就靠不同的灰度來確定。換句話說,如果要使得win1-win4窗體整體透明,那必須要使得win1-win4的灰度級最高,則使得alpha value為0,並且色值方程配置pn=0,qn=0,an=alphaa,bn=(1-alphaa),其中n=即可實現window 0顯示,而其他視窗透明。

現在來說下虛擬實境的方式,其實虛擬顯示主要就是靠在一次幀中得偏移計算得到,我們知道,在framebuffer中存放的就是要顯示的資料,假如現在我們顯示的是一張16bits(r:5:g6:b5)bpp, non-pallette的點陣圖。那乙個pixel就占用了兩個bytes,並且lcd顯示屏的標準輸出畫素是480*272,這樣每一幀實際記憶體占用大小就是480*272*2個位元組。但是如果的本身大小假設是960*544,那它的記憶體占用大小則是960*544*2,也就是說,我們只要能計算出想要開始顯示的位置,那就可以輸出我們想要的效果:

offset = framebuffer_start_address+x * 2 + y * 480 * 2;

但是一定判斷是否躍出framebuffer的最大長度以及輸出的幀的有效位置,如果超過了,那麼很可能會扭曲。注意,s5pc100的最大虛擬顯示解析度可達16m.

3、csc(color space convertor)

這是乙個圖形格式轉換的介面,它提供了乙個從本地fifo拿到的ycrcb格式的資料轉換成rgb格式的功能。

三、 program module flow

<1>配置 video main control(n,0-2) register 這類暫存器基本控制了整個control的時鐘屬性,掃瞄方式,輸出格式的選擇,video output的輸出使能,獲取當前幀使能。

<2>配置 video time control(n,0-2) register,該類暫存器配置了lcd顯示屏的物理極性,時序間隔,輸出尺寸。

<3>配置 window (n,0-4) control register ,資料輸入路徑選擇,交換資料長度。burstlen,bppmode的配置等。

<4>配置alpha equation blending factor以及 window alpha_n control register,配置混合方程因子,以及配置alpha通道的值。

<5>配置windows (n,0-4) postion control register ,窗體位置資訊。包括osd infomation。

<6>繫結framebuffer位址。

<7>window(n,0-4),輸出使能。

按照這7步,只要時鐘是正確範圍內的配置,一般是有影象輸出的。

四:總結fimd

在整個移植裸機的過程中,發現了一些問題以及解決方案,先羅列如下:

1、上電後,lcd螢幕全為白色,表示工作就位。

2、測試時候,如果出現藍色背景,並且會有乙個週期的緩慢重新整理過程,則表示video main的暫存器配置有問題。

3、如果lcd僅僅是綠色背景,有可能也帶有一些浮紋,則表示bppmode沒有選擇正確。

4、扭曲,則說明osd_hsize /osd_wsize沒有設定正確,或者horizontal/lineval沒有配置正確。因為它的時序發生混亂了。需要調整正確才能正常顯示。

Pidgin架構分析

pidgin是乙個可以在windows linux bsd和unixes下執行的多協議即時通訊客戶端,可以讓你用你所有的即時通訊帳戶中一次登入。pidgin支援的通訊 aim bonjour gadu gadu google talk groupwise icq irc msn myspaceim ...

Spring Flex 架構分析

spring flex 架構分析 spring flex是spring和adobe共同研發的乙個開源專案,她整合了 spring的優秀特性和blaseds的工作機制,使用spring也可以很好的應用在ria應用程式開發中。spring flex整合後的服務端工作原理圖 1 2 暴露運程服務,支援如下...

nhibernate架構分析

以nhibernate prealpha build 2為準 從圖中可以看到,session和sessionfactory是nhibernate的核心部分。sessionfactory維護到持久機制 資料庫 的連線並對它們進行管理,同時還儲存著所有持久物件的對映資訊。sessionfactory由c...