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