mipi-rx之軟件篇


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。

D-PHYDSI和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。

•YUV 444 采樣
全采樣,對每個像素點的的YUV分量都進行采樣,這樣的三個分量信息量完整
 假設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]
[y u v] [y u v] [y u v] [y u v]

那么1920*1080文件的大小:1920*1080*3(B),那么一個像素對應3個字節
YUV 422 采樣
•部分采樣,可節省1/3存儲空間和1/3的數據傳輸量。UV分量是Y分量采樣的一半,Y分量和UV 分量按照2 : 1的比例采樣。如果水平方向有10個像素點,那么采樣了10個Y分量,而只采樣了5個UV分量。其中,每采樣過一個像素點,都會采樣其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]

1920*1080文件的大小:1920*1080+1920*1080*0.5+1920*1080*0.5(B),那么UV的數量減少了一半,相對於YUV444空間節省了1/3
YUV 420 采樣
•部分采樣,可節省1/2存儲空間和1/2的數據傳輸量。YUV 420采樣,並不是指只采樣U分量而不采樣V分量。而是指,在每一行掃描時,只掃描一種色度分量(U或者V)和Y分量按照2 : 1的方式采樣。比如,第一行掃描時,YU 按照 2 : 1的方式采樣,那么第二行掃描時,YV分量按照 2:1的方式采樣。對於每個色度分量來說,它的水平方向和豎直方向的采樣和Y分量相比都是2:1 。其實yuv420的取名方式不是很高明,更確切的命名為yuv420yuv402,也就是第一行只有U,而第二行只有V
假設4*4像素,采樣格式如下:

[y u] [y] [y u] [y]
[y v] [y] [y v] [y]
[y u] [y] [y u] [y]
[y v] [y] [y v] [y]

1920*1080文件的大小:1920*1080+1920*1080*0.25+1920*1080*0.25(B)相對於YUV444空間節省1/2,因此也是比較主流的采樣方式。

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM