MIPI CSI2協(xié)議
1 MIPI簡介
MIPI 是 Mobile Industry Processor Interface(移動行業(yè)處理器接口)的縮寫。MIPI 聯(lián)盟是一個開放的會員制組織。2003年7月,由美國德州儀器(TI)、意法半導(dǎo)體(ST)、英國 ARM 和芬蘭諾基亞(Nokia)4 家公司共同成立。
2 MIPI CSI-2簡介
MIPI CSI(Camera Serial Interface)是由MIPI聯(lián)盟下 Camera 工作組指定的接口標準。CSI-2 是 MIPI CSI 第二版,主要由應(yīng)用層、協(xié)議層、物理層組成,最大支持4通道數(shù)據(jù)傳輸、單線傳輸速度高達1Gb/s。
2.1 MIPI CSI-2 的層次結(jié)構(gòu)
MIPI CSI-2的分層方法有好幾種,根據(jù)MIPI聯(lián)盟的規(guī)范,CSI-2 可分為5層,如圖1所示,分別為:應(yīng)用層、組包/解包層、底層協(xié)議層(Low Level Protocol)、通道管理層和物理層。
名稱 | 描述 |
---|---|
應(yīng)用層 | 即是處理原始圖像數(shù)據(jù)的各種算法模塊 |
組包/解包層 | 負責(zé)將數(shù)據(jù)按照一定的次序,切割成8比特數(shù)據(jù)。 |
底層協(xié)議層 | 為新生成的數(shù)據(jù)加上包頭包尾,形成符合協(xié)議要求的數(shù)據(jù)流。 |
通道管理層 | 將生成的數(shù)據(jù)流按照一定次序和要求,進行讀寫管理,輸出數(shù)據(jù)流。 |
物理層 | 生成MIPI最后的信號波形。 |
2.2 CSI-2協(xié)議層
CSI-2 協(xié)議層允許多數(shù)據(jù)流(CSI-2TX)共用一個主機處理器端 CSI-2 接收信號接口(CSI-2RX)。協(xié)議層就可以描述有多少數(shù)據(jù)流被標記并組合在一起,指定了多數(shù)據(jù)流怎樣被標記和交叉存取,因此每個數(shù)據(jù)流可以在 SOC 處理器 CSI-2 接收器中被正確的重建,才能把各個數(shù)據(jù)流正確地恢復(fù)出來。
2.3 打包/解包層
CSI-2支持多種像素格式圖像應(yīng)用,包括從6位到24位每個像素的數(shù)據(jù)格式。
2.4 LLP(Low Level Protocol)層
LLP層包括為串行數(shù)據(jù)在傳輸開始(SoT)到傳輸結(jié)束(EoT)之間傳輸事件和傳輸數(shù)據(jù)到下一層,建立位級和字節(jié)級同步的方法。LLP最小數(shù)據(jù)粒度是1字節(jié)。LLP層也包括,每字節(jié)中各位數(shù)值分布解釋,即“端”(Endian)分布。
2.5 通道管理(Lane Management)層
為性能不斷提升,CSI-2 是通道可擴展的。數(shù)據(jù)通道數(shù)目可以是1,2,3,4,這個依賴于應(yīng)用中的帶寬需求。接口發(fā)送端分配(“distributor”功能)輸出數(shù)據(jù)流到一個或更多通道。在接收端,接口從通道收集字節(jié)并將之合并(“merger”功能)成為重新組合的數(shù)據(jù)流,恢復(fù)原始數(shù)據(jù)流序列。
2.6 物理層(PHY Layer)
定義了傳輸介質(zhì) (electrical conductors,導(dǎo)體),輸入/輸出電路信號的電氣特性(electrical parameters)和時鐘機制(時序)。即如何從串行位流(Bit Stream)中獲取“0”和“1”信號。規(guī)范中的這一部分記錄了傳輸介質(zhì)的特性,并依據(jù)時鐘和數(shù)據(jù)通道之間發(fā)信號和產(chǎn)生時鐘的關(guān)系規(guī)定了電學(xué)參數(shù)。
3 MIPI CSI2的物理連接
除地線外,MIPI CSI2一般會有1對I2C通信引腳,1對MIPI差分時鐘引腳和1~4對MIPI差分數(shù)據(jù)信號引腳,如圖2所示。
名稱 | 描述 |
---|---|
DATA1 /DATA1- | MIPI協(xié)議組包生成的差分模擬數(shù)據(jù)信號第1組 |
DATA2 /DATA2- | MIPI協(xié)議組包生成的差分模擬數(shù)據(jù)信號第2組 |
CLOCK /CLOCK- | 協(xié)議組包生成的差分模擬時鐘信號 |
SCL/SDA | IIC控制通道 |
4 MIPI CSI2的工作模式
D-PHY有兩種傳輸模式。
-
HS 高速傳輸模式,用于傳輸突發(fā)數(shù)據(jù),同步傳輸,信號為差分信號,電平范圍為100mv-300mv,傳輸速度范圍是80-1000Mbps。在該模式下傳輸時,當(dāng)差分線正端收到 1.2V 信號,負端收到 0V信號時,這時接收端識別為 1。反之為0。
-
LP 低功耗模式,用于傳輸控制指令,異步傳輸,信號線為單端,電平范圍是0-1.2v,沒有用時鐘線,時鐘是通過兩個數(shù)據(jù)線異或而來的,速度只有10Mbps。在該模式下傳輸時,當(dāng)正端接收到300m V,負端接收到100m V 時接收端識別為1,反之則識別為0。
5 MIPI CSI2的數(shù)據(jù)包格式
MIPI CSI2是一個面向字節(jié)的,基于包的協(xié)議;它支持任意大小的數(shù)據(jù)通過短包和長包格式傳輸。各個包之間由EOT-LPS-SOT序列隔開,如圖所示。
5.1 MIPI CSI2的長包格式
MIPI CSI2的長包主要有包頭、數(shù)據(jù)包和包尾三部分構(gòu)成。而包頭又可細分為:數(shù)據(jù)標識(data identifier)、數(shù)據(jù)包大?。╳ord count)和錯誤校驗碼(ECC)構(gòu)成如下圖所示。
數(shù)據(jù)包大小為2字節(jié),其內(nèi)容為傳送數(shù)據(jù)的長度,以“字”為單位。
錯誤校驗碼大小為1字節(jié),負責(zé)對數(shù)據(jù)包的傳輸錯誤進行檢查及糾錯。
數(shù)據(jù)包可以傳送數(shù)據(jù)的大小為0~65535字節(jié)。
包尾大小為2字節(jié),是數(shù)據(jù)負荷的檢查和。
5.2 MIPI CSI2的短包格式
與長包相比,短包沒有數(shù)據(jù)包和包尾。數(shù)據(jù)標識DI中的數(shù)據(jù)類型在0x00到0x0F之間。WC字段是短包的數(shù)據(jù)域,這個數(shù)據(jù)可由用戶定義。ECC采用的是Hamming Code的方式,能對1bit錯誤進行糾錯,2bit錯誤進行檢查,如下圖所示。
同步信號的類型如下:
6 基于FPGA的MIPI接口實現(xiàn)
6.1 接口描述
源碼請看【資料獲取】csi_4lane_raw10 #(
.series("7SERIES")
) inst (
.ref_clock_in(ref_clock_in),
.reset(reset),
.mipi_phy_if_clk_hs_n(mipi_phy_if_clk_hs_n),
.mipi_phy_if_clk_hs_p(mipi_phy_if_clk_hs_p),
.mipi_phy_if_clk_lp_n(mipi_phy_if_clk_lp_n),
.mipi_phy_if_clk_lp_p(mipi_phy_if_clk_lp_p),
.mipi_phy_if_data_hs_n(mipi_phy_if_data_hs_n),
.mipi_phy_if_data_hs_p(mipi_phy_if_data_hs_p),
.mipi_phy_if_data_lp_n(mipi_phy_if_data_lp_n),
.mipi_phy_if_data_lp_p(mipi_phy_if_data_lp_p),
.m_axis_video_aclk(m_axis_video_aclk),
.m_axis_video_aresetn(m_axis_video_aresetn),
.m_axis_video_tready(m_axis_video_tready),
.m_axis_video_tuser(m_axis_video_tuser),
.m_axis_video_tlast(m_axis_video_tlast),
.m_axis_video_tvalid(m_axis_video_tvalid),
.m_axis_video_tdata(m_axis_video_tdata)
);
端口描述如下:(輸入為MIPI接口數(shù)據(jù)流,輸出為axi stream數(shù)據(jù)流)
端口 | I/O | 描述 |
---|---|---|
ref_clock_in | I | 200M輸入?yún)⒖紩r鐘 |
reset | I | 復(fù)位,高有效 |
mipi_phy_if_clk_hs_n mipi_phy_if_clk_hs_p | I | HS鏈路差分時鐘 |
mipi_phy_if_clk_lp_n mipi_phy_if_clk_lp_p | I | LP鏈路差分時鐘 |
mipi_phy_if_data_hs_n mipi_phy_if_data_hs_p | I | HS鏈路差分數(shù)據(jù) |
mipi_phy_if_data_lp_n mipi_phy_if_data_lp_p | I | LP鏈路差分數(shù)據(jù) |
m_axis_video_aclk | I | 視頻輸入時鐘 |
m_axis_video_aresetn | I | 視頻輸入復(fù)位,低有效 |
m_axis_video_tready | I | 視頻輸入準備信號 |
m_axis_video_tuser | O | 視頻輸出的幀開始 |
m_axis_video_tlast | O | 視頻輸出行結(jié)尾 |
m_axis_video_tvalid | O | 視頻輸出數(shù)據(jù)有效 |
m_axis_video_tdata | O | 視頻輸出數(shù)據(jù) |
6.2 模塊分析
程序接口如下圖,主要由三個模塊組成:
-
解串模塊(csi_rx_4_lane_link)
-
協(xié)議解析模塊(csi_rx_packet_handler)
-
RAW10bit(csi_rx_10bit_unpack)生成模塊