點擊左上方藍色“一口Linux”,選擇“設為星標”

Camera歷史文章:
《Camera | 1.Camera基礎知識》
上一篇我們講解了camera的一些基礎概念和知識。我們說了,現在的手機由于高分辨率的要求,現在基本上都是基于MIPI、CSI協議來實現的, 本篇講解MIPI、CSI的一些基礎知識。

下面這些術語是camera驅動中經常用到的縮略語。
AE(Auto Exposure):自動曝光。
AF(Auto Focus)???:自動對焦。
AWB(Auto White Balance):自動白平衡。
3A ?:指自動曝光(AE)、自動對焦(AF)和自動白平衡(AWB)算法。
Async Sub Device:在Media Controller結構下注冊的V4L2異步子設備,
例:Sensor、MIPI DPHY。
Bayer Raw(或Raw Bayer)??:Bayer是相機內部的原始圖片,一般后綴為.raw。
.raw格式內部的存儲方式有:RGGB、BGGR、GRBG等。
CIF ????:Rockchip芯片中的VIP模塊,接收Sensor數據并保存到內存中,
僅轉存數據,無ISP功能。
DVP(Digital Video Port)??:一種并行數據傳輸接口。
Entity ?:Media Controller架構下的各節點。
Frame ??:幀。
HSYNC ??:行同步信號,HSYNC有效時,接收到的信號屬于同一行。
IOMMU(Input Output Memory Management Unit):Rockchip芯片中的
IOMMU模塊,用于將物理上分散的內存頁映射成CIF、ISP可見的連續內存。
IQ(Image Quality)?:指為Bayer Raw Camera調試的IQ xml,用于3A tunning。
ISP(Image Signal Processing)?:圖像信號處理。
Media Controller :Linux內核中的一種媒體框架,用于拓撲結構的管理。
MIPI-DPHY ????:Rockchip芯片中符合MIPI-DPHY協議的控制器。
MP(Main Path):Rockchip芯片ISP驅動的一個輸出節點,一般用來拍照和抓取Raw圖。
PCLK(Pixel Clock)?:指Sensor輸出的Pixel Clock。
Pipeline ?????????:Media Controller架構的各Entity之間相互連接形成的鏈路。
SP(Self Patch)????:Rockchip芯片ISP驅動的一個輸出節點。
V4L2(Video4Linux2)???:指Linux內核的視頻處理模塊。
VICAP(Video Capture)?:視頻捕獲。
VIP(Video?Input?Processor):在Rockchip芯片中,曾作為CIF的別名
VSYNC ?:場同步信號,VSYNC有效時,接收到的信號屬于同一幀。MIPI:移動產業處理器接口(Mobile Industry Processorinterface)
是MIPI聯盟發起的為移動應用處理器制定的開放標準。
MIPI官網
https://www.mipi.org
MIPI聯盟即移動產業處理器接口(MIPI)聯盟,由美國德州儀器(TI)、 意法半導體(ST)、 英國ARM和芬蘭諾基亞(Nokia)4家公司共同成立, 旨在定義并推廣用于移動應用處理器接口的開放標準。
MIPI-CSI-2協議是MIPI聯盟協議的子協議,專門針對攝像頭芯片的接口而設計。
由于其高速,低功耗的特點,MIPI-CSI2協議極大的支持了高清攝像頭領域的發展.
正是由于它的普及,手機上五百萬像素的攝像頭才得以變為前置攝像頭,該類接口技術主要掌握在日本東芝,韓國三星以及美國豪威三家公司。

D-PHY與C-PHY區別:從實用角度來看,主要是數據線和時鐘線的區別,還有傳輸速率,C-PHY通過某些技術改良,使數據傳輸速度更快。
瑞芯微3568用的CSI-2 && D-PHY
所以內核中,我們會看到CSI2 和 D-PHY相關代碼。
MIPI并不是一個單一的接口或協議,而是包含了一套協議和標準,以滿足各種子系統獨特的要求。MIPI的標準異常復雜,包含非常多的應用領域。
由上圖可得:
用于顯示模塊命令模式下的標準化命令集;
DBI:與具有顯示控制器和幀緩沖器的顯示模塊的并行接口。DPI:與顯示模塊的并行接口,不帶顯示控制器或幀緩沖器。
DSI:主機處理器與顯示模塊之間的高速串行接口;CSI:主機處理器與攝像頭模塊之間的高速串行接口;
為DSI(顯示屏)和CSI-2(攝像頭)提供物理層通路定義。
為DigRF、CSI-3、UFS、LLI、SSIC、M-PCIE提供物理層通路定義。
目前比較成熟的接口應用有**DSI(顯示接口),和CSI(攝像頭接口)**,都具有比較復雜的協議結構,下圖表示某一個SOC可以作為一個CSI的接收器,同時也可以作為一個DSI的輸出器。

其物理層使用到了D-PHY,目前新的物理層C-PHY也逐漸被采用,我們常說的Camera I2C接口在MIPI中有專門的一個CCI(Camera Control Interface)來對應。
根據層級,CSI協議分為五層:

| 名稱 | 解釋 | |
|---|---|---|
| Application | 應用層 | 處理原始圖像數據的各種算法模塊 |
| Packing Formats | 組包層 | 負責將數據按照一定的次序,切割成8bite數據 |
| Low Level Protocaol | 協議層 | 為新生成的數據加上爆頭包尾,形成符合協議要求的數據流 |
| Lane Management | 通道管理層 | 將生成的數據流按照一定次序和要求,進行讀寫管理,輸出數據流 |
| PHY Layer | PHY層 | 生成MIPI最后的信號波形 |
| Pixel | 像素數據 | 經過圖像模塊處理過的數據流,或者原始的圖像數據流 |
| Data | 傳輸數據 | 經過MIPI模塊切割或者加上包頭包尾數據 |
| Control | 控制信號 | 模塊間的控制數據流 |
| Transmitter | 發送端 | 包括了MIPI數組部分,轉接板等實現MIPI信源傳輸的部分 |
| Receiver | 接收端 | 包括了轉接板和商用接收端模塊,負責解析收到的MIPI信源 |
工作順序:
該層主要用于不同場景對數據的處理過程,對于發送方,多為camera生成數據,對于接收方,多為SOC對數據進行處理。
CSI-2協議可以使用SOC上的一個物理接口實現多條數據流的傳輸。協議層規定了如何對多條數據流進行標記和交織,從而使每條數據流能夠正確地重建。
CSI-2能夠支持多種多樣的像素格式,對于發送方,在數據發送之前,需要根據像素格式,將像素數據轉換為對應的字節流;對于接收方,在將數據提供給應用層之前,需要將字節流數據轉換為像素數據。
LLP指的是SoT與EoT之間的數據包字節流協議,LLP的最小單元為字節。
為了適應不同場景下對帶寬的要求,CSI-2規定了Lane的數量是可拓展的。因此,在面臨多Lane同時傳輸時,發送方需要對字節流進行公平分流(distributor),接收方則需要對多Lane數據進行合并(merger)。
PHY層指定了傳輸媒介,在電氣層面從串行bit流中捕捉“0”與“1”,同時生成SoT與EoT等信號。CSI的硬件部分包括C-PHY、D-PHY,實際上使用的主要是D-PHY。
D-PHY 描述了一同步、高速、低功耗、低代價的PHY。
D-PHY的最初版本設計目標是500M bits/s,而D是羅馬數字的500,故而叫D-PHY。

上圖表明使用DPHY作為物理層時,Camera與SOC之間的硬件關系。
MIPI CSI設備由兩部分構成,分別為CCI(Camera Control Interface)和CSI(Camera Serial Interface)。
兩個Lane的 PHY配置如下圖 :

CCI是一個雙線、雙向、半雙工、串行接口。是I2C協議的子集,與I2C基本一致。
CCI是兼容I2C接口的快速模式變體。CCI應支持400kHz操作和7位從屬尋址。
對于那些只支持RAW Bayer輸出格式的攝像頭,其CCI地址必須為011011xb(x=0,1);對于其他的攝像頭,其CCI地址必須為011110xb。
CCI可選擇支持速率:1Mbps (Fm+), 12.5Mbps (SDR), or 25Mbps (DDR).
CCI接口命名如下:

上圖為單個Lane模塊的內部組成,包含了CIL(Lane控制器與借口邏輯器),LP驅動器,HS驅動器,LP沖突檢測。
CIL負責控制各個驅動器的工作狀態,使得Dp、Dn的工作狀態可以在HS與LP之間進行切換。
處于HS模式下,差分信號電平擺幅約為200mV;處于LP模式下,單端信號電平擺幅約為1.2V。在LP模式下,根據各個Line的電平可以確定當前Lane的State。
Data Lane差分線電平的高低表明了當前處于何種狀態,發送方通過驅動差分線一系列的狀態變化,進入不同的工作模式。
CSI-2的數據包有兩種:長幀和短幀。無論長幀還是短幀,幀開頭都是SoT,幀結尾都是EoT。在兩次HS傳輸過之間,插入的是LP狀態,一般是LP11等Control狀態,當然也可以進入Escape狀態、進入LPDT或者是進入UPLS。
以DPHY為例來分析具體的協議格式,DPHY長包主要由包頭、包負載、包尾三部分組成,具體如下圖:
長幀包括32bit的包頭(Packet Head,PH)、有效數據填充以及16bit的包尾(Packet Foot,PF)。
數據標識(Data Identity,DI):1個字節,包括VC(Victual Channel)低兩位和DT(Data Type)的低六位;數據計數(Word Count,WC):2個字節。從PH結尾到PF的開頭中間的填充數據的長度,單位為字節。接收端通過WC來判斷報的結尾位置。錯誤檢測(ECC):1個字節。包括VC的高兩位,與DI中的VC低兩位構成4bit虛擬通道標識;低6位為糾錯碼,采用Hamming(漢明碼)的方式,用來糾正PH中一位的錯誤或者發現兩位的錯誤;
有效數據填充:長度=WC*8bit。低位在前,對內容沒有任何限制(0~65535字節)。
PF包括:檢驗(CHECKSUM):兩個字節。低位在前,CHECKSUM采用CCITT的16-bit的CRC校驗,即X16+X12+X5+X0。CRC只能檢測出一個或多個錯誤,并不能糾正錯誤。
DI:1個字節,包括VC的低兩位,和DT(5:0);
短包數據域:2個字節,如果該短幀為Data Type的幀同步(Frame Synchronization),則數據域表示幀數;如果短幀的Data Type為行同步(Line Synchronization),則數據域表示行數。
錯誤檢測(ECC):1個字節,包括VC的高兩位和六位糾錯碼。

數據類型舉例:
比如YUV420格式:4:2:0表示2:1的水平取樣,垂直2:1采樣(每四個Y共用一組UV分量) 數據格式如圖所示:

關于DPHY層,我們并不需要關注太多,就像網卡的PHY層一樣,我們只需要知道,通過CCI接口發送配置信息給Camera,通過CSI接口傳輸數據。

MIPI攝像頭:
通常手機不會設計這個擴展槽,一般都會直接在板子上預留小的排線接口,直接將攝像頭模組插上去即可。
在手機內部,各個部件與MIPI協議棧的關系如下圖:
其中攝像頭通過CSI與處理器相連。
我們再細化下攝像頭與cpu的模塊圖【以瑞芯微rk3568為例】:

MIPI接口在系統的實現如上圖所示,
ISP(Image Signal Processor),即圖像信號處理器,用于處理圖像信號傳感器輸出的圖像信號。
它在相機系統中占有核心主導的地位,是構成相機的重要設備。ISP 通過一系列數字圖像處理算法完成對數字圖像的效果處理。
瑞芯微rk3568平臺的ISP2.1 處理圖像數據的基本流程如下:
ISP 包括:
MI接口如下:
一般抓圖的順序:
下面看一款攝像頭模組OV13850的內部結構圖:
定時脈沖發生器輸出時鐘來訪問成像陣列的行,預先填充電荷并且按順序對數組的行進行采樣。
在預先填充電荷和采樣的時間間隔內,每個像素點的電荷曝光時減少入射光。
這是在滾動快門的體系結構的曝光時間。
曝光時間通過調整預先填充電荷和采樣之間的時間間隔控制。
在每一行的像素數據采樣后,通過模擬電路(AMP)進一步處理:糾正偏移量和將數據乘以相應的增益。
模擬處理后通過10位ADC的輸出數組中的每個像素的數據。
ISP(image sensor processor)通過圖像輸出接口單元,經過MIPI接口(MCP/MDP)將圖像數據發送出去。
好了,本文暫時講到這里,
后面會繼續更新幾篇Camera文章,
建議大家訂閱本專題!
也可以后臺留言,加一口君好友,拉你進高質量技術交流群。
end
一口Linux?
關注,回復【1024】海量Linux資料贈送
精彩文章合集
文章推薦