MIPI CSI-2学习
CSI(Camera Serial Interface)定義了攝像頭外設(shè)與主機控制器之間的接口,旨在確定攝像頭與主機控制器在移動應(yīng)用中的標(biāo)準(zhǔn)。
關(guān)鍵詞描述
| CCI | Camera Control Interface(物理層組件,通常使用I2C或I3C進(jìn)行通信) |
| CIL | Control and Interface Logic |
| DT | Data Type(數(shù)據(jù)格式,YUV422、RGB888等) |
| SoT | Start of Transmission(傳輸啟動信號) |
| EoT | End of Transmission(傳輸停止信號) |
| FS | Frame Start(一幀畫面開始標(biāo)志) |
| FE | Frame End(一幀畫面結(jié)束標(biāo)志) |
| LS | Line Start(一行像素開始標(biāo)志) |
| LE | Line End(一行像素結(jié)束標(biāo)志) |
| PH | Packet Header(包頭) |
| PF | Packet Footer(包尾) |
| HS | High SPeed(DPHY的傳輸模式之一) |
| LP | Low Power(DPHY的傳輸模式之一) |
| LP-RX | Low-Power Receiver(DPHY LP接收器) |
| LP-TX | Low-Power Transmitter(DPHY LP發(fā)送器) |
| HS-RX | High-Speed Receiver(DPHY HS接收器) |
| HS-TX | High-Speed Transmitter(DPHY HS發(fā)送器) |
| Lane | 單向、點對點的信號傳輸通道,對于DPHY由2線差分接口構(gòu)成 |
| Virtual Channel | 用于標(biāo)識多路獨立數(shù)據(jù)流,DPHY最高支持16個虛擬通道 |
| UI | 單位間隔,等于Clock Lane上任意HS狀態(tài)(HS0或HS1)的持續(xù)時間 |
概述
CSI-2定義了攝像頭應(yīng)用中發(fā)送方(camera)與接收方(soc)之間的數(shù)據(jù)與控制傳輸標(biāo)準(zhǔn),其物理層支持DPHY與CPHY兩種,這里以DPHY為例。
CSI-2層定義
與網(wǎng)絡(luò)標(biāo)準(zhǔn)的多層協(xié)議相似,CSI-2標(biāo)準(zhǔn)也對camera數(shù)據(jù)處理的過程進(jìn)行了分層,簡單來說分為應(yīng)用層、協(xié)議層與物理層。協(xié)議層又進(jìn)行了細(xì)分:像素字節(jié)轉(zhuǎn)換層、低級協(xié)議層、Lane管理層。
- 應(yīng)用層(Application Layer)
該層主要用于不同場景對數(shù)據(jù)的處理過程,對于發(fā)送方,多為camera生成數(shù)據(jù),對于接收方,多為SOC對數(shù)據(jù)進(jìn)行處理。 -
協(xié)議層(Protocol Layer)
CSI-2協(xié)議可以使用SOC上的一個物理接口實現(xiàn)多條數(shù)據(jù)流的傳輸。協(xié)議層規(guī)定了如何對多條數(shù)據(jù)流進(jìn)行標(biāo)記和交織,從而使每條數(shù)據(jù)流能夠正確地重建。- 像素字節(jié)轉(zhuǎn)換層(Pixel/Byte Packing/Unpacking Layer):CSI-2能夠支持多種多樣的像素格式,對于發(fā)送方,在數(shù)據(jù)發(fā)送之前,需要根據(jù)像素格式,將像素數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的字節(jié)流;對于接收方,在將數(shù)據(jù)提供給應(yīng)用層之前,需要將字節(jié)流數(shù)據(jù)轉(zhuǎn)換為像素數(shù)據(jù)。
- 低級協(xié)議層(Low Level Protocol):LLP指的是SoT與EoT之間的數(shù)據(jù)包字節(jié)流協(xié)議,LLP的最小單元為字節(jié)。
- Lane管理器(Lane Management):為了適應(yīng)不同場景下對帶寬的要求,CSI-2規(guī)定了Lane的數(shù)量是可拓展的。因此,在面臨多Lane同時傳輸時,發(fā)送方需要對字節(jié)流進(jìn)行公平分流(distributor),接收方則需要對多Lane數(shù)據(jù)進(jìn)行合并(merger)。
- 物理層(PHY Layer)
PHY層指定了傳輸媒介,在電氣層面從串行bit流中捕捉“0”與“1”,同時生成SoT與EoT等信號。
物理層 DPHY
DPHY在物理上采用2線差分接口,由1對的差分clock lane與1對或多對的差分data lane組成。
上圖表明使用DPHY作為物理層時,Camera與SOC之間的硬件關(guān)系。SOC的CCI組件通過I2C完成對Camera的配置,使其輸出mipi信號,其中一對Clock+/-則由Clock Lane標(biāo)示,一對DataNBA+/-則由Data Lane標(biāo)示。
DPHY工作于兩種工作模式:
- HS(High Speed Mode),這種模式用于傳輸高速的數(shù)據(jù)信號,如視頻流;高速模式下,每對Lane都是工作在低電壓擺幅的差分狀態(tài)下,數(shù)據(jù)速率為80Mbps到1500Mbps。
- LP(Low Power Mode),這種模式則可以用來傳輸控制信號;低速模式下,每對lane的2根導(dǎo)線都轉(zhuǎn)變?yōu)閱味藸顟B(tài),數(shù)據(jù)速率為10Mbps。
上圖為單個Lane模塊的內(nèi)部組成,包含了CIL(Lane控制器與借口邏輯器),LP驅(qū)動器,HS驅(qū)動器,LP沖突檢測。CIL負(fù)責(zé)控制各個驅(qū)動器的工作狀態(tài),使得Dp、Dn的工作狀態(tài)可以在HS與LP之間進(jìn)行切換。
處于HS模式下,差分信號電平擺幅約為200mV;處于LP模式下,單端信號電平擺幅約為1.2V。
在LP模式下,根據(jù)各個Line的電平可以確定當(dāng)前Lane的State。
Data Lane
Data Lane差分線電平的高低表明了當(dāng)前處于何種狀態(tài),發(fā)送方通過驅(qū)動差分線一系列的狀態(tài)變化,進(jìn)入不同的工作模式。
- Burst Mode:High-Speed下的唯一模式,高速數(shù)據(jù)傳輸模式,此時各個Lane的Line工作在差分模式
- Control Mode:Low Power下的一種模式,可以通過變化不同的state進(jìn)入其他模式。
- Escape Mode:Low Power下的特殊模式,在這種模式下可以使用一些特別的功能,詳見下文。
協(xié)議中規(guī)定了進(jìn)入不同模式時的state變化狀態(tài):
-
HS模式:
- 進(jìn)入HS模式:LP11->LP01->LP00
通常進(jìn)入HS模式也就伴隨著高速數(shù)據(jù)的傳輸,因此SoT(啟動傳輸)信號也就產(chǎn)生(由于手頭沒有差分探針,示波器抓到的波形只能看出大致形狀)。
上圖為完整的SoT時序,可以看出SoT由“進(jìn)入HS模式(A)”和“同步序列(B)”組成。
SoT流程如下:
| 處于stop狀態(tài) | 監(jiān)測stop狀態(tài) |
| 進(jìn)入HS-Rqst狀態(tài)(LP01)并保持TLPX時間 | 監(jiān)測到LP11至LP01的狀態(tài)變化 |
| 進(jìn)入Bridge狀態(tài)(LP00)并保持THS-PREPARE時間 | 監(jiān)測到LP01至LP00的狀態(tài)變化 |
| 打開HS驅(qū)動器,同時關(guān)閉LP驅(qū)動器 | _ |
| 進(jìn)入HS0狀態(tài)并保持THS-ZERO時間 | 使能HS的接收,并等待THS_SETTLE時間,進(jìn)入穩(wěn)定期 |
| _ | 尋找Sync_Sequence |
| 發(fā)出Sync_Sequenc'00011101' | _ |
| _ | 接收到Sync_Sequence |
| 發(fā)送負(fù)載數(shù)據(jù) | |
| _ | 接收負(fù)載數(shù)據(jù) |
- 退出HS模式:LP11
EoT流程如下:
| 完成負(fù)載數(shù)據(jù)發(fā)送 | 接收負(fù)載數(shù)據(jù) |
| 發(fā)送完最后一個bit后立刻翻轉(zhuǎn)差分線狀態(tài),并保持THS-TRAIL時間 | _ |
| 關(guān)閉HS-TX,使能LPTX,并進(jìn)入LP11狀態(tài) | _ |
- 進(jìn)入Escape模式:LP11->LP10->LP00->LP01->LP00
進(jìn)入Escape模式后,則可以通過發(fā)送8bit命令執(zhí)行相應(yīng)的功能,下表列出了可用的Escape命令:
| Low-Power Data Transmission | mode | 11100001 |
| Ultra-Low Power State | mode | 00011110 |
| Undefined-1 | mode | 10011111 |
| Undefined-2 | mode | 11011110 |
| Reset-Trigger | Trigger | 01100010 |
| Unknown-3 | Trigger | 01011101 |
| Unknown-4 | Trigger | 00100001 |
| Unknown-5 | Trigger | 10100000 |
Low-Power Data Transmission
LPDT功能下,數(shù)據(jù)能夠在LP模式下進(jìn)行低速傳輸,此時Clock的時鐘需要小于20MHz。Reset-Trigger
Reset-Trigger是發(fā)送方與接收方相互對應(yīng)的通信形式,如果輸入命令模式與Reset-Trigger命令相匹配,則在接收端通過邏輯PPI向協(xié)議標(biāo)記一個Ultra-Low-Power
發(fā)送方發(fā)送ULPS碼后,接收方則可以根據(jù)這個信號進(jìn)行自己的LowPower處理。在 ULPS期間,Line始終處于LP00狀態(tài)。若出現(xiàn)持續(xù)T<sub>WAKEUP</sub>的Mark-1狀態(tài)后緊接著Stop狀態(tài)則退出ULPS。Clock Lane
與Data Lane一樣,Clock Lane也有兩種模式,高速傳輸模式與低功耗模式。
很明顯,Clock Lane進(jìn)入與退出高速模式與Data Lane基本一致。
下面兩個表格描述了進(jìn)入LowPower模式與HS模式的過程(結(jié)合上面的時序圖與Lane模塊的內(nèi)部組成圖一起看)
進(jìn)入LP模式:
| 驅(qū)動HS Clock信號(HS-0與HS-1交替切換的這種狀態(tài)) | 接收HS Clock信號 |
| 最后一個Data Lane進(jìn)入LP模式 | _ |
| 繼續(xù)驅(qū)動HS Clock信號保持TCLK-POST時間并以HS-0結(jié)束 | _ |
| 保持HS-0狀態(tài)約TCLK-TRAIL時長 | 在TCLK-MISS檢測時鐘是否消失,并關(guān)閉HS-RX單元 |
| 關(guān)閉HS-TX單元,使能LP-TX單元,轉(zhuǎn)變?yōu)橥V範(fàn)顟B(tài)LP-11并保持THS-EXIT | _ |
| _ | 檢測到LP-11狀態(tài),關(guān)閉HS終端,進(jìn)入停止模式 |
進(jìn)入HS模式
| 驅(qū)動至Stop狀態(tài)(LP-11) | 偵測Stop狀態(tài) |
| 驅(qū)動至HS-Req(LP-01)并保持TLPX | 偵測導(dǎo)線上是否出現(xiàn)LP-11到LP-01的變化 |
| 驅(qū)動至LP-00并保持TCLK-PREPARE | 偵測LP-01到LP-00的變化并在TCLK-TERM-EN后使能HS終端 |
| 使能高速驅(qū)動器同時關(guān)閉LP驅(qū)動器,保持HS-0狀態(tài)TCLK-ZERO | 使能HS-RX并等待TCLK-SETTLE |
| _ | 接收HS信號 |
| 在Data Lane啟動之前,驅(qū)動HS Clock保持TCLK-PRE | 接收HS Clock信號 |
時序參數(shù)
接收方的DPHY能否成功捕捉到有效的數(shù)據(jù)取決于發(fā)送與接收兩方之間的時序,下表列出了收發(fā)雙方的所有時序參數(shù),其中接收方的時序應(yīng)該能夠兼容發(fā)送方的時序參數(shù)。
多Lane的分發(fā)與合并
當(dāng)某些應(yīng)用場景需要的帶寬超過了單Lane所能提供的帶寬或者為了降低Clock頻率的情況下,則可以通過拓展Data Lane來滿足要求。
下圖展示了數(shù)據(jù)流在單lane與多l(xiāng)ane的情況下,發(fā)送方內(nèi)部的Lane Distribution Function(LDF)對來自LLP層的字節(jié)數(shù)據(jù)流的分發(fā)過程。
對于接收方,對應(yīng)的擁有一個Lane Merging Function(LMF),用于將PHY層的多l(xiāng)ane的數(shù)據(jù)合并為LLP層所需的字節(jié)流。
在多Lane(定為N)傳輸?shù)那闆r下,對于一幀數(shù)據(jù),其數(shù)據(jù)長度不是Lane數(shù)量(N)的整數(shù)倍的情況下,則倒數(shù)第二組數(shù)據(jù)發(fā)出后會剩下少于N的字節(jié)需要發(fā)送,此時LDF會將無數(shù)據(jù)分配的Lane置為“Invalid Data”直接進(jìn)入EoT。
下圖展示了分發(fā)后的數(shù)據(jù)在2個Lane上的傳輸情況(包含兩種情況)
多Lane合并就是多Lane分發(fā)的相反過程,這里就不在贅述。
低級協(xié)議(Low Level Protocol)
LLP是基于字節(jié),以包為單元的協(xié)議,支持長短兩種包格式。
- 傳輸任意數(shù)據(jù)(負(fù)載獨立)
- 以字節(jié)為數(shù)據(jù)元
- 對于DPHY,支持16路虛擬通道;對于CPHY,支持32路虛擬通道
- 支持獨立的幀起始,幀結(jié)束,行起始,行結(jié)束等數(shù)據(jù)包
- 包含對數(shù)據(jù)類型,像素深度與格式的描述
- 16-bit Checksum錯誤偵測
- 6-bit 錯誤發(fā)現(xiàn)與糾正
LLP支持兩種包結(jié)構(gòu),分別為長包與短包,包格式與長短取決于具體的物理層。無論何種類型的包,均由SoT信號開始,EoT信號結(jié)束。
以DPHY為例來分析具體的協(xié)議格式,DPHY長包主要由包頭、包負(fù)載、包尾三部分組成,具體如下圖:
短包協(xié)議格式如下圖:
其中Data Type取值為0x10-0x37(見下圖),虛擬通道由4bit構(gòu)成,高2bit來自VCX,低2bit來自Data ID的bit6、7。
上圖可以發(fā)現(xiàn),短包有兩類Data Type
- 同步短包:用于對幀或行起停進(jìn)行標(biāo)識,起到同步作用。
- 通用短包:通用短包數(shù)據(jù)類型的目的是提供一種在數(shù)據(jù)流中打開/關(guān)閉快門、觸發(fā)閃光燈等的機制。16bit短包數(shù)據(jù)域用于傳輸約定好的信息,實現(xiàn)對一些自定義功能的控制。
虛擬通道(virtual Channel ID)
虛擬通道的作用是在交織傳輸?shù)牟煌瑪?shù)據(jù)流中,區(qū)分出各個數(shù)據(jù)流所屬的邏輯上的通道,以max9286為例,來自4路同軸線的相機數(shù)據(jù)可以設(shè)置為不同的虛擬通道,這樣,在SOC側(cè)CSI模塊處理時,可以根據(jù)不同的虛擬通道ID將每個攝像頭的數(shù)據(jù)轉(zhuǎn)發(fā)至各自的內(nèi)存區(qū)域,這樣就能從4個地址獲得單獨的4個圖像。若不使用虛擬通道,則4路數(shù)據(jù)就無法區(qū)分了(當(dāng)然max9286內(nèi)部能夠?qū)?個圖像拼接為一個大圖輸出)。
虛擬通道由包頭中的VC與VCX構(gòu)成,對于DPHY來說,由4bit組成,最高16路虛擬通道,高2bit來自VCX,低2bit來自VC。
數(shù)據(jù)類型(Data Type)
數(shù)據(jù)類型表明了負(fù)載數(shù)據(jù)的格式和內(nèi)容,上文提到,根據(jù)長短包的不同,數(shù)據(jù)類型共有8種不同的分類。短包數(shù)據(jù)類型的詳細(xì)信息在上文已經(jīng)介紹了,這里說明下長包的5種數(shù)據(jù)類型,詳見下表:
像素字節(jié)轉(zhuǎn)換
圖像數(shù)據(jù)在LLP傳輸時需要以字節(jié)流的形式進(jìn)行,應(yīng)用層來的像素數(shù)據(jù)需要根據(jù)具體的像素格式進(jìn)行轉(zhuǎn)換,以YUV422 8bit為例:
YUV422 8bit是以UYVY的順序進(jìn)行傳輸?shù)?#xff0c;見下圖:
YUV422 8bit的最小包傳輸單元如下表,其他長度的包長度必須為最小單元的整數(shù)倍:
為什么最小包單元是2pixels、4bytes、32bit而不是1pixels、2bytes、16bit呢?這是因為YUV422 8bit中兩個Y分量共用一個UV分量,因此一Packet至少需要攜帶2個pixels的信息。
像素至字節(jié)的轉(zhuǎn)換過程如下,從CSI-2標(biāo)準(zhǔn)文檔提供的示意圖可以看出,相對與原數(shù)據(jù)其實也沒做啥轉(zhuǎn)換,就統(tǒng)一了數(shù)據(jù)在LLP傳輸時高底位的發(fā)送順序。
總結(jié)
以上是生活随笔為你收集整理的MIPI CSI-2学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gf(2 4)有限域的乘法c语言实现,有
- 下一篇: Windows7不再卡五叶草,更新了bo