從 sensor 輸出到 SOC mipi 接收
cmos sensor 是圖像採集模塊,sensor 採集到圖像數據之後,常見的是通過 mipi 接口輸出數據到 soc,那麼,圖像通過 mipi 接口輸入到 soc,這個過程是怎樣的呢,下面一起來看看。
上面的框圖,可以比較清晰的描繪了 sensor 和 soc 的數據關係,soc 通過 CCI (Camera Control Interface) 控制 sensor 寄存器,配置正確,sensor 將會通過 mipi 接口輸出圖像數據。
控制信息是 soc 通過 CCI 發送到 sensor,CCI 接口一般的就是 I2C 接口,這裏不詳細描述,主要關注一下 mipi 這塊是怎麼發送、接收數據的。
mipi 以 mipi CSI-2 協議爲例進行主要的介紹和學習。上圖是 mipi CSI-2 的層定義框圖:
-
PHY Layer:物理層主要是指定傳輸介質、輸入/輸出電路和從串行比特流中捕獲 1 和 0 的時鐘機制。同時,該層還包含了開始傳輸信號(SoT)和結束傳輸信號(EoT)以及其他的一些傳輸信息、數據的一些同步機制。
-
Protocol Layer:協議層又是有多個層組成的,每層的作用都不一樣。mipi CSI-2 協議允許同一個 mipi 接口接收多條數據流,協議層將指定數據流是如何交織、提取,以便正確的解析、獲取多條數據流。
- Pixel/Byte Packing/Unpacking Layer:發送端,在這一層,將上層的像素數據(6bit~24bit)打包爲字節數據發送;而接收端,將底層協議層的字節解包爲像素傳遞到上層。
- Low Level Protocol:低級別協議(LLP),包括爲在 SoT 和 EoT 信號之間傳輸的串行數據建立 bit 和字節的同步,並將數據傳遞到下一層。LLP 的最小數據粒度是一個字節。
- Lane Management:lane 管理層,CSI-2 可以根據上層應用的帶寬要求選擇數據通道的數量,發送端可以將 LLP 傳出的數據流分發到一個或多個通道;而接收端,則是從多個通道中接收字節數據併合併爲一個數據流,恢復原始的流序列再傳遞給 LLP。
協議層內的數據組織爲包的形式,發送端將頭信息和一些可選的錯誤檢查信息附加到 LLP 傳輸的數據上;接收端,在 LLP 提取、解析附加的信息。
-
Application Layer:應用層,將需要通過 mipi 協議發送、接收的數據都在該層進行處理。
Physical Layer
CSI-2 實現的物理層有多個單向 data lane 和一個 clk lane 組成,發送端和接收端都必須支持 clk lane 的連續時鐘模式,並可選支持非連續時鐘模式。
- 連續時鐘模式:數據包傳輸間隔,clk lane 保持在高速模式;
- 非連續時鐘模式:數據包傳輸間隔,clk lane 進入 LP-11 狀態;
注意:SoT 和 EoT 信號都是在物理層插入的。
相關縮寫名詞:
- HS-RX:高速接收器
- HS-TX:高速發送器
- LP-RX:低功耗接收器
- LP-TX:低功耗發送器
Start-of-Transmission ( SoT )
在發送請求之後,data lane 將會通過開始傳輸信號(SoT)退出停止狀態,進入高速模式,這個過程相應的變化序列如下:
TX Side | RX Side |
---|---|
退出停止狀態 ( LP-11 ) | 檢測停止狀態 |
進入 HS-Rqst 狀態 ( LP-01 ),並處於該狀態的時間間隔爲 TLPX | 檢測到 lane 從 LP-11 轉變爲 LP-01 |
進入 Bridge 狀態 ( LP-00 ),並處於該狀態的時間間隔爲 THS-PREPARE | 檢測到 lane 從 LP-01 轉變爲 LP-00,間隔 TD-TERM-EN 時間之後將使能傳輸 |
同時退出低功耗模式,進入高速模式 | |
處於 HS-0 狀態,時長爲 THS-ZERO | 使能 HS-RX 並等待 THS-SETTLE,以忽略轉換狀態 |
開始從數據流中等待同步序列 | |
時鐘上升邊緣插入 HS 同步序列 ‘00011101’ | |
識別到同步序列 ‘00011101’ | |
高速模式開始傳輸有效數據 | |
接收到有效數據 |
End-of-Transmission ( EoT )
在數據完成傳輸時,通過結束傳輸(EoT)過程,數據通道退出高速模式並進入停止狀態,這個過程狀態變化如下:
TX Side | RX Side |
---|---|
傳輸數據 | 接收到數據 |
在完成最後一個字節數據的傳輸之後立即切換到不同的狀態,並保持該狀態的時間間隔爲 THS-TRAIL | |
關閉 HS-TX,啓用 LP-TX,並在 THS-EXIT一段時間內處於停止狀態 ( LP-11 ) | 檢測到 lane 狀態進入停止狀態 ( LP-11 ),關閉傳輸功能 |
忽略 THS-SKIP一段時間內的 lane 變化,以忽略轉換狀態 | |
檢測有效數據的最後一次轉換,確定最後一次有效數據並忽略包尾序列 |
Lane Management
CSI-2 支持多 lane 同時發送數據,Lane Management 處於 Phy Layer 與 LLP 之間。在發送端,Lane Management 可以發送任意字節長度數據,緩衝 N 個字節(N = lane 數),然後在 N lane 中並行發送 N 個字節數據。在發送數據前,所有 lane (包括 clk lane、data lane)並行發送 SoT 信號,以表示將開始發送數據包的第一個字節。
上圖清晰的描述了 mipi lane 在傳輸數據時的傳輸序列是怎樣的?每 lane 每次發送一個字節,發送前後分別有 Sot、Eot 信號。如果是發送短包數據,假設說配置的 mipi data lane 爲 4,而發送的數據一共只有兩個字節,這次,通過 lane 1、lane 2發送數據,而 lane 3、lane 4 保持 LPS 狀態。
Low Level Protocol
低級別協議(LLP)是面向字節、基於包的協議,它支持使用長、短數據包格式傳輸任意數據。LLP 支持以下特性:
- 低位先發送,即 LSB 先行;
- 支持同一鏈路包含四個交叉的虛擬通道;
- 具備幀開始、幀結束、行開始、行結束等特殊數據包;
- 支持應用層設置數據的類型,像素深度和格式等;
- 用於錯誤檢測的 16bit 校驗碼
下圖是 LLP 數據包的打包示意圖。
LLP 通信定義了長短包,每個包,都是從 LPS 退出,然後傳輸 SoT 信號表示數據包的開始,傳輸 EoT 信號,隨後進入 LPS,表示數據包結束。
協議包格式
長數據包格式
下圖是長數據包格式結構圖。
長數據包的數據類型由 0x10 到 0x37 標識,一個長數據包由 3 個元素組成:一個 32 位的數據包報頭(PH),一個應用程序特定的可變長度的有效數據載荷和一個 16 位的數據報尾(PF)。而數據包報頭又是由一個 8 位的數據類型標識符,一個 16 位的有效數據長度(字節)計數字段和一個針對報頭的 8 位的糾錯碼 ECC 組成;報尾則是一個 16 位的校驗和。
短數據包格式
下圖是短數據包格式結構圖。
短數據包的數據類型標識符由 0x00 到 0x0F 標識,短數據包僅包含報頭而沒有報尾。報頭中的計數字段替換爲短數據包的數據內容。對短數據包的標識符爲幀同步數據類型時,短數據包數據字段爲幀號,標識符爲行同步數據類型時,短數據包數據字段爲行號。其他的通用短數據包數據類型,數據字段內容由用戶定義。
數據標識符
數據標識符字節包含虛擬通道標識符(VC)值和數據類型(DT)值,如下圖所示。虛擬通道標識符包含在數據標識符字節的兩個 MS 位中。數據類型值包含在數據標識符字節的六個 LS 位中。
虛擬通道標識符 — VC
爲什麼會有虛擬通道標識符這個信息呢?增加虛擬通道標識符是爲了可以在使用一個物理接口同時(宏觀上的同時)爲不同的數據流提供單獨的通道(數據交織傳輸)。虛擬通道標識符位於數據標識符字節的前兩位,mipi 接收端將會檢測虛擬通道標記符,並將交織數據流解交織到適當的通道中,mipi CSI-2 最多支持 4 路通道有效數據輸入。邏輯通道的原理如下圖所示。
下圖是多通道數據流示例。
數據類型 — DT
數據類型值將會指定有效負載數據的格式和內容,最多有 64 個支持的數據類型。
Data Type | Description |
---|---|
0x00 to 0x07 | 用於同步的短數據包數據類型 |
0x08 to 0x0F | 通用短數據包數據類型 |
0x10 to 0x17 | 通用長數據包數據類型 |
0x18 to 0x1F | YUV Data |
0x20 to 0x27 | RGB Data |
0x28 to 0x2F | RAW Data |
0x30 to 0x37 | 用戶自定義 |
0x38 to 0x3F | 保留使用 |
對於 YUV、RGB 和 RAW 格式的數據,一個長數據包應包含一行圖像數據。
同步作用的短數據包數據類型碼
Data Type | Description |
---|---|
0x00 | 幀開始碼 |
0x01 | 幀結束碼 |
0x02 | 行開始碼 |
0x03 | 行結束碼 |
0x04 to 0x07 | 保留使用 |
每個圖像幀必須以包含幀開始碼的幀開始(FS)包開始,FS 包後面應該跟着一個或多個包含圖像數據的長包和零個或多個包含同步碼的短包,每個圖像幀應以包含幀結束碼的幀結束(FE)包結束。對於 FS 和 FE 同步數據包,短數據包數據字段應包含一個 16 位幀號,對應於同一幀的 FS 和 FE 同步包,該幀號應該是相同的。
對於行開始(LS)和行結束(LE)同步包,短包數據字段應包含一個 16 位的行號,對於同一行的 LS 和 LE 數據包,該行號應該是相同的,同時需要注意的是,行號是邏輯行號,不一定等於物理行號。
報頭 ECC
數據標識符和數據包有效長度計數值的正確解釋對整個數據包結構至關重要,所以在報頭增加糾錯碼 ECC。ECC 可以對數據標識符和數據包計數值的 bit 錯誤進行糾正,最多可以檢測到 2 bit 的錯誤。
具體的 ECC 計算,網上搜索即可,這裏不詳細介紹。
行幀示意圖
下面各圖清晰的描述了多個數據包組成的數據幀示例,VVALID 爲幀有效信號,HVALID 爲行有效信號,而 DVALID 爲數據有效信號。該部分只是幫助理解幀開始、幀結束和行開始、行結束的行爲,不構成 mipi CSI-2 規範的一部分。
從多個數據包看幀示例。
從單個數據包看幀示例。
從數據包中理解 Blanking 。
交織傳輸示意圖
交織傳輸數據,有兩種方式,分別是利用數據類型值標記不同的數據包和利用虛擬通道標識符值標記數據包。
下圖是利用數據類型值標記不同數據包的傳輸示意圖,都是處於同一個虛擬通道進行傳輸的,僅僅是 DT 值不一樣,通過該值分辨不同的數據包。
而下圖則是通過虛擬通道標識符值傳輸不同的數據包,他們處於不同的虛擬通道進行傳輸,通過 VC 值分辨不同的數據包。
幀數據格式
關於 YUV、RGB 和 RAW 的格式要求,詳細的可以看 mipi 規格書,有較詳細的規範要求,字節的排序以及包的最小長度都有要求。
總結
通過上述 mipi CSI-2 協議的簡單學習,可以知道什麼呢?學習這個有什麼用呢?
- 通過了解 mipi 的傳輸協議,可以理解爲什麼有時候移植 cmos sensor 時,示波器測量 mipi 有信號輸出,但是 SOC 接收不到數據,這個時候可以檢查 mipi 時序,確認從低功耗模式切換到高速模式時的時序是否匹配。
- 通過理解 mipi 協議的虛擬通道標識符 ( VC ),可以更好的理解 HDR sensor 的長短曝光幀輸出過程。
- 還可以使用 mipi 傳輸其他的數據呢(一本正經的胡說八道,想不到還有什麼用了)。
關於 PHY 的其他信息,可查看我的另一篇博文 csi mipi信號解析 ,本文參考自 mipi CSI-2 規範。