MIPI CSI-2學習

CSI(Camera Serial Interface)定義了攝像頭外設與主機控制器之間的接口,旨在確定攝像頭與主機控制器在移動應用中的標準。


關鍵詞描述

縮寫解釋
CCICamera Control Interface(物理層組件,通常使用I2C或I3C進行通信)
CILControl and Interface Logic
DTData Type(數據格式,YUV422、RGB888等)
SoTStart of Transmission(傳輸啟動信號)
EoTEnd of Transmission(傳輸停止信號)
FSFrame Start(一幀畫面開始標志)
FEFrame End(一幀畫面結束標志)
LSLine Start(一行像素開始標志)
LELine End(一行像素結束標志)
PHPacket Header(包頭)
PFPacket Footer(包尾)
HSHigh SPeed(DPHY的傳輸模式之一)
LPLow Power(DPHY的傳輸模式之一)
LP-RXLow-Power Receiver(DPHY LP接收器)
LP-TXLow-Power Transmitter(DPHY LP發送器)
HS-RXHigh-Speed Receiver(DPHY HS接收器)
HS-TXHigh-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管理層。

csi2_layer

  • 應用層(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

上圖表明使用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 Module

上圖為單個Lane模塊的內部組成,包含了CIL(Lane控制器與借口邏輯器),LP驅動器,HS驅動器,LP沖突檢測。CIL負責控制各個驅動器的工作狀態,使得Dp、Dn的工作狀態可以在HS與LP之間進行切換。

Line Level

處于HS模式下,差分信號電平擺幅約為200mV;處于LP模式下,單端信號電平擺幅約為1.2V。
在LP模式下,根據各個Line的電平可以確定當前Lane的State。

Data Lane

Lane State

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_Scop

上圖為完整的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

EoT_Scop

EoT流程如下:

發送方接收方
完成負載數據發送接收負載數據
發送完最后一個bit后立刻翻轉差分線狀態,并保持THS-TRAIL時間_
關閉HS-TX,使能LPTX,并進入LP11狀態_
  • 進入Escape模式:LP11->LP10->LP00->LP01->LP00
    進入Escape模式后,則可以通過發送8bit命令執行相應的功能,下表列出了可用的Escape命令:
功能命令類型命令
Low-Power Data Transmissionmode11100001
Ultra-Low Power Statemode00011110
Undefined-1mode10011111
Undefined-2mode11011110
Reset-TriggerTrigger01100010
Unknown-3Trigger01011101
Unknown-4Trigger00100001
Unknown-5Trigger10100000
  1. Low-Power Data Transmission

    LPDT功能下,數據能夠在LP模式下進行低速傳輸,此時Clock的時鐘需要小于20MHz。

    LPDT

  上圖描述了LPDT下傳輸2Byte數據的時序。
  1. Reset-Trigger

    Reset-Trigger是發送方與接收方相互對應的通信形式,如果輸入命令模式與Reset-Trigger命令相匹配,則在接收端通過邏輯PPI向協議標記一個
    
  2. Ultra-Low-Power

    
    發送方發送ULPS碼后,接收方則可以根據這個信號進行自己的LowPower處理。在
    ULPS期間,Line始終處于LP00狀態。若出現持續T<sub>WAKEUP</sub>的Mark-1狀態后緊接著Stop狀態則退出ULPS。
    

Clock Lane

與Data Lane一樣,Clock 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能否成功捕捉到有效的數據取決于發送與接收兩方之間的時序,下表列出了收發雙方的所有時序參數,其中接收方的時序應該能夠兼容發送方的時序參數。
timing_param1

timing_param2

notes


多Lane的分發與合并

當某些應用場景需要的帶寬超過了單Lane所能提供的帶寬或者為了降低Clock頻率的情況下,則可以通過拓展Data Lane來滿足要求。

下圖展示了數據流在單lane與多lane的情況下,發送方內部的Lane Distribution Function(LDF)對來自LLP層的字節數據流的分發過程。

lane_distribution

對于接收方,對應的擁有一個Lane Merging Function(LMF),用于將PHY層的多lane的數據合并為LLP層所需的字節流。

lane_merging

在多Lane(定為N)傳輸的情況下,對于一幀數據,其數據長度不是Lane數量(N)的整數倍的情況下,則倒數第二組數據發出后會剩下少于N的字節需要發送,此時LDF會將無數據分配的Lane置為“Invalid Data”直接進入EoT。

下圖展示了分發后的數據在2個Lane上的傳輸情況(包含兩種情況)

lane_dis_dphy

多Lane合并就是多Lane分發的相反過程,這里就不在贅述。

低級協議(Low Level Protocol)

LLP是基于字節,以包為單元的協議,支持長短兩種包格式。

  • 傳輸任意數據(負載獨立)
  • 以字節為數據元
  • 對于DPHY,支持16路虛擬通道;對于CPHY,支持32路虛擬通道
  • 支持獨立的幀起始,幀結束,行起始,行結束等數據包
  • 包含對數據類型,像素深度與格式的描述
  • 16-bit Checksum錯誤偵測
  • 6-bit 錯誤發現與糾正

LLP支持兩種包結構,分別為長包與短包,包格式與長短取決于具體的物理層。無論何種類型的包,均由SoT信號開始,EoT信號結束。

llp_overview

以DPHY為例來分析具體的協議格式,DPHY長包主要由包頭、包負載、包尾三部分組成,具體如下圖:
llp

短包協議格式如下圖:

llp_s

其中Data Type取值為0x10-0x37(見下圖),虛擬通道由4bit構成,高2bit來自VCX,低2bit來自Data ID的bit6、7。

data_type_class

上圖可以發現,短包有兩類Data Type

  • 同步短包:用于對幀或行起停進行標識,起到同步作用。

sync_short

  • 通用短包:通用短包數據類型的目的是提供一種在數據流中打開/關閉快門、觸發閃光燈等的機制。16bit短包數據域用于傳輸約定好的信息,實現對一些自定義功能的控制。

generic_short

虛擬通道(virtual Channel ID)

虛擬通道的作用是在交織傳輸的不同數據流中,區分出各個數據流所屬的邏輯上的通道,以max9286為例,來自4路同軸線的相機數據可以設置為不同的虛擬通道,這樣,在SOC側CSI模塊處理時,可以根據不同的虛擬通道ID將每個攝像頭的數據轉發至各自的內存區域,這樣就能從4個地址獲得單獨的4個圖像。若不使用虛擬通道,則4路數據就無法區分了(當然max9286內部能夠將4個圖像拼接為一個大圖輸出)。
虛擬通道由包頭中的VC與VCX構成,對于DPHY來說,由4bit組成,最高16路虛擬通道,高2bit來自VCX,低2bit來自VC。

vc

數據類型(Data Type)

數據類型表明了負載數據的格式和內容,上文提到,根據長短包的不同,數據類型共有8種不同的分類。短包數據類型的詳細信息在上文已經介紹了,這里說明下長包的5種數據類型,詳見下表:

data_format

像素字節轉換

圖像數據在LLP傳輸時需要以字節流的形式進行,應用層來的像素數據需要根據具體的像素格式進行轉換,以YUV422 8bit為例:
YUV422 8bit是以UYVY的順序進行傳輸的,見下圖:

yuv422_8bit

YUV422 8bit的最小包傳輸單元如下表,其他長度的包長度必須為最小單元的整數倍:
yuv_packet

為什么最小包單元是2pixels、4bytes、32bit而不是1pixels、2bytes、16bit呢?這是因為YUV422 8bit中兩個Y分量共用一個UV分量,因此一Packet至少需要攜帶2個pixels的信息。

像素至字節的轉換過程如下,從CSI-2標準文檔提供的示意圖可以看出,相對與原數據其實也沒做啥轉換,就統一了數據在LLP傳輸時高底位的發送順序。

pixel_byte

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253792.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253792.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253792.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

internet網絡 checksum校驗和計算方法

http://hi.baidu.com/%CE%C4%B3%AD%B9%AB/blog/item/7d9a4e08f82d72b32eddd4cb.html

最有效的創建大數據模型的6個技巧

數據建模是一門復雜的科學&#xff0c;涉及組織企業的數據以適應業務流程的需求。它需要設計邏輯關系&#xff0c;以便數據可以相互關聯&#xff0c;并支持業務。然后將邏輯設計轉換成物理模型&#xff0c;該物理模型由存儲數據的存儲設備、數據庫和文件組成。 歷史上&#xff…

【轉】Castle Windsor之組件注冊

【轉】Castle Windsor之組件注冊 注冊方式較多&#xff0c;大體有這么幾種&#xff0c;學習得比較粗淺&#xff0c;先記錄&#xff1a;1、逐個注冊組件即對每個接口通過代碼指定其實現類&#xff0c;代碼&#xff1a;container.Register(Component.For<IMyService>() //接…

Verilog 補碼加法溢出判斷及處理

補碼加法運算溢出判斷三種方法&#xff1a; 一、符號位判斷 Xf、Yf分別兩個數的符號位,Zf為運算結果符號位。 當Xf Yf 0&#xff08;兩數同為正&#xff09;,而Zf1(結果為負)時,負溢出&#xff1b;當出現Xf Yf 1&#xff08;兩數同為負&#xff09;,而Zf0&#xff08;結果為…

Android繪制(三):Path結合屬性動畫, 讓圖標動起來!

Android繪制(一):來用shape繪出想要的圖形吧! Android繪制(二):來用Path繪出想要的圖形吧! 目錄 效果圖前言繪制屬性動畫最后效果圖 不廢話, 直接上效果圖, 感興趣再看下去. 其實不單單是效果圖演示的, 運用熟練的話各種圖標之間都是可以切換的. 前言 之前的文章也說了, path還…

{{view 視圖層}}微信小程序

微信小程序 view 視圖層//自學 1.數據綁定 數據綁定WXML中的動態數據均來自對應Page的data。 簡單綁定數據綁定使用"Mustache"語法&#xff08;雙大括號&#xff09;將變量包起來&#xff0c;可以作用于&#xff1a; 內容<view> {{ message }} </view>Pa…

CMOS圖像傳感器——概述

一、概述 圖像傳感器是把光學圖像信息轉換成電信號的器件。圖像傳感器是隨著電視技術在20世紀30年代發展起來的,早期圖像傳感器技術的最重要貢獻在于建立了掃描(Scan)的概念,用掃描的方法把二維空間平面上的光電信息離散成行(Line)和幀(Frame),然后按空間順序讀出形成…

nand flash壞塊管理OOB,BBT,ECC

0.NAND的操作管理方式 NAND FLASH的管理方式&#xff1a;以三星FLASH為例&#xff0c;一片Nand flash為一個設備(device)&#xff0c;1 (Device) xxxx (Blocks)&#xff0c;1 (Block) xxxx (Pages)&#xff0c;1(Page) 528 (Bytes) 數據塊大小(512Bytes) OOB 塊大小(16Byte…

小白學git2

你已經在本地創建了一個Git倉庫后&#xff0c;又想在GitHub創建一個Git倉庫&#xff0c;并且讓這兩個倉庫進行遠程同步&#xff0c;這樣&#xff0c;GitHub上的倉庫既可以作為備份&#xff0c;又可以讓其他人通過該倉庫來協作&#xff0c;真是一舉多得。 首先&#xff0c;登陸G…

[LeetCode_5] Longest Palindromic Substring

LeetCode: 5. Longest Palindromic Substring class Solution { public: //動態規劃算法string longestPalindrome(string s) {int n s.length();int longestBegin 0;int maxLen 1;bool table[1000][1000] {false};for (int i 0; i < n; i) {table[i][i] true;}//對角…

冒泡排序java

一、最簡單粗暴的排序 思想為&#xff1a;讓每一個關鍵字都和它后邊的每一個關鍵字比較&#xff0c; 如果大則交換&#xff0c;這樣第一個位置的關鍵字在一次循環后一定變為最小值。 1 package demo01;2 3 class BubbleSort01 {4 public static void main(String[] args) {…

CMOS圖像傳感器——工作原理

一、像素陣列結構 一般像素陣列是由水平方向的行( Row ) 和垂直方向的列(Column)正交排列構成的。像素排列的最基本設計原則是:攝像器件像素排列的坐標,必須在顯示的時候能夠準確地還原在圖像原來的相對位置上。在大多數情況下,每個像素中心線在行的方向和列的方向,即…

追尋終極數據庫 - 事務/分析混合處理系統的交付挑戰 (3)

挑戰&#xff1a;支持多個存儲引擎 以下內容并不是新發現&#xff1a;行優化存儲適用于OLTP和運營工作負載&#xff0c;而列存儲適用于BI和分析工作負載。頻繁寫入的工作負載適用于行式存儲。對Hadoop而言&#xff0c;Hbase適合低延遲工作負載&#xff0c;列式ORC文件或Parquet…

hibernate快速入門

第一步:下載Hibernate的開發包:  http://sourceforge.net/projects/hibernate/files/hibernate3 第二步:Hibernate框架目錄結構:  documentation :Hibernate文檔  lib :Hibernate開發jar包    bytecode :操作字節碼jar包.    jpa :Hibernate的實現jpa規范.   …

U-boot給kernel傳參數和kernel讀取參數—struct tag

U-boot 會給 Linux Kernel 傳遞很多參數&#xff0c;如&#xff1a;串口&#xff0c; RAM &#xff0c; videofb 等。 而 Linux kernel 也會讀取和處理這些參數。兩者之間 通過 struct tag 來傳遞參數。 U-boot 把要傳遞給 kernel 的東西保存在 struct tag 數據結構中&#xf…

異步FIFO設計(Verilog)

FIFO&#xff08;First In First Out&#xff09;是異步數據傳輸時經常使用的存儲器。該存儲器的特點是數據先進先出&#xff08;后進后出&#xff09;。其實&#xff0c;多位寬數據的異步傳輸問題&#xff0c;無論是從快時鐘到慢時鐘域&#xff0c;還是從慢時鐘到快時鐘域&…

python中RabbitMQ的使用(路由鍵模糊匹配)

路由鍵模糊匹配 使用正則表達式進行匹配。其中“#”表示所有、全部的意思&#xff1b;“*”只匹配到一個詞。 匹配規則&#xff1a; 路由鍵&#xff1a;routings [ happy.work, happy.life , happy.work.teacher, sad.work, sad.life, sad.work.teacher ] "#"&am…

數據倉庫事實表分類[轉]

1&#xff09;在數據倉庫領域有一個概念叫Transaction fact table&#xff0c;中文一般翻譯為“事務事實表”。 事務事實表是維度建模的數據倉庫中三種基本類型事實表中的一種&#xff0c;另外兩種分別是周期快照事實表和累積快照事實表。 事務事實表與周期快照事實表、累積快…

嵌入式系統文件系統比較 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs

Linux支持多種文件系統&#xff0c;包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等&#xff0c;為了對各類文件系統 進行統一管理&#xff0c;Linux引入了虛擬文件系統VFS(Virtual File System)&#xff0c;為各類文件系統提供一個統一的操作界面和應用編程接口。 …