ISP從演算法到硬體設計——從CCM到sensor結構

——————————————————————

版權宣告:

本文作者: 烓圍瑋未。 主要從事ISP/MIPI/SOC/車規晶片設計

首發於知乎專欄:晶片設計進階之路

同步微信公眾號:晶片設計進階之路(x_chip)

轉發無需授權,請保留這段宣告。

——————————————————————

ISP一個重要的功能就是控制sensor,修復攝像頭的一些缺陷,比如暗電流,鏡頭畸形等等。那麼瞭解一些攝像頭模組結構和一些常用的sensor介面是設計ISP硬體IP的前提了。

那麼我們從攝像頭模組(CCM)開始。。

1。 攝像頭模組(CCM)

1。1 攝像頭模組的組成部分

攝像頭模組CCM: CMOS camera module。

我們常說的sensor只是真正用的攝像頭的一部分,核心部分。真正的攝像頭其實由很多部分組成。但是現在很多時候大家說的sensor,其實並沒有嚴格分開sensor和CCM的區別。但是我們工程師還是要區分清楚。

下面是手機上常用的攝像頭的結構:

ISP從演算法到硬體設計——從CCM到sensor結構

去掉外面的玻璃保護片部分攝像頭模組如下:

ISP從演算法到硬體設計——從CCM到sensor結構

可以看到,相機模組是由很多部分組成的,主要分為以下幾個部分:

鏡頭(Lens)

音圈馬達(VCM)

紅外濾光片(IR Filter)

影象感測器(Sensor)

柔性印刷電路板(FPCB)

1。2 鏡頭

一般鏡頭(Lens)都是有幾片透鏡組成,分為塑膠透鏡(P)和玻璃透鏡(G)。

常用的鏡頭結構有:1P, 2P, 1G1P, 2G2P, 4G等,透鏡越多,成本越高。

玻璃透鏡成本高,成像好。

作用:將影象捕捉後,呈現在影象感光器上。(小孔成像)

ISP從演算法到硬體設計——從CCM到sensor結構

1。3 音圈馬達(VCM)

全稱Voice Coil Motor,電子學裡面的音圈電機,是馬達的一種。因為原理和揚聲器類似,所以叫音圈電機,具有高頻響、高精度的特點。

其主要原理是在一個永久磁場內,透過改變馬達內線圈的直流電流大小,來控制彈簧片的拉伸位置,從而帶動上下運動。

手機攝像頭廣泛的使用VCM實現自動對焦功能,透過VCM可以調節鏡頭的位置,呈現清晰的影象。如下圖所示:

ISP從演算法到硬體設計——從CCM到sensor結構

1。4 紅外濾光片(IR Filter)

IR Filter 主要作用是透過人眼可見光波段(380~700nm),濾除非可見光。防止Sensor產生偏色、波紋等,提高色彩還原度。

為了給大家一個直觀印象,濾光片如下所示,注意,這不是CCM用的紅外濾光片,只是類似的。

ISP從演算法到硬體設計——從CCM到sensor結構

1。5 影象感測器(Sensor)

影象感測器是攝像頭的核心部件。

Image sensor(影象感測器)是一種半導體晶片,其表面有幾十萬到幾百萬個光電二極體,光電二極體受到光照就會產生電荷,將光線轉換成電訊號。其功能類似於人的眼睛,因此sensor效能的好壞將直接影響到camera的效能。

這也是我們重點關注的部分。後面會詳細介紹sensor的結構。

ISP從演算法到硬體設計——從CCM到sensor結構

1。6 柔性印刷電路板(FPCB)

FPCB負責將攝像頭的其他元件與主處理器連線起來。除了前面說到的傳輸訊號控制鏡頭移動來調焦之外,還有一個主要功能就是將影象感測器的原始資料傳輸到主控制器。

一種FPCB如下圖所示:

ISP從演算法到硬體設計——從CCM到sensor結構

好了,走馬觀花似的介紹了一下CCM的組成部分,主要是為了科普一下。其實不是做模組的專業人員也不用瞭解太多。

CCM中對影象影響最大的是鏡頭和Sensor了。一個好的鏡頭對成像影響很大,“單反毀三代”很多就是毀在玩鏡頭上,看著幾萬上十萬的鏡頭,還是我們的sensor比較可愛。

那麼我們下面介紹CMOS sensor。

2。 CMOS SENSOR

可能大家在教科書上看到過CCD Sensor和CMOS sensor,但是其實現在基本是CMOS sensor一統江湖了。我們做ISP的瞭解CMOS sensor就好。

ISP從演算法到硬體設計——從CCM到sensor結構

2。1 sensor簡介

sensor是攝像頭的核心,負責將透過Lens的光訊號轉換為電訊號,再經過內部AD轉換為數字訊號。

sensor是怎麼把光轉換成電的呢?因為用到了光電二極體。如下圖所示:

ISP從演算法到硬體設計——從CCM到sensor結構

光照到光電二極體上面,光強就轉換成了二極體的電流。透過並行的電容儲存起來,就轉換成了對應的電壓。光照越強,照射時間越久,那麼電容的電壓就越大。某個時候我們把電容兩端的電壓透過AD轉換成數字訊號,就可以得到一個電訊號的數字化的值了。

這只是粗略的介紹了一下電到光的轉換。可能不是十分準確。但是基本轉換就是這樣。

這個光電二極體就是sensor感光的最基本的結構了。

2。2 sensor pattern

如果把上面的光電二極體排列成一個矩形,那麼就可以得到一個光電二極體的矩形陣列,這樣我們就可以得到一個區域的電訊號數字化值了。如下圖所示:

ISP從演算法到硬體設計——從CCM到sensor結構

景物透過小孔成像,投射到一個陣列的sensor上面,透過每個點的光電二極體的感光值,然後經過AD轉換就可以得到一個矩形的數字化值了。

把這些數字化的值按照某種規定,比如最大255表示白色,最小0表示黑色,0~255之間的值就表示某種強度的灰色值,那麼在螢幕或者紙面上顯示出來,就是一副黑白影象了。

這就是黑白影象的成像原理。

好了,我們能夠成像了,但是我們的世界是如此多彩,黑白圖怎麼能夠表現出如此美麗的我們呢?神說,要有色彩。工程師說,好,我來創造色彩。

怎麼表現色彩了,很簡單,牛頓已經告訴我們了,用稜鏡可以把白光分成多個顏色,而且光的三原色就是紅綠藍,我們只需要記錄這三種顏色就可以了。那麼彩色攝像機1。0的結構就出來了。

如下圖所示:

ISP從演算法到硬體設計——從CCM到sensor結構

光透過鏡頭進來,我們先透過稜鏡把它分成三種顏色,紅,綠,藍。每種顏色用一顆光電二極體陣列記錄下來,合起來就是一幅圖了。so easy。

好了,產品經理興高采烈的拿著老大批准的方案去找工程師了,然後就被工程師揍成了豬頭。

方案是挺好,工程實現的時候卻做不下去了。為什麼?

第一: 如果三個色彩要拼成一副影象,那麼稜鏡分解後的光到每個感光陣列的角度和距離要是一模一樣的。這個工程實現十分困難,在sensor發明的那個年代肯定是做不到的。

第二:為了得到一幅彩色影象,需要三個感光陣列,成本太高。要知道,黑白相機剛出來的時候,能玩的起的都是高富帥。

怎麼辦呢?有沒有更好的辦法呢?當然有,我們的主角Bayer出現了,提出了Bayer pattern。那就是在每個光電二極體前面加一個濾光單元,只允許紅綠藍其中一種顏色透過。如下圖所示:

ISP從演算法到硬體設計——從CCM到sensor結構

Bayer Pattern工作原理

光源經過

Bayer Filter

後,只有特定顏色的光可以穿過相應顏色的濾波器

RAW影象就是CMOS或者CCD影象感應器將捕捉到的光源訊號轉化為數字訊號的原始資料。

ISP從演算法到硬體設計——從CCM到sensor結構

Bayer pattern又叫RGGB pattern,如下所示:

ISP從演算法到硬體設計——從CCM到sensor結構

對於二極體的感光陣列(又叫image array),每4個點作為一個整體。其中一個點只能透過紅色光,一個點只能透過藍色光,兩個點能透過綠色光。這就是Bayer patten。

Image array可以看作Bayer pattern的不斷複製:

ISP從演算法到硬體設計——從CCM到sensor結構

這樣,我們只要知道第一個點是透過什麼光:紅,綠,還是藍,就能知道image array每個點的濾光情況了。

然後,根據Image array + sensor patten我們就可以得到每個點的紅,綠,藍的值了。怎麼得到了,這就是我們ISP需要做到,插值或者叫去馬賽克。

比如,第一個點是藍色,那麼我們可以透過它周圍的綠色點預測出第一個點的綠色的值大概是多少,同樣紅色值也是如此。怎麼預測呢?這就是影象演算法的魅力了。無中生有,厲害吧!

插值或者去馬賽克是ISP的一個主要模組,後面會詳細介紹它的演算法和硬體實現,現在大家知道需要插值才能得到每個點的紅綠藍資訊就夠了。

可能有的讀者很奇怪,為什麼Bayer patten綠色點是倆個給,而紅色藍色點是是一個呢?那是因為人眼對綠色的敏感程度恰好是紅色或者藍色的兩倍,這樣把兩個點分給綠色最符合人眼的習慣,也就能得到最符合人眼的視覺的影象了。

最近幾年,隨著手機,車載等各個方面的創新,各種其他的Pattern層出不窮,比如:RGGB/RCCB/RCCG/RGBIR Pattern

ISP從演算法到硬體設計——從CCM到sensor結構

每種pattern都有自己的優缺點,都是為了解決某個特殊需求而產生的。但是,最成熟和最應該掌握的還是RGGB Bayer patten。所以下面我們還是先圍繞Bayer patten來介紹,有機會再解釋自其他的各種非Bayer patten。

2。3 sensor結構

各家的sensor結構都類似,只是在細微處有差別,個別功能不一樣。下面是一個OV的sensor結構圖:

ISP從演算法到硬體設計——從CCM到sensor結構

sensor 主要由以下幾個部分組成:

1。 Image sensor core

2。 Image sensor processor;

3。 image output interface

4。 Control bus

2。3。1 Image sensor core

Image sensor core主要由Image array, AMP & gain control, ADC組成;

ISP從演算法到硬體設計——從CCM到sensor結構

畫素陣列(image array)就是我們前面提到的,由光電二極體組成的陣列,當然實際的電路每個畫素遠遠不止一個二極體那麼簡單。

一個典型的sensor的版圖如下:

ISP從演算法到硬體設計——從CCM到sensor結構

可以看到畫素陣列佔了整個晶片大部分的面積。畫素陣列對應的就是一個個的畫素點,也就是我們成像看到的每個畫素。

這裡說一下,Image array是類比電路,很難做到很先進的工藝,比如40nm這種水平,而且並不是工藝越先進越好。但是sensor的數字部分比如內部的影象處理和介面邏輯卻是純數字邏輯,這部分卻可以做到很先進的工藝比如16nm。所以現在一個方向是sensor裡面由於數字部分的工藝越來越先進,反而能塞下更多的數字處理的部分。有些廠商就在這些方面發力,在sensor內部做一些前處理,讓sensor輸出的影象質量更好。

簡化一下這個floorplan如下:

ISP從演算法到硬體設計——從CCM到sensor結構

可以看到,畫素陣列可以分為Optical Black區域,Active Pixel區域和Dummy border區域。

一般一個sensor的Image array的點的個數會大於實際成像的影象。比如一個1920x1080的sensor,可能實際的Image array的點數是1948x1108;為什麼會這麼做呢?一是Image array角落的進光量很少,一般會去掉一部分角落的畫素點;二是會增加一些功能性的區域,比如Optiacl Black區域用來作為暗電流的對照,留下dummy border 作為後續數字處理的時間餘量和傳遞一些額外資訊,比如embedded data告訴外部sensor的曝光值等等;

每個畫素的模型如上圖的右邊所示,主要是光電二極體和電容。一些特性sensor,比如多次曝光可能會由兩個電容,但是基本結構就是這樣。

Image array另外一個比較重要的就是讀出電路了。如下圖所示:

ISP從演算法到硬體設計——從CCM到sensor結構

其實就是每次選擇一行畫素輸出給後續的數字邏輯,所以影象都是按行逐行輸出。來源就是這裡的讀出模式。

雖然這裡的ADC只畫了一個,但是真正的CMOS SENOR的ADC是有一行那麼多。這和CCD結構有很大區別:

ISP從演算法到硬體設計——從CCM到sensor結構

上面是CCD sensor,由於結構原因,CCD只能有一個ADC;而CMOS sensor有一行的ADC。這樣在資料輸出上,CMOS可以做到很高的幀率,而CCD卻很難做到高畫素和高幀率。這也是CMOS代替CCD的一個原因之一吧。

很老的sensor ADC的8bit的,代表我們sensor輸出的畫素每個點是8bit,解析力就是0~255;

現在的sensor一般是10bit,好一點的是12bit,解析力大大提升,影象質量也就線性增加了。有的同學可能很奇怪,為什麼不用更高bit的ADC, 比如16bit ADC, 20bit ADC, 這樣影象質量不就更好麼?Sensor廠商只能說: 臣妾做不到啊!筆者曾經聽說,一個公司買一個高精度的ADC IP就花了3億,而且別人還不願意賣。如果讓sensor廠商去用高精度ADC,可能我們都買不起sensor了。

現在的sensor提高輸出影象位數都是透過多次曝光合成HDR的方式來解決這個問題的,這個後面的文章再講。

還有一個重要的部件是模擬放大器(AMP)和放大器控制。這個功能十分簡單粗暴。我們知道每個畫素點的值越大,代表這個點越亮。AMP就是直接在每一個點的值上面乘以一個倍數值,比如1。5倍,2。0倍,0。8倍等。這樣就可以在暗的時候調亮,在太亮的時候調暗一點。

這個倍數就是Analog gain,對應的另外的一個概念是Digitail Gain。Analog gain可以透過外部來控制sensor的暫存器來控制。

可以看到Image sensor core部分主要是類比電路,透過ADC轉換成數位電路。所以這部分也叫做sensor的模擬部分。

2。3。2 Image sensor processor;

Image sensor processor其實就相當於sensor內部的“mini ISP”, 主要完成一些必要的功能。在500萬畫素以下,sensor甚至內部完成了整個isp的功能,直接輸出YUV影象,外部不再需要ISP處理,但是影象質量一般。隨著畫素越來越多,sensor功耗限制,現在大尺寸的sensor都是輸出RAW格式,內部只做一些必要的處理。比如DPC, LENC等。

ISP從演算法到硬體設計——從CCM到sensor結構

這裡想說的是,你看到的只是sensor廠商想讓你看到的,可能內部還做了其他模組,對你不可見而已。比如內部偷偷做了一個去噪,這樣輸出噪聲水平就低很多(哈哈,我太壞了)。

2。3。3 image output interface

手機,車載sensor常見的介面主要是DVP和MIPI。 DVP是比較老的並行介面;MIPI是高速序列介面。另外安森美自己搞了一個HiSPi介面,但是隻有他家自己在用,和MIPI差不多。介面對比如下:

ISP從演算法到硬體設計——從CCM到sensor結構

DVP介面:

Digital Video Port: DVP是比較老sensor支援的介面,但是現在的sensor一般都相容。

DVP採用並行輸出方式,d資料位寬有8bit、10bit、12bit、16bit,是CMOS電平訊號(重點是非差分訊號),PCLK最大速率為96MHz,介面和時序如下圖:

ISP從演算法到硬體設計——從CCM到sensor結構

ISP從演算法到硬體設計——從CCM到sensor結構

HSYNC

:horizonal synchronization,行同步訊號

VSYNC

:vertical synchronization,幀同步訊號;

D

:畫素資料,影片資料,具體位寬不同sensor不一樣,一般和ADC位寬一樣;

VSYNC代表一幀開始,HSYNC代表一行資料有效,D就是輸出的pixel資料的值;這裡有兩點需要特別注意:

1。 VSYNC在不同的sensor是不一樣的,比如OV的sensor和上圖一樣,VSYNC是一個長脈衝;但是ON/SONY的DVP介面一般是一個電平,從幀開始到幀結束一直為高;

2。 HSYNC在一行之內一直為高,也就是說HSYNC每個cycle就指示了一個有效畫素,畫素輸出必須連續有效。這和Image Array讀出行為是一致的,按行連續讀。

ISP內部模組之間的介面其實和DVP介面很像,但是一般會增加一個data valid訊號,讓一行之內資料可以不連續,方便設計。後面介紹ISP設計的時候會再詳細解釋一下。

MIPI 介面;

MIPI(移動行業處理器介面)是Mobile Industry Processor Interface的縮寫。

MIPI聯盟是一個開放的會員制組織。2003年7月,由美國德州儀器(TI)、意法半導體(ST)、英國ARM和芬蘭諾基亞(Nokia)4家公司共同成立。MIPI聯盟旨在推進手機應用處理器介面的標準化 。該組織結集了業界老牌的軟硬體廠商包括最大的手機晶片廠商TI、影音多媒體晶片領導廠商意法、全球手機巨頭諾基亞以及處理器核心領導廠商ARM、還有手機作業系統鼻祖Symbian。隨著飛思卡爾、英特爾、三星和愛立信等重量級廠商的加入,MIPI也逐漸被國際標準化組織所認可

由於對更高的影象解析度、更大的顏色深度和更快的幀速率的需求,今天的主機處理器到攝像機感測器介面的頻寬已經達到了極限。但是對於具有跨越多個產品代的效能目標的設計人員來說,更多的頻寬是遠遠不夠的。移動行業需要一個標準的、健壯的、可擴充套件的、低功耗的、高速的、低成本的攝像機介面來支援移動裝置的廣泛的成像解決方案

MIPI聯盟相機工作小組創造了一個清晰的設計路徑,不僅是今天的頻寬足夠靈活來解決挑戰但“特性和功能”挑戰的行業,每年生產超過十億手機使用者廣泛,應用程式和成本點。

MIPI CSI-2和MIPI CSI-3是原MIPI相機介面標準的繼承者。這兩種標準都在不斷演變。兩者都是高能力的架構,可以為設計師和製造商提供服務最終消費者——更多的選擇和更大的價值,同時保持標準介面的優勢。

ISP從演算法到硬體設計——從CCM到sensor結構

MIPI CSI2協議和MIPI DPHY的相關知識內容太多,後面會寫專門的文章來詳細解釋。

作為半個MIPI 專家(自封的),這裡可以偷偷的告訴你一個工程經驗,以後面試別人的時候問一問就可以知道別人到底有沒有真的做過MIPI(可能做過也不知道),那就是:

MIPI DPHY 的傳輸距離一般不超過20cm

因為最開始是用在手機上的,20cm足夠了(可能iphone20不夠,哈哈);隨著MIPI 應用越來越廣泛,比如用在電腦上,用在汽車上,那麼這個限制就很致命了。怎麼解決呢?以後再告訴你。

3。 後記

好了,可能你對sensor及介面有了一個初步的瞭解。我也不是做sensor的,學習一點sensor知識是為了更好的理解和設計ISP。這是ISP必須要的準備知識。感興趣的同學可以瞭解的更深入一些。

技術很重要,技術背後的思想更重要!

很多知識點,可能你瞭解了就知道了,但是瞭解一下技術發展的背景,瞭解這些技術是為了解決什麼問題而產生的,這些也是很重要的。可能其中的某些思想就是你解決以後問題的鑰匙。

贈人玫瑰,手有餘香。原創不易,如果你有所收穫,可以關注我的知乎專欄和微信公眾號,不定期更新文章。謝謝!

知乎專欄:晶片設計進階之路

微信公眾號:晶片設計進階之路 x_chip

————————————————————————————————————————————————————

參考資料:

https://

blog。csdn。net/shiyimin1

/article/details/81607693

https://

blog。csdn。net/hua371242

480/article/details/88629023

———————————————————————————————————————————————