1.MIPI CSI2的發送和接收
上圖反映了sensor 和 soc 的數據關系,soc 通過 CCI (Camera Control Interface) 控制 sensor 寄存器,配置正確,sensor 將會通過 mipi 接口輸出圖像數據。
控制信息是 soc 通過 CCI 發送到 sensor,CCI 接口一般的就是 I2C 接口,最大支持400KHz。
data信息是CSI DPHY發送者發送到CSI DPHY接收者,由sensor端發送到soc的mipi-rx。
• 2 D-PHY(DSI和CSI的物理層定義)
D-PHY 是 MIPI 聯盟發布的高速物理層標準,規定了接口層的物理特性和傳輸協議。 DPHY 採用了 200mV 源同步的低壓差分信號技術,每個 Lane 的數據綠率範圍支持到2500Mbps。 D-PHY 可以工作在低功耗 (Low Power, LP) 和高速 (High Speed, HS) 兩種模式下。
2.1、傳輸模式
LP(Low-Power) 模式:用於傳輸控制信號,最高速率 10 MHz
HS(High-Speed)模式:用於高速傳輸數據,速率范圍 [80 Mbps, 2.5Gbps] per Lane
傳輸的最小單元為 1 個字節,采用小端的方式,也就是 LSB first,MSB last。
相關縮寫名詞:
- HS-RX:高速接收器
- HS-TX:高速發送器
- LP-RX:低功耗接收器
- LP-TX:低功耗發送器
- LPS: Low Power State, 封包之間的spacing間距。
- ST: Start of Transmission (SoT), 封包的起始訊號, 一般為低速轉換為高速的暫態訊號。
- ET: End of Transmission (EoT), 封包的結束訊號, 一般為高速轉換為低速的暫態訊號。
- PH: Packet Header, 32 bit表示, 為封包的標頭。
- PF: Packet Footer, 16 bit表示, 為封包的結尾。
2.2、Lane States
* LP mode 有 4 種狀態: LP00、LP01(0)、LP10(1)、LP11 (Dp、Dn)
* HS mode 有 2 種狀態: HS-0、HS-1
HS 發送器發送的數據 LP 接收器看到的都是 LP00,
2.3、Lane Levels
* LP: 0 ~ 1.2V
* HS: 100 ~ 300mV,HS common level = 200mV,swing = 200 mv
2.4、操作模式
• 數據Lane的3種操作模式
- Escape mode,
- High-Speed(Burst) mode
- Control mode
• ①Escape mode request
LP-11→LP-10→LP-00→LP-01→LP-00
exit:LP-10 -> LP-11
當進入 Escape mode 需要發送 8-bit entry command 表明請求的動作,比如要進行低速數據傳輸則需要發送 cmd: 0x87,進入超低功耗模式則發送 cmd: 0x78。
• ②High-Speed mode request :
LP-11→LP-01→LP-00->SOT(0001_1101)
exit: EOT -> LP-11
• ③Turnaround request (LP-11→LP-10→LP-00→LP-10→LP-00)
這是開啟 BTA 的時序,一般用於從 slave 返回數據如 ACK: 0x84。
exit:LP00→LP10→LP11
最常用的就是“低功耗進入高速模式”如下圖:
我們的D0-D4都是一個差分信號,它從lowpower state進入到HS后,從hi speed mode 中sync出我們的data。
sensor控制的信號由綠色框圈出來,主要是以下三個訊號:
HS-Prepare:表示從low power mode進入到hi speed mode需要prepare一段時間
Hs-zero: 表示從low power mode進入到hi speed mode需要keep LP-00狀態一段時間
Hs-trail:表示送完1 st data后需要keep一段時間后才允許進入low power mode,進行下一輪數據傳輸。
soc端的控制的信號由黃色框圈出來:
Hs-settle:表示soc要等一段時間才去開始去parse “sync code”, 當抓到sync code后表示sensor已經進入了hi speed mode, 這個時候就可以sync data了。
注意:
1.每次EOT(end of trans)結束訊號后,都會進入low power mode,而不是sensor 工作后就一直處於hi speed mode。也就是每傳一個package,都會走一遍上述的過程。
2.hs-settle為mclk/8 *n(這個n表示配置幾個clk,對應code的話配置這個mipi_dev_attr_s->dphy)
當hs-settle的時間太長會壓到data中的“sync code”,那么就會出現sync code parse不到,出現ecc err. 又或者從data中parse到一個假的“sync code”,那么最后就會出現數據不太對,出現ecc err.
Ecc還有一種出現可能就是lane mapping 出錯,當我們傳輸數據出現ecc err, 有可能就是傳輸short pack時,4 byte的short pack拼接的不對(詳見CSI的數據包結構),導致出現ecc error.
3.如果hs-trail持續的太短(拉高的太快),有可能會壓到最后面的data,所以會出現crc/wc(word count ) err.另外,如果hs -settle太大,也有可能hs-trail也會是錯誤的數據,所以出現wc, crc err,因此不一定是hs-trail的問題,得先確保前面的ecc/decode無誤后再來調整hs-trail
一般排查流程如下:
2.5 時鍾模式
- 連續時鍾模式:數據包傳輸間隔,clk lane 保持在高速模式;
- 非連續時鍾模式:數據包傳輸間隔,clk lane 進入 LP-11 狀態,退出hi speed mode;
2.6 時序要求
在調試 DSI 或者 CSI 的時候, HS mode 下的幾個時序非常重要:T_LPX,T_HS-SETTLE ≈ T_HS-PREPARE + T_HS-ZERO,T_HS-TRAIL,一般遵循的原則為:Host 端的 T_HS-SETTLE > Slave 端的 T_HS-SETTLE。
2.7 Start-of-Transmission ( SoT )過程
當要進行數據傳輸的時候,data lane 將會通過信號(SoT)退出停止狀態,進入高速模式。過程如下:
TX Side | RX Side |
退出停止狀態 ( LP-11 ) | 檢測停止狀態 |
進入 HS-Rqst 狀態 ( LP-01 ),並處於該狀態的時間間隔為 TLPX | 檢測到 lane 從 LP-11 轉變為 LP-01 |
進入 Bridge 狀態 ( LP-00 ),並處於該狀態的時間間隔為 THS-PREPARE | 檢測到 lane 從 LP-01 轉變為 LP-00,間隔 TD-TERM-EN 時間之后將使能傳輸 |
同時退出低功耗模式,進入高速模式 | |
處於 HS-0 狀態,時長為 THS-ZERO | 使能 HS-RX 並等待 THS-SETTLE,以忽略轉換狀態 |
開始從數據流中等待同步序列 | |
時鍾上升邊緣插入 HS 同步序列 ‘00011101’ | |
識別到同步序列 ‘00011101’ | |
高速模式開始傳輸有效數據 | |
接收到有效數據 |
2.8 End-of-Transmission ( EoT )過程
在數據完成傳輸時,通過結束傳輸(EoT)過程,數據通道退出高速模式並進入停止狀態,這個過程狀態變化如下:
TX Side | RX Side |
傳輸數據 | 接收到數據 |
在完成最后一個字節數據的傳輸之后,保持該狀態的時間間隔為 THS-TRAIL | |
關閉 HS-TX,啟用 LP-TX,並在 THS-EXIT一段時間內處於停止狀態 ( LP-11 ) | 檢測到 lane 狀態進入停止狀態 ( LP-11 ),關閉傳輸功能 |
忽略 THS-SKIP一段時間內的 lane 變化,以忽略轉換狀態 | |
檢測有效數據的最后一次轉換,確定最后一次有效數據並忽略包尾序列 |
接收器是如何判斷數據將要開始傳輸了呢?
當出現LP11→LP01→LP00時,接收器將會判斷,將會有數據達到,同時,使用示波器查看mipi波形,將會發現在PL00(THS-PREPARE)時會有一個小脈沖(峰刺),一般的,在這個小脈沖之后,接收器將會打開比較器(由於在THS-PREPARE會有這個小脈沖的存在,所以在接收器中,會通過設置接收器的settle time,避開這個小脈沖,在這個脈沖之后再打開比較器),准備接收數據。而HS-00011101則表示有效數據開始,同時數據的開頭,將會有數據表明將要數據的數據量,所以mipi接收器將會按其數據量接收,直到接收完成。
每根 lane(data lane/clk lane)從 LP 模式切換到 HS 模式都會有 LP11→LP01→LP00 這樣的一個時序,同時還要檢查 HS-00011101 ,HS-00011101 主要是用於同步,只有前面正確采集到 00011101 ,才能保證 clk 和 data 相位一一對應。
mipi csi調試:
測量 sensor 有相應的 mipi 信號輸出,但是主控並沒有接收到數據,通過查看主控的 mipi 寄存器發現,mipi接收器還處於 LP 模式,這種情況一般是mipi沒有檢測到sensor發送的從 LP 進入 HS 的時序。此時可測量sensor 開始輸出圖像數據時,clk lane 是否有 LP11→LP01→LP00 這樣的一個時序。同時,應該先開 mipi,sensor 再開始 mipi 數據傳輸
由於THS-PREPARE會有一個小脈沖的存在,所以,主控在接收mipi數據的時候,需要通過設置主控的settle time,這個時間需要在這個小脈沖之后,這樣接收才不會有問題
當出現 sensor 有數據輸出,但是主控沒有接收成功,這個情況一般是 mipi 的時序問題,sensor 端的時序沒有和主控端的配合好,這個時候,可以嘗試的減小sensor端的THS-PREPARE,增大THS-ZERO和THS-TRAIL
由於一些主控的需求,在一幀數據完成之后,需要一定的時間才可以進行相應的ISP處理,當一幀傳輸完畢之后的LP11時間達不到主控ISP的時間要求導致ISP報錯,可通過調節THS-TRAIL時間,以此得到ISP對幀間的時序長度要求
3.CSI-2(定義mipi-rx的數據包規則)
CSI-2 是針對攝像頭的數據協議, 規定了主機與外設通信的數據包格式。CSI-2 可以支持不同像素格式的圖像應用, 數據傳輸的最小粒度是字節。 為增加 CSI-2 的性能,可以選擇數據 Lane 的數量, CSI-2 協議規訂了發送端將像素數據打包成字節的機制, 並指明多個數據 Lane 分配和管理的方式。字節數據以數據包的形式組織,數據包在SoT 與 EoT 之間傳輸。 接收端根據協議解析相應的數據包, 恢復出原始的像素數據。
CSI-2 的數據包分為長包和短包兩種,包含有校驗碼,能進行誤碼糾正和錯誤檢測。長包和短包都是在 SoT 和 EoT 之間傳輸,在數據傳送的間隙, D-PHY 處於 LP 模式。 CSI-2數據包的傳輸機制如圖所示。 PH 和 PF 分別表示 Packet Header 和 Packet Footer。
3.1.一個frame的數據包結構:
3.2. 包類型
• 短包:4 bytes (固定)
• 長包:6~65541 bytes (可變)
3.2.1 短包結構
一個short packet(也叫做pack head(PH))
• 包結構(4個字節)
• 數據標識(DI) 1個字節
• WC (長度固定為2個字節)
• 錯誤檢測(ECC) 1個字節
• 包大小
• 長度固定為4個字節
3.2.2 pack footer(PF)的結構:
3.2.3 長包結構
• 包頭部(4個字節)(PH)
• 數據標識(DI) 1個字節
• 數據計數WC (2個字節 )(PH和PF之間的資料個數)
• 錯誤檢測(ECC) 1個字節
• 數據填充(0~65535 字節)
• 長度=WC*字節
• 包尾:校驗和(2個字節)(PF)
長包 = 短包(包頭) + 數據 + 包尾
• 包大小:
• 4 + (0~65535) + 2 = 6 ~ 65541 字節
3.2.4 H-blanking & V-blanking
傳輸多個pack和傳輸一個pack時對應的圖像如下, VVALID/HVALID/DVALID可以先把它想成是影像的同步訊號VSync/HSync/DE,而Data就是影像資料,以方便理解。
從圖中可以看到,當水平同步訊號HVALID為Low的這段區間,剛好就是每行的Blanking間隔, 也就是H-blanking。
從下圖可以看到上一FE到下一FS之間的間隔為V-blanking。
frame的封包示意圖:
3.2.5 MIPI幀數據類型DI
Data Identifier (DI) 為虛擬通道(VC, 2 bit)和資料類型(DT, 6 bit)組成。
3.2.5.1 VC(virtual channel)
可以看出MIPI最多可以輸入4組影像來源,其ID為0~3,且內容可以是任意的內容,下圖就表示用virtual chn來傳輸不同格式的數據。
3.2.5.1 DT(data type)
Data Type目前定義多種資料形態,范圍從0x00~0x3F,其中0x00~0x0F為短封包類型,0x10~0x3F為長封包類型,如下表:
從soc到外設發送的包類型
從外設到soc的數據包類型
4. mipi支持的圖像格式
MIPI Rx 共支持五種pixel資料格式的傳輸, 包含 YUV422-8bit、 YUV422-10bit、 RAW8、RAW10 和 RAW12。
- RGB格式:
傳統的紅綠藍格式,比如RGB565,RGB888,其16-bit數據格式為5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼對綠色比較敏感。
格式 |
描述 |
RGB565 |
1. 每個像素用16位表示,RGB分量分別使用5位、6位、5位。 2. 內存中排列(高字節->低字節):R R R R R G G G G G G B B B B B |
RGB555 |
1. 每個像素用16位表示,RGB分量都使用5位(剩下1位不用) 2. 內存中排列(高字節->低字節):X R R R R G G G G G B B B B B(X表示不用,可以忽略) |
RGB24(RGB888) |
1. 每個像素用24位表示,RGB分量各使用8位。在內存中RGB各分量的排列順序為:BGR BGR BGR ...... 2. 內存中排列(高字節->低字節):B B B B B B B B G G G G G G G G R R R R R R R R |
ARGB32(ARGB8888) |
1. 每個像素用32位表示,RGB分量各使用8位(剩下的8位用於表示Alpha通道值) 2. 內存中排列(高字節->低字節):B B B B B B B B G G G G G G G G R R R R R R R R A A A A A A A A |
-
- YUV格式:
YUV是一種色彩編碼方法,是一種彩色編碼系統,相對於RGB色彩空間,YUV傳輸帶寬占用更低,傳輸數據不易出錯。
Y’UV、YUV、YCbCr、YPbPr 幾個概念其實是一回事兒。由於歷史關系,Y’UV、YUV 主要是用在彩色電視中,用於模擬信號表示。YCbCr 是用在數字視頻、圖像的壓縮和傳輸,如 MPEG、JPEG。今天大家所講的 YUV 其實就是指 YCbCr。Y 表示亮度(luma),CbCr 表示色度(chroma)。
人眼的視覺特點是對亮度更敏感,對位置、色彩相對來說不敏感。所以在視頻編碼系統中為了降低帶寬,可以保存更多的亮度信息(luma),保存較少的色差信息(chroma)。
luminance 亮度,luma 是在視頻編碼系統中指亮度值;
chrominance 色度,chroma 是在視頻編碼系統中指色度值。
Y’UV 設計的初衷是為了使彩色電視能夠兼容黑白電視。對於黑白電視信號,沒有色度信息也就是(UV),那么在彩色電視顯示的時候只顯示亮度信息。
YUV是一個比較籠統地說法,針對它的具體排列方式,可以分為很多種具體的格式。色度(UV)定義了顏色的兩個方面─色調與飽和度,分別用CB和CR表示。其中,Cr反映了RGB輸入信號紅色部分與RGB信號亮度值之間的差異。而Cb反映的是RGB輸入信號藍色部分與RGB信號亮度值之間的差異。
YUV采樣格式:(subsamping)
原則:在數字圖像中,
(1) 每一個圖形像素都要包含 luma(亮度)值;
(2)幾個圖形像素共用一個 Cb + Cr 值,一般是 2、4、8 個像素。
主要的采樣格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。
[y u v] [y u v] [y u v] [y u v]
[y u v] [y u v] [y u v] [y u v]
[y u v] [y u v] [y u v] [y u v]
假設4*4像素,采樣格式如下:
[y u] [y v] [y u] [y v]
[y v] [y u] [y v] [y u]
[y u] [y v] [y u] [y v]
[y v] [y u] [y v] [y u]
[y u] [y] [y u] [y]
[y v] [y] [y v] [y]
[y u] [y] [y u] [y]
[y v] [y] [y v] [y]
YUV存儲格式
-
- RAW data格式:
RAW圖像就是CMOS或者CCD圖像感應器將捕捉到的光源信號轉化為數字信號的原始數據。RAW文件是一種記錄了數碼相機傳感器的原始信息,同時記錄了由相機拍攝所產生的一些元數據(Metadata,如ISO的設置、快門速度、光圈值、白平衡等)的文件。RAW是未經處理、也未經壓縮的格式,可以把RAW概念化為“原始圖像編碼數據”或更形象的稱為“數字底片”。Raw data(Raw RGB)經過彩色插值就變成RGB。
sensor上每個像素只采集特定顏色的光的強度,因此sensor每個像素只能為R或G或B 。
bayer陣列:
人眼對綠色比較敏感,所以一般bayer格式的圖片綠色格式的像素是是r和g像素的和,那么bayer格式一般有下面4種:
5. mipi CSI傳輸格式:
raw 8:
raw10:
raw 12:
從圖像看,RAW8是一傳輸個字節對應一個pixel, 而raw10是5個byte去對應4個pixel,第5個byte用來存儲pixel 0~3的bit[0:1]。同理3個byte存儲2個pixel。
6. 彩色深度(色彩位數):
8位彩色,有256種深度。
16位彩色:65,536種顏色。
24位彩色:每種原色都有256個層次,它們的組合便有256*256*256種顏色。
32位彩色:除了24位彩色的顏色外,額外的8位是儲存重疊圖層的圖形資料(alpha透明度)。
7. 圖像解析度/分辨率(Resolution)
1280 * 720 = 921600 |
1M |
100萬像素 |
720P |
H65 sensor |
1920 * 1080 = 2073600 |
2M |
200萬像素 |
1080P |
Imx307/imx327 sensor |
2560 * 1440 = 3686400 2560 * 1600 = 4096000 2592 * 1944 = 5038848 |
4M/5M |
400萬像素 500萬像素 |
2K |
Imx335/sc4210 sensor |
3840 * 2160 = 8294400 |
8M |
800萬像素 |
4K |
Imx334 sensor |