來源:公眾號瓜大三哥,版權(quán)歸瓜大三哥所有
1 MIPI 簡介 2 MIPI CSI-2簡介 2.1 MIPI CSI-2 的層次結(jié)構(gòu) 2.2 CSI-2協(xié)議層 2.3 打包/解包層 2.4 LLP(Low Level Protocol)層 2.5 通道管理(Lane Management)層 2.6 物理層(PHY Layer) 3 MIPI CSI2的物理連接 4 MIPI CSI2的工作模式 5 MIPI CSI2的數(shù)據(jù)包格式 5.1 MIPI CSI2的長包格式 5.2 MIPI CSI2的短包格式 6 基于FPGA的MIPI接口實現(xiàn) 6.1 接口描述 6.2 模塊分析 6.2.1 解串模塊 6.2.2 協(xié)議模塊 6.2.3 RAW 10bit生成模塊 6.3 實例應(yīng)用 6.3.1 硬件結(jié)構(gòu)框圖 6.3.2 IIC配置 6.3.3 實驗結(jié)果 7 參考鏈接
1 MIPI簡介
MIPI 是
Mobile Industry Processor Interface(移動行業(yè)處理器接口)的縮寫。MIPI 聯(lián)盟是一個開放的會員制組織。2003年7月,由美國德州儀器(TI)、意法半導(dǎo)體(ST)、英國 ARM 和芬蘭諾基亞(Nokia)4 家公司共同成立。
MIPI 聯(lián)盟旨在推進移動應(yīng)用處理器接口的標(biāo)準(zhǔn)化。MIPI 聯(lián)盟下面有不同的 WorkGroup ,分別定義了一系列的手機內(nèi)部接口標(biāo)準(zhǔn),比如攝像頭接口 CSI 、顯示接口 DSI 、射頻接口 DigRF 、麥克風(fēng)/喇叭接口 SLIMbus 等。而 MIPI CSI-2 (Camera) and MIPI DSI (Display)則是目前業(yè)界使用最廣的兩個 MIPI 接口標(biāo)準(zhǔn),而這也是和視頻傳輸相關(guān)的標(biāo)準(zhǔn),所以本文主要對 CSI-2 攝像頭標(biāo)準(zhǔn)進行介紹。
2 MIPI CSI-2簡介
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)、通道管理層和物理層。
圖1協(xié)議結(jié)構(gòu)層次詳細(xì)描述如下
名稱
描述
應(yīng)用層
即是處理原始圖像數(shù)據(jù)的各種算法模塊
組包/解包層
負(fù)責(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ù)流被標(biāo)記并組合在一起,指定了多數(shù)據(jù)流怎樣被標(biāo)記和交叉存取,因此每個數(shù)據(jù)流可以在 SOC 處理器 CSI-2 接收器中被正確的重建,才能把各個數(shù)據(jù)流正確地恢復(fù)出來。
2.3 打包/解包層
CSI-2支持多種像素格式圖像應(yīng)用,包括從6位到24位每個像素的數(shù)據(jù)格式。
在發(fā)送端,數(shù)據(jù)由本層被發(fā)送到LLP層(Low Level Protocol)前,本層將應(yīng)用層傳來的數(shù)據(jù)由像素打包成字節(jié)數(shù)據(jù);
在接收端,執(zhí)行相反過程,將LLP層發(fā)來的數(shù)據(jù)解包,由字節(jié)轉(zhuǎn)成像素,然后才發(fā)送到應(yīng)用層。8位每像素的數(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差分?jǐn)?shù)據(jù)信號引腳,如圖2所示。
圖2信號描述如下
名稱
描述
DATA1 /DATA1-
MIPI協(xié)議組包生成的差分模擬數(shù)據(jù)信號第1組
DATA2 /DATA2-
MIPI協(xié)議組包生成的差分模擬數(shù)據(jù)信號第2組
CLOCK /CLOCK-
協(xié)議組包生成的差分模擬時鐘信號
SCL/SDA
IIC控制通道
在典型的應(yīng)用中發(fā)送端在完成對圖像的各種處理后,按照協(xié)議對數(shù)據(jù)進行打包,然后通過差分信號線向接收端傳輸信號,差分信號線一般有一對時鐘差分線和多對數(shù)據(jù)差分線,數(shù)據(jù)差分信號線的數(shù)量與需要傳輸?shù)臄?shù)據(jù)量的要求有關(guān),數(shù)據(jù)量越大多對數(shù)據(jù)線能更容易滿足鏈路的需求。一般情況下兩百萬到五百萬像素的手機使用兩對差分?jǐn)?shù)據(jù)線,即兩個數(shù)據(jù)通道。而當(dāng)攝像頭像素進一步提高到八百萬甚至一千三百萬時一般會使用四個數(shù)據(jù)通道,即四對差分?jǐn)?shù)據(jù)線。
與外部進行控制信號交互時,采用的是I2C接口,在MIPI的發(fā)送端使用的是I2C從端的IP,MIPI CSI-2接口的控制寄存器連接I2C的從端,這樣外部接收裝置可以通過I2C去配置MIPI發(fā)送端的內(nèi)部寄存器,以此改變MIPI CSI-2接口內(nèi)部狀態(tài)機的持續(xù)時間和最后輸出數(shù)據(jù)時的通道數(shù),又或者在調(diào)試過程中讀出這些寄存器,去做相應(yīng)的檢查,以判斷發(fā)送端的工作狀態(tài),再通過接收端的現(xiàn)象來分析發(fā)送端是否工作在正常的狀態(tài)。
4 MIPI CSI2的工作模式
D-PHY有兩種傳輸模式。
HS 高速傳輸模式,用于傳輸突發(fā)數(shù)據(jù),同步傳輸,信號為差分信號,電平范圍為100mv-300mv,傳輸速度范圍是80-1000Mbps。在該模式下傳輸時,當(dāng)差分線正端收到 1.2V 信號,負(fù)端收到 0V信號時,這時接收端識別為 1。反之為0。
LP 低功耗模式,用于傳輸控制指令,異步傳輸,信號線為單端,電平范圍是0-1.2v,沒有用時鐘線,時鐘是通過兩個數(shù)據(jù)線異或而來的,速度只有10Mbps。在該模式下傳輸時,當(dāng)正端接收到300m V,負(fù)端接收到100m V 時接收端識別為1,反之則識別為0。
5 MIPI CSI2的數(shù)據(jù)包格式
MIPI CSI2是一個面向字節(jié)的,基于包的協(xié)議;它支持任意大小的數(shù)據(jù)通過短包和長包格式傳輸。各個包之間由EOT-LPS-SOT序列隔開,如圖所示。
LLP包有兩種:長包和短包。每個包的傳輸以SoT(start of transmission)開始,EoT(end of transmission)結(jié)束,中間間隙是LPS(Low Power State低功耗狀態(tài))。
5.1 MIPI CSI2的長包格式
MIPI CSI2的長包主要有包頭、數(shù)據(jù)包和包尾三部分構(gòu)成。而包頭又可細(xì)分為:數(shù)據(jù)標(biāo)識(data identifier)、數(shù)據(jù)包大?。╳ord count)和錯誤校驗碼(ECC)構(gòu)成如下圖所示。
其中,數(shù)據(jù)標(biāo)識大小為1字節(jié),包含虛擬數(shù)據(jù)通道號[7:6]和數(shù)據(jù)類型[5:0]。
數(shù)據(jù)包大小為2字節(jié),其內(nèi)容為傳送數(shù)據(jù)的長度,以“字”為單位。
錯誤校驗碼大小為1字節(jié),負(fù)責(zé)對數(shù)據(jù)包的傳輸錯誤進行檢查及糾錯。
數(shù)據(jù)包可以傳送數(shù)據(jù)的大小為0~65535字節(jié)。
包尾大小為2字節(jié),是數(shù)據(jù)負(fù)荷的檢查和。
5.2 MIPI CSI2的短包格式
與長包相比,短包沒有數(shù)據(jù)包和包尾。數(shù)據(jù)標(biāo)識DI中的數(shù)據(jù)類型在0x00到0x0F之間。WC字段是短包的數(shù)據(jù)域,這個數(shù)據(jù)可由用戶定義。ECC采用的是Hamming Code的方式,能對1bit錯誤進行糾錯,2bit錯誤進行檢查,如下圖所示。
短包只是將長包中的WC的位置作為包的數(shù)據(jù)域,也就是說,短包每次最多只能發(fā)兩個字節(jié)的數(shù)據(jù)。和長包一致,同樣需要先發(fā)LSB,再發(fā)MSB。應(yīng)當(dāng)注意的是,短包一般是用來發(fā)送同步控制信號的,一般不建議使用短包來發(fā)送用戶數(shù)據(jù)。
同步信號的類型如下:
而當(dāng)Data Type為0x08到0x0F時,則為Generic Short Packet Code,即可發(fā)送用戶自定義數(shù)據(jù)。
比如下面的例子,短包發(fā)幀同步信號,長包發(fā)數(shù)據(jù)。
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鏈路差分?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
視頻輸入時鐘
m_axis_video_aresetn
I
視頻輸入復(fù)位,低有效
m_axis_video_tready
I
視頻輸入準(zhǔn)備信號
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)生成模塊
IPIP層次IP頂層模塊IP輸出接口時序
6.2.1 解串模塊
解串模塊主要完成字節(jié)對齊和字對齊,程序結(jié)構(gòu)框圖如下圖所示。
dphy_clk :輸入查分時鐘
reset : 輸入復(fù)位
ddr_bit_clock : 輸出單端時鐘
ddr_bit_clock_b : 輸出反向單端時鐘
byte_clock : 輸出字節(jié)時鐘頻率為輸入頻率的1 /4
csi_rx_clock_det:檢測外部時鐘是否穩(wěn)定:等待參考時鐘穩(wěn)定200個時鐘周期,并且byte_clock時鐘穩(wěn)定3個時鐘釋放復(fù)位。
csi_rx_idelayctrl_gen:idelayctrl配合idelay使用
csi_rx_hs_lane_phy:抖動補償和串化
通過控制延時,使得CLK和經(jīng)過IBUFDS的BitClk對齊,從而消除IBUFIO和BUFR還有net的延時。這樣所有的輸入信號都只經(jīng)過了一個IBUFDS,延時相等。對Idelay的控制,可以手動調(diào)節(jié),也可以用自動算法。
csi_rx_byte_align:對齊某一字節(jié),相當(dāng)于找同步字
csi_rx_word_align:將不同通道之間的字節(jié)對齊到某一個字
6.2.2 協(xié)議模塊
csi_rx_packet_handler,解析數(shù)據(jù)協(xié)議,根據(jù)協(xié)議解出vsync_out,Line_valid,里面包括長短包判斷,ECC校驗產(chǎn)生valid等。
6.2.3 RAW 10bit生成模塊
csi_rx_10bit_unpack:解包為RAW 10bit,如果是8bit則不需要此模塊
6.3 實例應(yīng)用
本次實例是應(yīng)用于xlinx 的xc7z035ffg676上,開發(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ù)里面:先進性IIC初始化,GPIO初始化,進行復(fù)位,然后配置Sensor配置。
6.3.3 實驗結(jié)果
可以看到成功解串出來數(shù)據(jù)。
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。