試實(shí)戰(zhàn):FPGA 實(shí)現(xiàn)低功耗接收狀態(tài)機(jī)與常見問題排查)
1. MIPI LP RX 到底在解決什么問題1.1 從一條“沒信號(hào)”的調(diào)試日志說起如果你調(diào)過 MIPI 屏大概率見過這種場(chǎng)景上電、復(fù)位、初始化序列全發(fā)完了示波器上 CLK 有波形但 DATA 線上就是不動(dòng)或者干脆連 LP 狀態(tài)都進(jìn)不去。日志里翻來覆去就一句話——“mipi屏調(diào)試沒信號(hào)”。這時(shí)候很多人第一反應(yīng)是去查屏的初始化代碼改時(shí)序、改延時(shí)、換屏參折騰一圈發(fā)現(xiàn)沒用。真正的問題往往出在LP RX這一側(cè)接收端根本沒有正確識(shí)別到發(fā)送端發(fā)出的低功耗狀態(tài)信號(hào)。MIPI LP RX拆開看就是MIPI 低功耗接收模式。MIPI D-PHY 的物理層把鏈路分成兩種工作狀態(tài)HSHigh Speed高速和 LPLow Power低功耗。HS 用來傳像素?cái)?shù)據(jù)、命令參數(shù)這些大流量內(nèi)容LP 則負(fù)責(zé)控制、同步、進(jìn)入退出 HS 的握手。LP RX 就是接收端在 LP 模式下對(duì)差分線電平狀態(tài)的采樣與解碼邏輯。它不傳圖像但它是圖像能不能傳的前提。這個(gè)內(nèi)容適合誰看三類人一是做嵌入式工業(yè)設(shè)備、用 FPGA 或 SoC 接 MIPI 屏的驅(qū)動(dòng)工程師二是調(diào)試 MIPI 攝像頭、DVP 攝像頭轉(zhuǎn) MIPI 鏈路的硬件工程師三是剛接觸 MIPI 協(xié)議、被 LP/HS 切換搞得一頭霧水的初學(xué)者。它解決的問題很具體讓接收端正確識(shí)別 LP 狀態(tài)從而完成 HS 進(jìn)入握手最終點(diǎn)亮屏幕或拿到圖像數(shù)據(jù)。1.2 LP 模式不是“慢速版 HS”很多人有個(gè)誤解覺得 LP 就是 HS 降速。完全不是。LP 和 HS 在電氣特性上是兩套東西。HS 是差分小信號(hào)共模電壓低擺幅大概 100mV 到 300mV終端匹配 100 歐姆。LP 則是單端大信號(hào)0 到 1.2V 邏輯電平兩條線各自獨(dú)立判斷高低不靠差分。也就是說LP RX 的輸入級(jí)和 HS RX 的輸入級(jí)在硬件上就是分開的切換靠的是內(nèi)部的狀態(tài)機(jī)。這就解釋了為什么“CLK 有波形但 DATA 不動(dòng)”——你看到的可能是 HS 時(shí)鐘但 LP 狀態(tài)機(jī)沒走完DATA 線還鎖在 LP-11 或者卡在某個(gè)中間態(tài)。LP RX 要做的就是持續(xù)監(jiān)測(cè) Dp 和 Dn 兩條線的單端電平組合出 LP-00、LP-01、LP-10、LP-11 四種狀態(tài)再根據(jù)狀態(tài)跳變序列判斷發(fā)送端想干什么。提示LP 四種狀態(tài)里L(fēng)P-11 是空閑態(tài)LP-00 是進(jìn)入 HS 的起點(diǎn)LP-01 和 LP-10 用于總線翻轉(zhuǎn)和雙向通信。接收端如果分不清這四個(gè)狀態(tài)后面全免談。1.3 為什么現(xiàn)在 LP RX 越來越受關(guān)注翻一下最近的搜索熱詞就明白了mipi c-phy s參數(shù)、st7701s mipi、rk3588 mipi 輸入1080i信號(hào)、紫光同創(chuàng)fpga驅(qū)動(dòng)mipi、mipi和lvds。這些詞背后是同一個(gè)趨勢(shì)——MIPI 正在從手機(jī)屏往工業(yè)、車載、FPGA 方案里滲透。以前 MIPI 是手機(jī) SoC 的專屬屏廠和主控廠把 LP/HS 時(shí)序都調(diào)好了驅(qū)動(dòng)工程師不用管物理層?,F(xiàn)在不一樣了工業(yè)設(shè)備要用 FPGA 直接驅(qū)動(dòng) MIPI 屏或者用 RK3588 這類芯片接非標(biāo)準(zhǔn) MIPI 信號(hào)源LP RX 就得自己實(shí)現(xiàn)或者自己調(diào)。FPGA 實(shí)現(xiàn) MIPI 尤其典型。FPGA 的 IO 標(biāo)準(zhǔn)里沒有現(xiàn)成的 MIPI D-PHY 硬核LP 接收要靠普通 LVCMOS 輸入加過采樣邏輯來做。這時(shí)候 LP RX 的設(shè)計(jì)質(zhì)量直接決定鏈路能不能建起來。我見過不少項(xiàng)目HS 數(shù)據(jù)通路用 SelectIO 或者專用 IP 跑得挺好結(jié)果卡在 LP 狀態(tài)識(shí)別上屏就是不出圖。2. LP RX 的核心機(jī)制與狀態(tài)機(jī)拆解2.1 D-PHY 的 LP 狀態(tài)編碼與跳變規(guī)則LP RX 的核心是一張狀態(tài)跳變圖。Dp 和 Dn 兩條線每條線有高1和低0兩種電平組合起來就是四種狀態(tài)DpDn狀態(tài)名含義11LP-11空閑鏈路停止01LP-01準(zhǔn)備進(jìn)入 HS 或總線翻轉(zhuǎn)10LP-10準(zhǔn)備進(jìn)入 HS 或總線翻轉(zhuǎn)00LP-00HS 進(jìn)入序列的起點(diǎn)發(fā)送端要進(jìn)入 HS標(biāo)準(zhǔn)流程是LP-11 → LP-01 → LP-00 → HS-0差分 0→ HS 同步序列。接收端 LP RX 必須按順序識(shí)別到 LP-11、LP-01、LP-00然后在 LP-00 之后把接收通路切到 HS 模式。如果中間任何一個(gè)狀態(tài)識(shí)別錯(cuò)了或者跳變順序不對(duì)狀態(tài)機(jī)就進(jìn)不去 HS。這里有個(gè)容易踩的坑LP-01 和 LP-10 的順序不能反。有些實(shí)現(xiàn)里為了省事把 LP-01 和 LP-10 都當(dāng)成“準(zhǔn)備態(tài)”不區(qū)分先后。短距離、理想信號(hào)下可能能用但一旦線長超過 10cm 或者有干擾順序識(shí)別錯(cuò)誤就會(huì)導(dǎo)致誤觸發(fā)。我建議嚴(yán)格按規(guī)范來該先 LP-01 就先 LP-01。2.2 接收端采樣時(shí)鐘從哪來LP RX 有個(gè)很實(shí)際的問題HS 有專門的 DDR 時(shí)鐘隨路傳輸LP 沒有。LP 狀態(tài)的持續(xù)時(shí)間是不固定的發(fā)送端想停多久停多久。接收端怎么采樣常見做法是過采樣。用一個(gè)比 LP 狀態(tài)最小持續(xù)時(shí)間高得多的時(shí)鐘去采 Dp 和 Dn比如 LP 狀態(tài)最短可能 50ns那就用 200MHz 甚至 400MHz 去采每個(gè) LP 狀態(tài)能采到 10 到 20 個(gè)點(diǎn)再做多數(shù)表決或者邊沿檢測(cè)。FPGA 里用 IDDR 或者普通寄存器打拍都能做關(guān)鍵是采樣時(shí)鐘要足夠快且穩(wěn)定。另一個(gè)做法是異步狀態(tài)機(jī)加去抖。把 Dp/Dn 當(dāng)異步信號(hào)先打兩拍同步到本地時(shí)鐘域再用計(jì)數(shù)器做去抖連續(xù) N 個(gè)采樣點(diǎn)一致才認(rèn)這個(gè)狀態(tài)。N 取多少要看你的采樣率和現(xiàn)場(chǎng)噪聲。我一般取 4 到 8太小了容易誤判太大了會(huì)漏掉快速跳變。注意過采樣時(shí)鐘的抖動(dòng)要控制好。如果采樣時(shí)鐘本身抖動(dòng)大LP 狀態(tài)邊沿位置飄狀態(tài)機(jī)就可能采到中間態(tài)。用 FPGA 的全局時(shí)鐘資源別用普通 IO 分頻出來的時(shí)鐘。2.3 LP RX 與 HS RX 的切換時(shí)機(jī)LP RX 識(shí)別到 LP-00 之后不能立刻切 HS。規(guī)范里要求發(fā)送端在 LP-00 之后拉出 HS-0 差分信號(hào)接收端要等一段時(shí)間T HS-SETTLE再使能 HS 接收。這個(gè)時(shí)間典型值是 85ns 到 100ns 左右具體看數(shù)據(jù)率。切早了HS 接收器還沒穩(wěn)定采到的是垃圾切晚了HS 同步序列的前幾個(gè) bit 丟了后面字節(jié)對(duì)齊就錯(cuò)。FPGA 實(shí)現(xiàn)的時(shí)候這個(gè)切換通常用一個(gè)延時(shí)計(jì)數(shù)器來做。LP 狀態(tài)機(jī)輸出一個(gè)“進(jìn)入 HS”的脈沖計(jì)數(shù)器開始數(shù)數(shù)到設(shè)定值再打開 HS 接收通路。計(jì)數(shù)器時(shí)鐘就是你的采樣時(shí)鐘所以延時(shí)值 計(jì)數(shù)目標(biāo) × 采樣周期。比如 200MHz 采樣要 100ns 延時(shí)計(jì)數(shù)目標(biāo)就是 20。這里有個(gè)經(jīng)驗(yàn)延時(shí)值留一點(diǎn)余量。規(guī)范給的是最小值實(shí)際鏈路因?yàn)榫€損、連接器、ESD 器件HS 信號(hào)建立時(shí)間可能更長。我一般會(huì)在規(guī)范值基礎(chǔ)上加 20% 到 30%。如果發(fā)現(xiàn) HS 數(shù)據(jù)偶爾錯(cuò)一兩個(gè) bit先別懷疑數(shù)據(jù)通路把 LP 到 HS 的切換延時(shí)加大試試。3. FPGA 實(shí)現(xiàn) LP RX 的完整實(shí)操3.1 硬件連接與 IO 標(biāo)準(zhǔn)選擇用 FPGA 接 MIPI 屏或者 MIPI 信號(hào)源第一步是 IO 怎么接。MIPI 的 LP 信號(hào)是 0 到 1.2V 單端HS 是差分低壓。FPGA 的普通 bank 如果 VCCO 是 1.2V 或者 1.8VLP 信號(hào)可以直接進(jìn)。但 HS 差分信號(hào)需要專門的差分輸入對(duì)而且共模電壓要匹配。紫光同創(chuàng)、Xilinx、Altera 的 FPGA 都有支持 MIPI 電平的 IO 標(biāo)準(zhǔn)比如 Xilinx 的 HP bank 可以設(shè)成 MIPI_DPHY 標(biāo)準(zhǔn)但那個(gè)主要是給 HS 用的。LP 接收我一般用普通 LVCMOS12 或者 LVCMOS18看 VCCO 電壓。如果 VCCO 是 1.8V而 LP 信號(hào)是 1.2V直接接可能高電平識(shí)別不到需要加電平轉(zhuǎn)換或者用帶施密特觸發(fā)的輸入。實(shí)際接線時(shí)Dp 和 Dn 各接一個(gè) FPGA 引腳這兩個(gè)引腳最好在同一個(gè) IO bank走線等長。LP 信號(hào)速率不高等長要求不嚴(yán)但 HS 對(duì)走線很敏感所以 PCB 上 LP 和 HS 是同一對(duì)差分線只是接收端分兩路進(jìn) FPGA。提示如果 FPGA bank 電壓和 MIPI LP 電平不匹配優(yōu)先考慮換 bank 電壓或者加電平轉(zhuǎn)換芯片別指望內(nèi)部上拉能解決。我見過用 3.3V bank 直接接 1.2V LP 信號(hào)的結(jié)果 LP-11 被識(shí)別成 LP-00狀態(tài)機(jī)直接跑飛。3.2 LP 狀態(tài)機(jī)的 Verilog 實(shí)現(xiàn)下面是一個(gè)簡(jiǎn)化的 LP RX 狀態(tài)機(jī)核心代碼用 200MHz 采樣去抖計(jì)數(shù) 4。這段代碼可以直接在普通 FPGA 上跑不需要特殊 IP。module lp_rx ( input wire clk, // 200MHz 采樣時(shí)鐘 input wire rst_n, input wire dp, // Dp 單端輸入 input wire dn, // Dn 單端輸入 output reg lp11, output reg lp01, output reg lp10, output reg lp00, output reg enter_hs // 進(jìn)入 HS 請(qǐng)求 ); // 同步打拍 reg dp_r1, dp_r2, dn_r1, dn_r2; always (posedge clk or negedge rst_n) begin if (!rst_n) begin dp_r1 1b1; dp_r2 1b1; dn_r1 1b1; dn_r2 1b1; end else begin dp_r1 dp; dp_r2 dp_r1; dn_r1 dn; dn_r2 dn_r1; end end // 去抖計(jì)數(shù) reg [2:0] cnt; reg dp_stable, dn_stable; always (posedge clk or negedge rst_n) begin if (!rst_n) begin cnt 3d0; dp_stable 1b1; dn_stable 1b1; end else if (dp_r2 ! dp_stable || dn_r2 ! dn_stable) begin if (cnt 3d3) begin dp_stable dp_r2; dn_stable dn_r2; cnt 3d0; end else begin cnt cnt 1b1; end end else begin cnt 3d0; end end // 狀態(tài)譯碼 always (posedge clk or negedge rst_n) begin if (!rst_n) begin lp11 1b1; lp01 1b0; lp10 1b0; lp00 1b0; enter_hs 1b0; end else begin lp11 dp_stable dn_stable; lp01 ~dp_stable dn_stable; lp10 dp_stable ~dn_stable; lp00 ~dp_stable ~dn_stable; // LP-00 之后請(qǐng)求進(jìn)入 HS enter_hs (~dp_stable ~dn_stable); end end endmodule這段代碼的邏輯很直白先同步再去抖最后譯碼。去抖計(jì)數(shù) 4 意味著連續(xù) 4 個(gè)采樣點(diǎn)一致才更新狀態(tài)200MHz 下就是 20ns 的濾波窗口。對(duì)于大多數(shù) MIPI 鏈路LP 狀態(tài)最短也有 50ns20ns 窗口不會(huì)漏掉。3.3 從 LP 到 HS 的切換電路LP 狀態(tài)機(jī)輸出enter_hs之后需要延時(shí)一段時(shí)間再打開 HS 接收。下面是一個(gè)延時(shí)切換的示例module hs_switch ( input wire clk, input wire rst_n, input wire enter_hs, output reg hs_en ); reg [7:0] delay_cnt; parameter DELAY_TARGET 8d24; // 200MHz 下約 120ns always (posedge clk or negedge rst_n) begin if (!rst_n) begin delay_cnt 8d0; hs_en 1b0; end else if (enter_hs) begin if (delay_cnt DELAY_TARGET) begin hs_en 1b1; delay_cnt delay_cnt; end else begin delay_cnt delay_cnt 1b1; end end else begin delay_cnt 8d0; hs_en 1b0; end end endmoduleDELAY_TARGET取 24200MHz 下就是 120ns。規(guī)范要求 T HS-SETTLE 最小 85ns120ns 留了約 40% 余量。如果鏈路比較長或者經(jīng)過連接器可以加到 32 甚至 40。但也不能太大太大了 HS 同步序列可能已經(jīng)開始了會(huì)丟前導(dǎo)碼。3.4 實(shí)測(cè)波形與狀態(tài)跳變記錄調(diào) LP RX 的時(shí)候光看代碼沒用必須抓波形。我用邏輯分析儀抓過一組典型的進(jìn)入 HS 序列Dp/Dn 的跳變順序是LP-11 持續(xù)約 200nsLP-01 持續(xù)約 60nsLP-00 持續(xù)約 80nsHS-0 差分信號(hào)開始約 100ns 后 HS 同步序列出現(xiàn)對(duì)應(yīng)到狀態(tài)機(jī)輸出lp11、lp01、lp00依次拉高enter_hs在 LP-00 期間拉高h(yuǎn)s_en在 LP-00 結(jié)束后約 120ns 拉高。如果hs_en拉高時(shí) HS 同步序列已經(jīng)過了前幾個(gè) bit說明延時(shí)太小如果hs_en拉高后很久才看到 HS 數(shù)據(jù)說明延時(shí)太大。注意邏輯分析儀的采樣率要足夠高。LP 狀態(tài)最短可能 50ns采樣率至少 500MSa/s 才能看清。用 100MSa/s 的便宜分析儀LP-01 可能只采到一兩個(gè)點(diǎn)根本看不出順序。4. 常見問題與排查技巧實(shí)錄4.1 LP 狀態(tài)識(shí)別錯(cuò)誤導(dǎo)致“沒信號(hào)”這是最典型的問題?,F(xiàn)象是 HS 時(shí)鐘有但 DATA 不動(dòng)或者屏完全沒反應(yīng)。排查步驟先用示波器或者邏輯分析儀看 Dp/Dn 在復(fù)位后有沒有 LP-11。如果沒有說明發(fā)送端沒發(fā)或者線路斷了。如果有 LP-11看進(jìn)入 HS 前有沒有 LP-01 和 LP-00。順序?qū)Σ粚?duì)。如果順序?qū)磂nter_hs有沒有拉高。沒拉高就是狀態(tài)機(jī)去抖參數(shù)或者采樣時(shí)鐘有問題。如果enter_hs拉高了但 HS 沒數(shù)據(jù)看hs_en的延時(shí)。加大延時(shí)試試。我遇到過一種情況LP-01 和 LP-00 之間只有 30ns去抖計(jì)數(shù) 4 在 200MHz 下是 20ns理論上夠但實(shí)際因?yàn)樾盘?hào)邊沿緩狀態(tài)機(jī)在 LP-01 只停留了 15ns 就跳到 LP-00結(jié)果 LP-01 沒被識(shí)別到。后來把去抖計(jì)數(shù)降到 2問題解決。所以去抖參數(shù)不是越大越好要看實(shí)際 LP 狀態(tài)的最短持續(xù)時(shí)間。4.2 橫向花屏與 LP RX 的關(guān)系搜索熱詞里有“mipi 液晶屏 橫向 花屏”這個(gè)現(xiàn)象和 LP RX 也有關(guān)系。橫向花屏通常是 HS 數(shù)據(jù)字節(jié)對(duì)齊錯(cuò)了而字節(jié)對(duì)齊的起點(diǎn)是由 LP 到 HS 的切換時(shí)刻決定的。如果hs_en拉高太早HS 同步序列的前幾個(gè) bit 被當(dāng)成數(shù)據(jù)拉高太晚同步序列丟了接收端找不到字節(jié)邊界。兩種情況都會(huì)導(dǎo)致花屏但表現(xiàn)不同太早通常是整屏偏移幾個(gè)像素太晚可能是隨機(jī)花屏或者完全不出圖。調(diào)這個(gè)問題的技巧先把hs_en延時(shí)設(shè)成規(guī)范值然后以 4 個(gè)采樣時(shí)鐘為步進(jìn)上下各調(diào) 3 檔看哪一檔花屏消失。找到最佳值后再在這個(gè)值上下各留 2 檔作為余量。如果最佳值范圍很窄說明鏈路信號(hào)質(zhì)量差要查線長、連接器、終端匹配。4.3 FPGA 實(shí)現(xiàn) LP RX 的常見坑問題現(xiàn)象可能原因排查方法解決措施LP-11 識(shí)別不到IO 電平不匹配量 Dp/Dn 靜態(tài)電壓換 bank 電壓或加電平轉(zhuǎn)換LP-01/LP-00 順序錯(cuò)去抖參數(shù)太大抓 LP 狀態(tài)持續(xù)時(shí)間減小去抖計(jì)數(shù)進(jìn)入 HS 后無數(shù)據(jù)hs_en 延時(shí)不對(duì)抓 hs_en 和 HS 同步序列調(diào)整 DELAY_TARGET偶爾花屏采樣時(shí)鐘抖動(dòng)大查時(shí)鐘源和約束用全局時(shí)鐘加時(shí)序約束狀態(tài)機(jī)跑飛異步信號(hào)未同步查同步打拍級(jí)數(shù)至少打兩拍加去抖還有一個(gè)坑是LP 和 HS 的引腳復(fù)用。有些 FPGA 方案為了省引腳LP 和 HS 共用一對(duì)差分輸入靠內(nèi)部模擬開關(guān)切換。這種方案對(duì)開關(guān)的切換速度要求很高切慢了會(huì)丟 HS 前導(dǎo)碼切快了會(huì)引入毛刺。如果非要用復(fù)用方案建議 LP 和 HS 分別用獨(dú)立的 FPGA 引腳PCB 上從同一對(duì)差分線分叉出來雖然多用了引腳但省心得多。4.4 與 RK3588、ST7701S 等具體平臺(tái)的配合RK3588 的 MIPI 輸入支持 1080i 信號(hào)這個(gè)場(chǎng)景下 LP RX 的挑戰(zhàn)在于隔行信號(hào)的行同步。1080i 的 MIPI 包里每行數(shù)據(jù)量不固定LP 狀態(tài)出現(xiàn)的頻率和位置跟逐行不一樣。如果 LP RX 狀態(tài)機(jī)對(duì) LP 狀態(tài)的持續(xù)時(shí)間假設(shè)太死可能會(huì)在隔行信號(hào)里誤判。解決辦法是讓去抖參數(shù)自適應(yīng)或者用更快的采樣時(shí)鐘把去抖窗口做小。ST7701S 是常見的 MIPI 屏驅(qū)動(dòng) IC它的初始化序列里有很多 LP 模式下的命令傳輸。如果 LP RX 識(shí)別不到命令屏就不會(huì)出圖。調(diào) ST7701S 的時(shí)候我一般先用示波器確認(rèn) LP 命令有沒有發(fā)出來再看 FPGA 的 LP RX 狀態(tài)機(jī)有沒有正確譯碼。很多時(shí)候問題不在屏的初始化代碼而在 LP RX 的采樣和去抖。紫光同創(chuàng) FPGA 驅(qū)動(dòng) MIPI 的案例里L(fēng)P RX 通常用普通 IO 加過采樣實(shí)現(xiàn)。紫光同創(chuàng)的 IO 延遲和 Xilinx 不太一樣同樣的去抖參數(shù)可能表現(xiàn)不同。建議在紫光同創(chuàng)上先把采樣時(shí)鐘降到 100MHz去抖計(jì)數(shù)設(shè) 2確認(rèn)能識(shí)別 LP 狀態(tài)后再逐步提高采樣率。5. LP RX 調(diào)試的獨(dú)家經(jīng)驗(yàn)與參數(shù)速查5.1 采樣率與去抖參數(shù)的搭配采樣率和去抖計(jì)數(shù)是一對(duì)需要一起調(diào)的參數(shù)。采樣率越高每個(gè) LP 狀態(tài)采到的點(diǎn)越多去抖計(jì)數(shù)可以適當(dāng)加大抗噪能力更強(qiáng)。但采樣率太高FPGA 時(shí)序壓力大功耗也高。我一般按 LP 狀態(tài)最短持續(xù)時(shí)間的 1/10 來選采樣周期。比如 LP 狀態(tài)最短 50ns采樣周期就選 5ns對(duì)應(yīng) 200MHz。去抖計(jì)數(shù)取 4濾波窗口 20ns占 LP 狀態(tài)的 40%既能濾掉毛刺又不會(huì)漏掉狀態(tài)。如果 LP 狀態(tài)最短只有 30ns200MHz 采樣只能采到 6 個(gè)點(diǎn)去抖計(jì)數(shù)最多取 3。再大就可能漏狀態(tài)。這時(shí)候要么提高采樣率到 400MHz要么降低去抖計(jì)數(shù)。我傾向于提高采樣率因?yàn)槿ザ队?jì)數(shù)太小抗噪能力差。5.2 用眼圖輔助判斷 LP 信號(hào)質(zhì)量LP 信號(hào)雖然是單端大信號(hào)但邊沿質(zhì)量同樣重要。如果 LP 信號(hào)的上升沿和下降沿太緩狀態(tài)機(jī)在邊沿附近采到的值不確定去抖計(jì)數(shù)再大也沒用。用示波器看 LP 信號(hào)的眼圖重點(diǎn)看邊沿的單調(diào)性和過沖。如果邊沿有回溝或者振鈴說明阻抗不匹配要在發(fā)送端加串阻或者接收端加端接。LP 信號(hào)的擺幅也要看。規(guī)范要求 LP 高電平至少 0.88V低電平最多 0.3V。如果實(shí)測(cè)高電平只有 0.7V可能是驅(qū)動(dòng)能力不夠或者線太長。FPGA 接收端如果 VCCO 是 1.8V0.7V 可能識(shí)別不到高電平需要加施密特觸發(fā)或者換 1.2V bank。5.3 常見 MIPI 數(shù)據(jù)率下的 LP 參數(shù)參考MIPI 數(shù)據(jù)率HS 時(shí)鐘頻率LP 狀態(tài)最短典型值推薦采樣率推薦去抖計(jì)數(shù)推薦 hs_en 延時(shí)500Mbps/lane250MHz50ns200MHz4120ns1Gbps/lane500MHz40ns300MHz3100ns1.5Gbps/lane750MHz35ns400MHz390ns2Gbps/lane1GHz30ns500MHz285ns這個(gè)表是我根據(jù)實(shí)際項(xiàng)目整理的不是規(guī)范原文。不同發(fā)送端和不同線長會(huì)有差異建議以實(shí)測(cè)為準(zhǔn)。但大方向是數(shù)據(jù)率越高LP 狀態(tài)越短采樣率要越高去抖計(jì)數(shù)要越小hs_en 延時(shí)也要越小。5.4 一個(gè)容易被忽略的細(xì)節(jié)LP 狀態(tài)機(jī)的復(fù)位LP RX 狀態(tài)機(jī)在上電或者鏈路斷開后需要復(fù)位到 LP-11 空閑態(tài)。如果復(fù)位沒做好狀態(tài)機(jī)可能停在某個(gè)中間態(tài)導(dǎo)致后續(xù)無法進(jìn)入 HS。我的做法是用一個(gè)超時(shí)計(jì)數(shù)器如果連續(xù) 1ms 沒有檢測(cè)到任何 LP 狀態(tài)跳變就強(qiáng)制復(fù)位狀態(tài)機(jī)到 LP-11。這個(gè)超時(shí)值要大于最長的 LP-11 空閑時(shí)間但小于鏈路重新初始化的時(shí)間。1ms 是個(gè)比較安全的經(jīng)驗(yàn)值。另外復(fù)位信號(hào)要同步到采樣時(shí)鐘域。異步復(fù)位直接釋放可能導(dǎo)致狀態(tài)機(jī)在釋放瞬間采到亞穩(wěn)態(tài)。用兩級(jí)同步器把復(fù)位同步到采樣時(shí)鐘再釋放。5.5 從 LP RX 延伸到整個(gè) MIPI 鏈路的調(diào)試思路LP RX 只是 MIPI 鏈路的第一關(guān)。過了這一關(guān)后面還有 HS 數(shù)據(jù)對(duì)齊、字節(jié)解析、包解碼。但 LP RX 調(diào)通了后面的問題就好定位了。我的調(diào)試順序是先確保 LP 狀態(tài)識(shí)別正確再確保 HS 進(jìn)入時(shí)序正確然后看 HS 數(shù)據(jù)有沒有、對(duì)不對(duì)最后看包解析和圖像輸出。如果 LP RX 都沒調(diào)通別急著去改 HS 數(shù)據(jù)通路或者屏的初始化代碼。先把 LP 狀態(tài)抓出來確認(rèn)狀態(tài)機(jī)工作正常。很多時(shí)候LP RX 調(diào)好了屏就亮了后面的問題根本不存在。提示調(diào)試 LP RX 時(shí)建議在 FPGA 里加一個(gè)狀態(tài)計(jì)數(shù)器記錄 LP-11、LP-01、LP-00 各出現(xiàn)了多少次。如果 LP-11 計(jì)數(shù)正常但 LP-01 和 LP-00 計(jì)數(shù)為 0說明發(fā)送端沒發(fā)進(jìn)入 HS 的序列問題在發(fā)送端或者線路。如果 LP-01 有計(jì)數(shù)但 LP-00 沒有說明狀態(tài)機(jī)在 LP-01 卡住了去抖參數(shù)或者采樣時(shí)鐘有問題。我在實(shí)際項(xiàng)目里踩過最深的坑是 LP RX 狀態(tài)機(jī)在低溫下失效。常溫下一切正常零下 20 度就識(shí)別不到 LP-01。后來查出來是 FPGA 的 IO 輸入緩沖在低溫下閾值漂移LP 信號(hào)的邊沿又比較緩導(dǎo)致采樣點(diǎn)落在閾值附近。解決辦法是在 PCB 上給 LP 信號(hào)加了施密特觸發(fā)緩沖器問題解決。所以如果你的設(shè)備要在寬溫下工作LP RX 的輸入級(jí)要特別關(guān)注。