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