寫在前面的話,本文是由於工做中須要編寫攝像頭程序,由於以前沒有作過這類產品,因此網上搜索的資料,先整理以下,主要參考文章以下,若是有侵權,請聯繫我;另外,轉載請註明出處。本文不必定所有正確,若是發現錯誤請指正。若是有新的理解,會繼續整理。架構
http://blog.csdn.net/xubin341719/article/details/7723725框架
http://blog.csdn.net/pengwentao/article/details/7180115ide
http://blog.csdn.net/southcamel/article/details/8305873網站
http://blog.csdn.net/xubin341719/article/details/7727041編碼
GalaxyCore GC0308 DataSheetspa
導讀:操作系統
1、攝像頭模組CCM.net
2、攝像頭工做原理code
1、攝像頭模組(CCM)
一、camera特寫
攝像頭模組,Camera Compact Module,簡寫爲CCM,是影響捕捉的重要元器件,個人理解就是硬件上的攝像頭。以下圖:
二、攝像頭內部分解
攝像頭硬件結構圖:
(1)、工做原理
光線經過鏡頭Lens進入攝像頭內部,而後通過IR Filter過濾紅外光,最後到達sensor(傳感器),senor分爲按照材質能夠分爲CMOS和CCD兩種,能夠將光學信號轉換爲電信號,再經過內部的ADC電路轉換爲數字信號,而後傳輸給DSP(若是有的話,若是沒有則以DVP的方式傳送數據到基帶芯片baseband,此時的數據格式Raw Data,後面有講進行加工)加工處理,轉換成RGB、YUV等格式輸出。
(2)、鏡頭 Lens
鏡頭是相機的靈魂,單反中一個鏡頭上萬是很隨意的事。鏡頭對成像有很重要的做用,至關於人眼中的晶狀體,利用透鏡的折射原理,景物光線透過鏡頭在聚焦平面上造成清晰的像,而後經過感光材料CMOS或CCD記錄影像,並經過電路轉換爲電信號。鏡頭產業有比較高的技術門檻,國外主要集中在日本、韓國,國內主要是在臺灣,業內比較知名的如:富士精機、柯尼卡美能達、大力光、Enplas等。
Lens通常由幾片透鏡組成透鏡結構,按材質可分爲塑膠透鏡(plastic)或玻璃透鏡(glass),玻璃鏡片比樹脂鏡片貴。塑膠透鏡實際上是樹脂鏡片,透光率和感光性等光學指標比不上鍍膜鏡片。
一般攝像頭採用的鏡頭結構有:1P、2P、1G1P、1G2P、2G2P、2G3P、4G、5G等。透鏡越多,成本越高,相對成像效果會更出色(我的理解是光線更均勻、更細緻;對光線的選通更豐富;成像畸變動小,可是會致使鏡頭變長,光通量變小)。
(3)、紅外濾光片 IR Filter
主要是過濾掉進入鏡頭的光線中的紅外光,這是由於人眼看不到紅外光,可是sensor卻能感覺到紅外光,因此須要將光線中的紅外光濾掉,以便圖像更接近人眼看到的效果。
(4)、傳感器 Sensor
sensor是攝像頭的核心,負責將經過Lens的光信號轉換爲電信號,再通過內部AD轉換爲數字信號。每一個pixel像素點只能感覺R、G、B中的一種,所以每一個像素點中存放的數據是單色光,因此咱們一般所說的30萬像素或者130萬像素,表示的就是有30萬或130萬個感光點,每一個感光點只能感應一種光,這些最原始的感光數據咱們稱爲RAW Data。Raw Data數據要通過ISP(應該理解爲Image Sensor Processor,是Sensor模塊的組成部分,下面有解釋)的處理才能還原出三原色,也就是說若是一個像素點感應爲R值,那麼ISP會根據該感光點周圍的G、B的值,經過插值和特效處理等,計算出該R點的G、B值,這樣該點的RGB就被還原了,除此以外,ISP還有不少操做,下面有介紹。
目前經常使用的sensor有兩種,一種是CCD(電荷耦合)原件;一種是CMOS(金屬氧化物導體)原件。
>>CCD(Charge Coupled Device),電荷耦合器件傳感器:使用一種高感光度的半導體材料製成,能把光線轉變成電荷,經過模數轉換器芯片轉換成電信號。CCD由許多獨立的感光單位組成,一般以百萬像素爲單位。當CCD表面受到光照時,每一個感光單位都會將電荷反映在組件上,全部的感光單位產生的信號加在一塊兒,就構成了一幅完整的圖像。CCD傳感器以日本廠商爲主導,全球市場上有90%被日本廠商壟斷,索尼、松下、夏普是龍頭。
>>CMOS(Complementary Metal-Oxide Semiconductor),互補性氧化金屬半導體:主要是利用硅和鍺作成的半導體,使其在CMOS上共存着帶N(-)和P(+)級的半導體,這兩個互補效應所產生的電流能夠被處理芯片記錄並解讀成影像。CMOS傳感器主要以美國、韓國和中國臺灣爲主導,主要生產廠家是美國的OmnVison、Agilent、Micron,中國臺灣的銳像、原相、泰視等,韓國的三星、現代。
(5)、圖像處理芯片 DSP
DSP是CCM的重要組成部分,它的做用是將感光芯片得到的數據及時地快速地傳遞到中央處理器並刷新感光芯片,所以DSP芯片的好壞,直接影響畫面品質,如:色彩飽和度、清晰度、流暢度等。若是sensor沒有集成DSP,則經過DVP的方式傳輸到baseband芯片中(能夠理解爲外掛DSP),進入DSP的數據是RAW Data,採集到的原始數據。若是集成了DSP,則RAW Data會通過AWB、color matrix、lens shading、gamma、sharpness、AE和de-noise處理,最終輸出YUV或者RGB格式的數據。以下圖中所示,ISP(Image Sensor Processor,不是Image Signal Processor)部分中使用的就是DSP來處理Image sensor的輸出數據(Raw Data):
DSP結構框架:
>>ISP(Image Signal Processor),鏡像信號處理器或者圖像信號處理器
>>JPEG encoder,JPEG圖像編碼器,有軟件硬件之分。
(6)、DVP
DVP分爲三個部分:輸出總線;輸入總線;電源總線;以下圖:
>>輸入總線介紹
a>PWDN是camera的使能管腳,有兩種配置方式,一種爲standby,一種是normal work,設置爲standby的時候,一切對camera的操做都是無效的,包括復位。因此在RESET以前,必定要將PWDN管腳設置爲normal模式,不然RESET無效。
b>RESET是camera的復位管腳,此方式爲硬復位模式,camera的各個IO口恢復到出廠默認狀態。只有在XCLK開啓後,將RESET置爲低,硬復位纔有效,不然復位無效。
c>XCLK是camera的工做時鐘管腳,此管腳爲BB提供camera的工做時鐘。
d>IIC是camera和BB通訊的總線通道。
>>輸出總線介紹
a>data爲camera的數據管腳。此數據腳能夠輸出的格式有YUV、RGB、JPEG等。
b>VSYNC爲camera的幀同步信號管腳。一個VYSNC信號結束表示一幀(即一個畫面)的數據已經輸出完畢。
c>HSYNC爲camera行同步信號管腳。一個HSYNC信號結束表示一行的數據已經輸出完畢。
d>PCLK爲像素同步信號管腳。一個PCLK信號結束表示一個像素點的數據已經輸出完畢。
>>Power線介紹
a>AVDD爲camera的模擬電壓。
b>DOVDD爲camera的GPIO口數字電壓。
c>DVDD爲camera的核工做電壓。
通常來講,要求先提供sensor的GPIO口電壓,接着提供模擬電壓,最後提供工做電壓。時序以下圖:
(7)、FPC柔性電路板(柔性PCB)
簡稱"軟板", 又稱"柔性線路板",鏈接芯片和手機。起到電信號傳輸做用。
(8)、ISP、DSP、基帶芯片的區別和聯繫
幾篇文章中出現的術語,這裏作個專門的補充。
>>常見基帶處理器或者基帶芯片負責數據處理與儲存,至關於一個協處理器,主要組件爲DSP、微控制器、內存(如SRAM、Flash)等單元,主要功能爲基帶編碼/譯碼、聲音編碼及語音編碼 等。目前主流基帶架構:DSP+ARM。可分爲五個子塊:CPU處理器、信道編碼器、DSP、調制解調器和接口模塊。
基帶芯片是用來合成即將的發射的基帶信號,或對接收到的基帶信號進行解碼。具體地說,就是:發射時,把音頻信號編譯成用來發射的基帶碼;接收時,把收到的基帶碼解譯爲音頻信號。同時,也負責地址信息(手機號、網站地址)、文字信息(短訊文字、網站文字)、圖片信息的編譯。
>>ISP,Image Signal Processor,圖像信號處理器;DSP,Data Signal Processor,數字信號處理器。
ISP通常用來處理Image Sensor(圖像傳感器)的輸出數據,如進行:AEC(自動曝光控制)、AGC(自動增益控制)、AWB(自動白平衡)、色彩校訂、Gamma校訂、祛除壞點、Auto Black Level、Auto White Level 等等功能的處理。
>>而DSP功能就比較多了,它能夠作些拍照以及回顯(JPEG的編解碼)、錄像以及回放(Video 的編解碼)、H.264的編解碼、還有不少其餘方面的處理,總之是處理數字信號了。能夠認爲ISP是一類特殊的處理圖像信號的DSP。
在這篇文章中,能夠將基帶芯片當作開發板上的控制芯片,ISP和DSP能夠對等,都是對Raw Data進行處理。這裏尊重原文做者的說法,並無統一。
還有要注意的是,在攝像頭這部分,要看清楚ISP表示的是什麼,是Image Signal Processor(圖像信號處理器),仍是Image Sensor Processor(圖像傳感器處理器)。像上面的OV2665裏面的ISP就是Image Sensor Processor,至關於Sensor模塊中的一部分,由DSP作處理器。而下面的GC0308,則正好相反,是Image Signal Processor,是一個真正的處理器,因此在看到ISP的時候要根據語境看指的是一個具體的處理器仍是模塊的組成部分而非實指。
三、CCM組裝方式
(1)、定焦CCM組裝
CCM分爲定焦模組和自動變焦模組,其中定焦模組主要由鏡頭、鏡座、感光集成電路、軟性線路板、補強和鋼片裝配而成,其裝配圖以下:
(2)、自動變焦模組組裝
主要是鏡頭下面裝了一個VCM音圈馬達
(3)、3D模組
多臺攝像頭拍攝圖像,而後組合:
四、攝像頭的一些技術指標
(1)、圖像解析度/分辨率(resolution)
QSIF/QQVGA | 160 x 120 | 19200 | |
QCIF | 176 x 144 | 25344 | |
SIF/QVGA | 320 x 240 | 76800 | |
CIF | 352 x 288 | 101376 | 10萬像素 |
VGA | 640 x 480 | 307200 | 30萬像素(35萬是指648X488) |
SVGA | 800 x 600 | 480000 | 50萬像素 |
XGA | 1024 x 768 | 786438 | 80萬像素 |
SXGA | 1280 x 1024 | 1310720 | 130萬像素 |
UXGA | 1600 x 1200 | 1920000 | 200萬像素 |
QXGA | 2048 x 1536 | 3145728 | 300萬像素(320W) |
QSXGA | 2592 x 1944 | 5038848 | 500萬像素 |
2816 x 2112 | 2947392 | 600萬像素 | |
3072 x 2304 | 7077888 | 700萬像素 | |
3200 x 2400 | 7680000 | 770萬像素 | |
3264 x 2448 | 7990272 | 800萬像素 | |
3876 x 2584 | 10015584 | 1000萬像素 |
(2)、sensor輸出的圖像格式
>>YUV:luma(Y)+chroma(UV)格式(亮度、色度),通常狀況下sensor支持YUV422格式,即Y-U-Y-V次序輸出數據。
>>RGB:傳統的紅綠藍格式,好比RGB565,5bit R + 6bit G + 5bit B,G多一位是由於人眼對綠色比較敏感。
>>RAW RGB:sensor的每一像素對應一個彩色濾光片,濾光片按Bayer Pattern(拜耳模板)分佈,將每個像素的數據直接輸出,即Raw RGB Data。
>>JPEG:有些sensor,特別是低分辨率的,其自帶JPEG engine,能夠直接輸出壓縮後的jpg格式的數據。
注意:
a>YUV一個像素佔2B,若是像素太大,在高時鐘下基帶芯片處理不過來,JPEG數據量就要小不少,由於基帶芯片對輸出數據的速率有要求,因此基帶芯片低時鐘下使用YUV sensor,高時鐘下使用JPEG sensor。
b>若是直接輸出RGB,對於LCD顯示是最方便的,可是大多數基帶芯片都是要求輸出爲YUV格式的數據再進行,這是由於,YUV輸出數據的亮度信號沒有任何損失,而色偏信號人眼並非特別敏感,RGB565輸出格式是R5G3 G3B5,會丟失不少原始信息,因此YUV圖像質量和穩定性要比RGB565好的多。所以,很低端的基帶芯片上纔會輸出RGB565格式。
Raw和JPEG的區別:
Raw優勢:
1>Raw格式文件本質上是一個沒有通過任何圖像處理的源文件,它能原本來本地記錄相機拍攝的信息,沒有通過圖像處理(銳化、色彩對比加強)和壓縮而形成的信息丟失。相比之下,JPEG格式的數據通過壓縮處理,沒法完整的保存原圖形的全部數據。
2>Raw是一種專業攝影師經常使用的格式,由於它能原本來本地保存信息,讓用戶能大幅度進行後期製做,而且不管怎麼操做,照片都能無損的恢復到最初狀態;可是JPEG就弱了些,雖然由於PS等技術的發展,也能夠在JPEG上進行後期製做,可是若是作大幅度的調整仍是Raw文件比較合適。
3>能夠用專門的軟件修正攝像機的不足,好比佳能DPP軟件能夠修正鏡頭失光、變形等。
Raw缺點:
1>存儲數據量太大,JPEG就小不少
2>須要專門的軟件來打開,JPEG幾乎全部的PC均可以直接打開
3>打開速度較慢,JPEG較快
4>不一樣的軟件有不一樣的方式去演繹RAW文件,因此在不一樣的軟件上會有細微的差異。
5>廠商賣的專用軟件價格較高,而這方面JPEG幾乎無成本
(3)、自動白平衡調整(AWB)
定義:要求在不一樣色溫環境下,照白色的物體,屏幕中的圖像應也是白色的。色溫表示光譜成份,光的顏色。色溫低表示長波光成分多。當色溫改變時,光源中三基色(紅、綠、藍)的比例會發生變化,須要調節三基色的比例來達到彩色的平衡,這就是白平衡調節的實際。
(4)、圖像壓縮方式
JPEG:(joint photo graphicexpert group)靜態圖像壓縮方式。一種有損圖像的壓縮方式。壓縮比越大,圖像質量也就越差。當圖像精度要求不高存儲空間有限時,能夠選擇這種格式。目前大部分數碼相機都使用JPEG格式。
(5)、彩色深度(色彩位數)
反映對色彩的識別能力和成像的色彩表現能力,實際就是A/D轉換器的量化精度,是指將信號分紅多少個等級。經常使用色彩位數(bit)表示。彩色深度越高,得到的影像色彩就越豔麗動人。如今市場上的攝像頭均已達到24位,有的甚至是32位(原文)
(6)、圖像噪音
指的是圖像中的雜點干撓。表現爲圖像中有固定的彩色雜點。
(7)、視角
與人的眼睛成像是相同原理,簡單說就是成像範圍。
(8)、輸出/輸入接口
串行接口(RS232/422):傳輸速率慢,爲115kbit/s
並行接口(PP):速率能夠達到1Mbit/s
紅外接口(IrDA):速率也是115kbit/s,通常筆記本電腦有此接口
通用串行總線USB:即插即用的接口標準,支持熱插拔。USB1.1速率可達12Mbit/s,USB2.0可達480Mbit/s
IEEE1394(火線)接口(亦稱ilink):其傳輸速率可達100M~400Mbit/s
(9)、CAMIF, Camera Interface
下面這張圖,沒看懂,暫時放在這裏:
(10)、FIME,Fully Interactive Moblio Camera
攝像頭採集的數據CPU沒法直接處理,因此,主動芯片裏面集成了Camera控制器,即FIMC。攝像頭須要先將圖像數九傳送給控制器,通過控制器處理(裁剪拉昇後直接預覽或者編碼)以後交給CPU處理。MCLK就是由FIMC提供的。
CAMMCLK給攝像頭提供時鐘,CAMRST是復位線,PWD在攝像頭工做時應該始終爲敵。HREF是行參考信號,PCLK是像素始終,VSYNC是場同步信號,一旦給攝像頭提供了時鐘,而且復位了攝像頭,攝像頭就開始工做了。
FIMC信號定義以下所示(YCbCr模式)
Signal
I/O
Description
Type
HREF
I
行同步信號
PCLK
I
像素時鐘
DATA[7:0]
I
像素數據
FIELD
O
FIELD信號
MCLK O
系統時鐘信號
(11)、camera時鐘域
每一個攝像頭都有三個時鐘域,第一個是系統總線時鐘域;第二個是攝像頭像素時鐘域PCLK;第三個是內部始終MCLK。
系統總線時鐘必須高於PCLK,CAM_MCLK必須固定頻率發呢拼比,如:PLL時鐘。
2、攝像頭工做原理
一、手冊中內容掃盲:
首先,咱們要明白,一旦給攝像頭提供了時鐘,而且復位了攝像頭,攝像頭就能夠工做了,經過PCLK、HSYNC、VSYNC聽不傳輸數字圖像信號。
攝像頭的驅動須要完成三大步:
>>攝像頭的上電、時鐘這些基本條件
>>IIC保證攝像頭的初始化
>>攝像頭工做後傳回數據到主控
原圖有誤,已經修改,紅色圈圈部分。
控制部分是攝像頭上電、IIC控制接口;數據輸出是攝像頭拍攝的圖像數據傳到主控芯片,因此,須要有Data、行場同步時鐘(告訴主控芯片哪些數據是一行,哪些是一幀)、以及時鐘(PCLK,像素時鐘,告訴主控芯片哪些數據是一個像素點)。
(1)、MCLK
攝像頭要 工做,必需要有個時鐘進行同步,這個時鐘就是MCLK,必需要有,不然攝像頭就是一個死物,這個時鐘由主控芯片提供,確切的說是有主控芯片的控制器提供,下面會提到。
(2)、RESET
復位信號,上面有提
(3)、SDA、SCL
IIC總線,主要做用就是爲主控芯片配置或者讀取攝像頭的寄存器提供通道。mini2440音頻模塊中的L3協議,也是這個做用。不要看見協議就怕,協議就是一條路,數據傳輸的路,有規定的數據傳輸的道路。
(4)、Configuration Register
配置寄存器,控制器(在主控芯片中)經過IIC來設置,至關於告訴攝像頭如何工做等。
(5)、Timing Control
時序控制,主要是根據主控芯片提供的MCLK時鐘來控制行場同步、自動曝光AEC等。由於這些都須要時鐘的配合。
(6)、Pixel Array
gc0308物理上的陣列是648H*492V,實際採樣陣列是648H*488V,也是有效陣列。實際取像的陣列是640H*480V。以下圖所示:
(7)、CDS
Correlated Double Sampling,相關雙聯取樣電路。CCD傳感器的每一個像素點輸出波形只在一部分時間內是圖像信號,其他時間是復位電平和干擾,爲了提取圖像信號並消除干擾,就要採用取樣保持電路。
(8)、Analog Processing、10bit ADC
主要是將sensor獲得的電信號轉換爲數字信號,方便ISP或者DSP處理。
(9)、Image Signal Processing
圖像信號處理器,能夠理解爲DSP的一種,主要是對sensor通過ADC處理後的Raw Data進行處理,主要有自動白平衡AWB、插值計算(Bayer interpolation主要是對Raw Data進行格式轉換,轉爲YUV /RGB等)、去噪、gamaa修正、色彩修正、邊緣加強等。這些都是由寄存器決定,寄存器又是經過IIC總線來設置的。
(10)、Output Mode & Sync Control
輸出接口,從光線進入鏡頭、過濾、光感應、ADC,而後到圖像數據處理,最終數據到達外部接口。攝像頭取一幅圖像的整個工做完成,攝像頭本質上仍是一個終端節點,因此須要將採集好的圖像數據傳遞給主控芯片,因此要有數據引腳,圖形格式補在是Raw Data,而是YUV或者RGB數據。進行數據傳輸,確定須要時鐘進行同步,因此須要PCLK,告訴主控芯片,哪一個數據表明了一個像素點;VSYNC負責告訴芯片哪些是一幀數據,HSYNC則同步行數據。
(11)、設備地址
百科上的定義,在數據通訊中,能夠發送或接受數據的任何設備標識。
操做系統課程上面有講到,系統爲了管理外部設備而進行的編碼。不知道這個地址是否是這個意思。
反正寫入的時候指定0x42,讀取的時候指定0x43,
(12)、IIC通訊
IIC通訊是一個交互的過程,須要等待對方的確認信號,並非一次性完成的。首先,主機須要作兩個事情:
一個是,提供啓動、結束信號;一個是提供IIC時鐘信號。圖示很明白了,不在囉嗦。
(13)、時序 Timing
幀時間(Ft,Frame time)=幀時鐘不活動時間(Bt,Blank time)+啓動時間(St,Start time)+有效行時間(Vt,Valid line time)+結束時間(Et,End time)+8
空白無效行時間(Vblank/Dummy line)=Bt+St+Et。
首先要明白,物理上492行,可是實際感應光線的只有488行,4行是Dark Row,黑暗行;可是這488有數據的行中只有480行是有效行。而後推導公式,首先分析小公式——空白行時間,空白時間包括無效的幀同步時間,這裏就是VSYNC處於高電平的無效時間;開始數據採集以前須要有幾個時鐘週期的緩衝,而後纔開始採集行數據,因此這個時間,也就是啓動時間也要算在空白行時間裏面,同理,480行有效數據採集完成後,也須要幾個時鐘週期表示數據採集結束,結束時間也要包括在空白行時間裏面。
一幀圖像所須要的時間,首先包括空白行時間Bt,還有有效行時間Vt,而後加上8。這個8應該是表明那8行無效數據(不肯定),歡迎留言!
exp_time應該是曝光時間,當曝光時間小於488行數據採集時間+空白行時間,這幀時間由全部行採集的時間+空白行時間控制,那麼VSYNC無效電平的時間=行空白時間-啓動時間-結束時間。
若是曝光時間超過win_height+VB,也就是在曝光沒有在正常的一幀時間內完成,那麼確定須要繼續曝光,幀時間由曝光時間肯定。幀同步無效時間=曝光時間-win_height-啓動時間-結束時間。
(修訂一,未完待續,分享自個人爲知筆記)