據(jù)通路設(shè)計)
1. 從一顆攝像頭到SoCGMSL2鏈路里MAX9295/9296到底在干什么做車載視覺或者工業(yè)多路相機方案的兄弟大概率都繞不開GMSL2這條鏈路。一頭是掛在車外或者機械臂上的圖像傳感器另一頭是座艙域控或者邊緣計算盒子里的SoC。中間隔著十幾米同軸線還要扛住電磁干擾、溫度漂移和振動。這時候MAX9295和MAX9296這對芯片就登場了——前者做串行化把并行的MIPI信號塞進一根同軸線后者做解串行化把同軸線上的高速串流還原成SoC能吃的MIPI CSI-2信號。很多人第一次看MAX9295/9296的數(shù)據(jù)手冊會被里面一堆縮寫砸暈MIPI PHY模式、D-PHY、C-PHY、CSI-2、雙鏈路、像素模式、隧道模式……尤其是當你要把兩顆甚至四顆傳感器掛到同一對串行解串器上時數(shù)據(jù)通路怎么走、PHY用哪種模式、帶寬夠不夠這些問題不搞清楚板子畫出來就是一堆廢銅爛鐵。這篇內(nèi)容就是把我自己在實際項目里反復(fù)翻手冊、調(diào)寄存器、抓眼圖踩出來的經(jīng)驗整理出來。核心圍繞GMSL2-CSI2這條鏈路把MAX9295/9296支持的4種MIPI PHY模式講透再把數(shù)據(jù)通路的設(shè)計邏輯拆開。適合正在選型、畫原理圖、調(diào)通鏈路或者準備做多路相機聚合的硬件工程師和底層驅(qū)動工程師。讀完你至少能搞清楚為什么有些配置能跑4K有些連1080p都掉幀為什么同樣兩顆9295一顆能出圖另一顆死活沒數(shù)據(jù)以及MIPI PHY模式選錯會帶來什么后果。2. 先搞清楚MAX9295和MAX9296的角色分工2.1 串行器MAX9295把MIPI“打包”上同軸MAX9295是一顆GMSL2串行器通常放在相機模組端緊挨著圖像傳感器。它的輸入側(cè)是MIPI CSI-2接口接收傳感器輸出的高速差分信號輸出側(cè)是GMSL2串行鏈路通過一根50歐姆同軸線或者屏蔽雙絞線把數(shù)據(jù)送到遠端。你可以把它理解成一個“打包工”把傳感器吐出來的多路MIPI lane數(shù)據(jù)、控制信號、I2C通信、甚至GPIO狀態(tài)全部復(fù)用到一條高速串行流里。這里有個關(guān)鍵點MAX9295的MIPI輸入側(cè)支持多種PHY配置。它可以根據(jù)傳感器的輸出形態(tài)靈活選擇用幾路lane、跑多高的速率、是D-PHY還是C-PHY。這個選擇直接決定了后面整條鏈路的帶寬上限。很多人在選型時只看傳感器能出多少像素卻忽略了9295輸入側(cè)的PHY能力結(jié)果傳感器能出4K但9295配不出對應(yīng)的MIPI模式白白浪費。2.2 解串器MAX9296把同軸流“還原”成CSI-2MAX9296是配套的GMSL2解串器放在SoC端。它從同軸線上接收GMSL2串行流解出里面的MIPI CSI-2數(shù)據(jù)、I2C控制通道和GPIO然后把MIPI信號重新驅(qū)動給SoC的CSI-2接收端口。注意9296的輸出側(cè)同樣是MIPI CSI-2也有自己的PHY模式選擇。也就是說整條鏈路里其實有兩段MIPI PHY一段在9295輸入側(cè)一段在9296輸出側(cè)。這兩段的模式可以不同但必須和各自對接的器件匹配。我見過不少項目9295輸入側(cè)配的是D-PHY 4 lane9296輸出側(cè)卻只配了2 lane結(jié)果帶寬直接砍半SoC端頻繁丟幀。所以理解這兩顆芯片各自的PHY能力是設(shè)計數(shù)據(jù)通路的第一步。2.3 為什么不是一顆芯片搞定有人會問為什么不把串行器和解串器集成到一顆芯片里。原因很實際相機模組端空間小、發(fā)熱敏感需要一顆低功耗小封裝的串行器SoC端則可能需要同時接多路相機需要多路解串能力。分開設(shè)計讓兩端可以獨立選型、獨立優(yōu)化。MAX9295和MAX9296這對組合就是這種分工思路下的典型產(chǎn)物。3. 四種MIPI PHY模式D-PHY單鏈路、D-PHY雙鏈路、C-PHY、以及混合模式3.1 D-PHY單鏈路模式最常規(guī)的起點D-PHY單鏈路是MAX9295/9296最基礎(chǔ)的MIPI PHY配置。所謂“單鏈路”指的是芯片內(nèi)部只有一組MIPI PHY通道在工作通常對應(yīng)4條數(shù)據(jù)lane加1條時鐘lane。每條lane的速率可以根據(jù)傳感器和SoC的能力在手冊允許范圍內(nèi)調(diào)整常見的有1.5Gbps、2.5Gbps、3Gbps等檔位。這種模式適合單顆傳感器、分辨率不超過4K30的場景。比如一顆1080p60的傳感器或者一顆2K30的傳感器用D-PHY單鏈路4 lane跑2.5Gbps帶寬綽綽有余。它的好處是配置簡單、寄存器設(shè)置直觀、調(diào)試時抓眼圖也容易。我一般建議新手從這種模式入手先把鏈路跑通再考慮更復(fù)雜的配置。但要注意D-PHY單鏈路模式下9295和9296的lane映射必須一一對應(yīng)。傳感器輸出lane0到9295的lane09296的lane0也要接到SoC的lane0。如果中間有交叉要么在寄存器里做lane swap要么在PCB上直接走對。我遇到過因為PCB走線交叉但寄存器沒配swap導(dǎo)致圖像花屏的案例排查了大半天才定位到。3.2 D-PHY雙鏈路模式一顆芯片吃兩路傳感器D-PHY雙鏈路是MAX9295/9296比較有特色的能力。它允許芯片內(nèi)部把MIPI PHY分成兩組獨立的鏈路每組可以接一顆傳感器。對于MAX9295來說這意味著它可以同時串行化兩路MIPI輸入對于MAX9296來說它可以同時解串出兩路MIPI輸出給SoC。這種模式在環(huán)視、雙目立體視覺、多目拼接等場景里非常實用。比如你要做一顆前視加一顆后視或者左右兩顆側(cè)視用一顆9295加一顆9296就能搞定不需要每路相機都配一對串行解串器。成本降下來PCB面積也省了。但雙鏈路模式有幾個坑必須注意。第一兩路傳感器的分辨率、幀率、MIPI速率最好一致或者接近否則芯片內(nèi)部的分時復(fù)用邏輯會變得復(fù)雜容易出問題。第二雙鏈路模式下總帶寬是共享的GMSL2鏈路的帶寬上限決定了你兩路加起來不能超過這個數(shù)。第三寄存器配置比單鏈路復(fù)雜得多需要分別配置兩組PHY的參數(shù)還要處理兩路數(shù)據(jù)在GMSL2流里的復(fù)用關(guān)系。3.3 C-PHY模式用三線取代四線C-PHY是MIPI聯(lián)盟推出的另一種物理層標準和D-PHY最大的區(qū)別在于D-PHY用一對差分線傳一個bitC-PHY用三根線組成一個trio通過三根線上的電平組合同時傳多個bit。理論上C-PHY的引腳效率更高同樣數(shù)量的引腳能跑出更高的有效帶寬。MAX9295/9296支持C-PHY模式主要是為了對接那些只輸出C-PHY的傳感器或者為了在有限引腳數(shù)下榨出更高帶寬。比如某些高分辨率傳感器用D-PHY需要4 lane才能跑滿但用C-PHY可能3個trio就夠了引腳數(shù)更少PCB布線更容易。不過C-PHY的調(diào)試難度比D-PHY高。它的信號完整性分析更復(fù)雜眼圖形態(tài)和D-PHY完全不同示波器設(shè)置也不一樣。而且不是所有SoC的CSI-2接收端都支持C-PHY選型時必須確認SoC端的能力。我個人的經(jīng)驗是除非傳感器只出C-PHY或者引腳數(shù)實在緊張否則優(yōu)先用D-PHY調(diào)試成本低很多。3.4 混合模式D-PHY和C-PHY混搭的邊界條件所謂混合模式是指MAX9295/9296內(nèi)部不同鏈路可以分別配置成D-PHY和C-PHY。比如鏈路A用D-PHY接一顆傳感器鏈路B用C-PHY接另一顆傳感器。這種模式在雙鏈路配置下才有效單鏈路時沒有意義?;旌夏J降膽?yīng)用場景比較特殊通常是系統(tǒng)里有兩顆不同接口的傳感器一顆只出D-PHY另一顆只出C-PHY又不想用兩顆串行器。這時候混合模式就能派上用場。但它的配置復(fù)雜度最高需要分別處理兩種PHY的時序、均衡、lane映射調(diào)試時建議先用單鏈路分別調(diào)通再合并配置。下面這張表把四種模式的核心差異列出來方便對照選型模式鏈路數(shù)典型lane配置適用場景調(diào)試難度D-PHY單鏈路14 data 1 clk單顆4K30以內(nèi)傳感器低D-PHY雙鏈路2每組2 data 1 clk兩顆1080p/2K傳感器中C-PHY1或23 trio每組高引腳效率場景高混合模式2一組D-PHY一組C-PHY異構(gòu)傳感器共存很高4. 數(shù)據(jù)通路設(shè)計從傳感器到SoC的完整鏈路拆解4.1 帶寬賬要先算清楚設(shè)計數(shù)據(jù)通路的第一步不是畫原理圖而是算帶寬。很多人跳過這一步直接照抄參考設(shè)計結(jié)果發(fā)現(xiàn)自己的傳感器分辨率更高或者幀率更快鏈路跑不動。帶寬計算其實不復(fù)雜核心公式是總帶寬 水平像素數(shù) × 垂直像素數(shù) × 幀率 × 每像素bit數(shù) × 開銷系數(shù)開銷系數(shù)通常取1.1到1.2用來覆蓋消隱區(qū)、協(xié)議頭和CRC等額外數(shù)據(jù)。舉個例子一顆1920×1080、60幀、RAW12的傳感器每像素12bit算下來是1920×1080×60×12×1.15≈1.72Gbps。如果9295輸入側(cè)配4 lane D-PHY每lane跑1.5Gbps總帶寬6Gbps遠遠夠用。但如果換成4K30 RAW123840×2160×30×12×1.15≈3.43Gbps4 lane每lane 1.5Gbps還是夠但余量就不大了。關(guān)鍵是要把9295輸入側(cè)、GMSL2鏈路、9296輸出側(cè)三段帶寬都算一遍取最小值作為系統(tǒng)上限。GMSL2鏈路本身的帶寬通常在3Gbps到6Gbps之間具體取決于芯片型號和配置。如果傳感器帶寬接近GMSL2上限就要考慮壓縮或者降幀。4.2 lane映射與polarity最容易翻車的地方帶寬算完接下來是lane映射。MIPI CSI-2的lane是有順序的傳感器輸出的lane0、lane1、lane2、lane3必須按照正確的順序接到9295的對應(yīng)引腳9296輸出到SoC時也要保持順序。如果PCB走線時為了布線方便做了交叉就必須在寄存器里配置lane swap。polarity是另一個容易忽略的點。MIPI差分對的P和N如果接反了信號極性反轉(zhuǎn)鏈路可能完全不通也可能出現(xiàn)間歇性花屏。有些芯片支持polarity swap可以在寄存器里糾正有些則不支持只能改PCB。我在一個項目里因為連接器引腳定義搞反了P/N導(dǎo)致整批板子返工教訓(xùn)很深刻。建議在原理圖設(shè)計階段就把lane映射和polarity標注清楚PCB layout時嚴格對照。調(diào)試階段如果發(fā)現(xiàn)鏈路不通先用示波器檢查每對差分線的極性再查寄存器配置。4.3 雙鏈路下的數(shù)據(jù)復(fù)用與分離雙鏈路模式下兩路傳感器的數(shù)據(jù)要在GMSL2流里復(fù)用到了9296再分離。這個過程涉及幾個關(guān)鍵配置每路數(shù)據(jù)的虛擬通道號、數(shù)據(jù)類型、以及GMSL2流里的時隙分配。虛擬通道號是CSI-2協(xié)議里的概念用來區(qū)分同一物理鏈路上的不同數(shù)據(jù)流。雙鏈路模式下通常給兩路傳感器分配不同的虛擬通道號SoC端根據(jù)虛擬通道號把數(shù)據(jù)分發(fā)給不同的處理單元。如果虛擬通道號配重了SoC就分不清哪路是哪路圖像會錯亂。時隙分配則決定了GMSL2鏈路上兩路數(shù)據(jù)怎么交替?zhèn)鬏敗?295內(nèi)部會根據(jù)配置把兩路MIPI數(shù)據(jù)打包成GMSL2幀9296再按同樣的規(guī)則拆開。這部分配置在數(shù)據(jù)手冊里有詳細說明但寄存器名稱比較晦澀建議對照手冊的流程圖一步步配。4.4 控制通道與GPIO的透傳除了圖像數(shù)據(jù)GMSL2鏈路還要透傳I2C控制通道和GPIO。I2C通道用來讓SoC配置遠端傳感器的寄存器GPIO則用來傳同步信號、觸發(fā)信號或者狀態(tài)指示。MAX9295/9296支持雙向I2C透傳SoC端的I2C主設(shè)備可以通過9296、GMSL2鏈路、9295最終訪問到傳感器。這個通道的配置相對獨立但要注意地址映射傳感器的I2C地址在SoC端看來會經(jīng)過一層轉(zhuǎn)換需要正確設(shè)置9295和9296的地址翻譯寄存器。GPIO透傳在需要硬件同步的場景里很重要。比如多路相機要做曝光同步SoC端出一個同步信號通過GMSL2鏈路傳到每顆9295再驅(qū)動傳感器。如果GPIO透傳沒配好同步信號傳不過去多路圖像就沒法對齊。5. 寄存器配置實戰(zhàn)從上電到出圖的完整流程5.1 上電時序與復(fù)位釋放MAX9295和MAX9296的上電時序有嚴格要求。一般來說先給芯片供電等電源穩(wěn)定后再釋放復(fù)位引腳。復(fù)位釋放到I2C可訪問之間有一段啟動時間具體數(shù)值在手冊里有標注通常是幾毫秒。如果復(fù)位釋放太早或者電源不穩(wěn)芯片可能進入異常狀態(tài)I2C都讀不到。我的習(xí)慣是在驅(qū)動初始化里加一段延時確保電源和復(fù)位都穩(wěn)定后再開始I2C配置。有些項目為了省時間把延時去掉結(jié)果偶爾出現(xiàn)上電不識別的問題排查起來很麻煩。5.2 9295輸入側(cè)PHY配置9295輸入側(cè)的PHY配置決定了它怎么接收傳感器的MIPI信號。關(guān)鍵寄存器包括lane數(shù)、每lane速率、D-PHY還是C-PHY、連續(xù)時鐘還是非連續(xù)時鐘等。連續(xù)時鐘模式下時鐘lane一直有信號非連續(xù)時鐘模式下時鐘lane在數(shù)據(jù)傳輸間隙會進入低功耗狀態(tài)。大多數(shù)傳感器用連續(xù)時鐘配置時選對應(yīng)模式即可。如果選錯可能出現(xiàn)數(shù)據(jù)能收到但時鐘同步不上的情況。lane速率配置要和傳感器實際輸出匹配。傳感器輸出1.5Gbps9295配成2.5Gbps鏈路可能能通但誤碼率升高配成1Gbps則完全收不到。建議先用傳感器手冊標稱的速率調(diào)通后再嘗試優(yōu)化。5.3 9296輸出側(cè)PHY配置9296輸出側(cè)的PHY配置要和SoC的CSI-2接收端匹配。SoC端支持幾lane、每lane最高多少速率、是否支持C-PHY這些都要提前確認。配置時把9296的輸出lane數(shù)和速率設(shè)成SoC能接受的值。這里有個常見問題SoC端CSI-2接收端可能對時鐘模式有要求比如只支持連續(xù)時鐘。如果9296輸出配成非連續(xù)時鐘SoC就收不到數(shù)據(jù)。這種問題在調(diào)試時表現(xiàn)為SoC端CSI-2控制器報錯但9296側(cè)看起來一切正常容易誤判。5.4 GMSL2鏈路速率與均衡配置GMSL2鏈路的速率和均衡配置決定了同軸線上的信號質(zhì)量。速率越高對線纜質(zhì)量、連接器、PCB走線的要求越高。均衡配置則用來補償線纜損耗通常有多個檔位可選。實際調(diào)試時我會先用較低的鏈路速率把系統(tǒng)跑通確認數(shù)據(jù)通路沒問題后再逐步提高速率到目標值。每次提高速率后觀察誤碼率或者圖像質(zhì)量如果出現(xiàn)花屏或丟幀就回退一檔或者調(diào)整均衡參數(shù)。同軸線長度、線徑、屏蔽質(zhì)量都會影響可達速率手冊里的標稱值是在理想條件下測的實際項目要留余量。6. 調(diào)試中常見的幾類問題與排查思路6.1 鏈路完全不通先查電源和I2C鏈路完全不通時第一步不是懷疑PHY配置而是查電源和I2C。用萬用表量9295和9296的供電引腳確認電壓在手冊范圍內(nèi)用I2C掃描工具看能不能讀到芯片的設(shè)備地址。如果I2C都讀不到后面所有配置都無從談起。電源問題里最常見的是上電時序不對或者電源紋波太大。9295/9296對電源質(zhì)量有一定要求紋波過大會導(dǎo)致內(nèi)部PLL失鎖。建議在電源引腳附近放足夠的去耦電容必要時用LDO而不是DCDC供電。6.2 能識別但不出圖查MIPI PHY和lane映射I2C能讀到芯片但SoC端收不到圖像這時候要查MIPI PHY配置和lane映射。先確認9295輸入側(cè)有沒有收到傳感器的信號可以通過讀取9295的狀態(tài)寄存器看有沒有檢測到MIPI時鐘和數(shù)據(jù)。如果9295側(cè)沒收到問題在傳感器到9295之間如果9295收到了但9296沒輸出問題在GMSL2鏈路或者9296配置。lane映射錯誤是這類問題的常客。用示波器逐對檢查差分線確認P/N極性和lane順序。如果PCB走線交叉了在寄存器里配lane swap如果polarity反了看芯片是否支持polarity swap不支持就只能改板。6.3 出圖但花屏或丟幀查帶寬和信號完整性圖像能出來但花屏、丟幀、間歇性黑屏通常是帶寬不夠或者信號完整性問題。先算帶寬確認傳感器、GMSL2鏈路、SoC三段都沒有超限。如果帶寬接近上限嘗試降幀率或者降分辨率驗證。信號完整性問題要用示波器抓眼圖。D-PHY的眼圖要看差分幅度、上升時間、抖動C-PHY的眼圖形態(tài)不同要看三線之間的時序關(guān)系。眼圖張開度不夠時調(diào)整均衡參數(shù)或者降低鏈路速率。同軸線連接器接觸不良也會導(dǎo)致間歇性花屏檢查連接器是否擰緊、線纜是否受損。6.4 雙鏈路只出一路查虛擬通道和時隙配置雙鏈路模式下只出一路圖像另一路沒有先查虛擬通道號是否配重了。兩路傳感器必須分配不同的虛擬通道號否則SoC會把兩路數(shù)據(jù)當成一路處理。再查時隙配置確認9295和9296的時隙分配一致。如果9295按某種時隙打包9296按另一種時隙拆包數(shù)據(jù)就對不上。還有一種可能是兩路傳感器的速率不一致導(dǎo)致GMSL2鏈路無法同時容納。這種情況下要么統(tǒng)一兩路傳感器的配置要么降低其中一路的速率。7. 幾個實際項目里攢下來的經(jīng)驗第一個經(jīng)驗是關(guān)于PCB布局的。9295通常放在相機模組的小板上空間緊張但MIPI差分對和GMSL2輸出線的布局不能馬虎。MIPI差分對要等長、阻抗控制到100歐姆GMSL2輸出線要控制到50歐姆并且盡量短減少過孔。我見過因為GMSL2輸出線走了太長導(dǎo)致信號衰減過大最后不得不降低鏈路速率的案例。第二個經(jīng)驗是關(guān)于寄存器配置的版本管理。MAX9295/9296的寄存器數(shù)量多不同項目、不同傳感器、不同SoC的配置都不一樣。建議把每套配置做成獨立的配置文件標注好適用的硬件版本和傳感器型號。調(diào)試時如果換了傳感器或者改了板子先確認配置文件是否匹配避免用錯配置浪費時間。第三個經(jīng)驗是關(guān)于溫度的影響。車載或者工業(yè)場景溫度范圍寬高溫下芯片的PLL和均衡性能會變化。實驗室常溫調(diào)通的配置到了高溫環(huán)境可能就不穩(wěn)。建議在高溫箱里做一輪驗證必要時調(diào)整均衡參數(shù)或者降低鏈路速率留余量。第四個經(jīng)驗是關(guān)于I2C透傳的地址沖突。如果系統(tǒng)里有多顆9295每顆的I2C地址要區(qū)分開否則SoC端訪問時會沖突。9295支持通過引腳配置不同的I2C地址硬件設(shè)計時就要規(guī)劃好。軟件上則要注意地址翻譯寄存器的配置確保SoC發(fā)出的地址能正確路由到目標傳感器。最后說一個關(guān)于調(diào)試工具的建議。除了示波器GMSL2鏈路調(diào)試還可以用專門的鏈路分析工具能直接讀出鏈路誤碼率、均衡狀態(tài)、信號質(zhì)量等參數(shù)。這些工具價格不便宜但對于復(fù)雜項目能省很多排查時間。如果預(yù)算有限至少準備一臺帶寬足夠的示波器和一套差分探頭這是調(diào)MIPI和GMSL2的基本裝備。