設(shè)計(jì)實(shí)戰(zhàn):頻率不高卻最易踩坑的接口)
做 x86 平臺(tái)周邊設(shè)計(jì)這些年我最大的體會(huì)是真正讓硬件工程師頭疼的往往不是 DDR 或者 PCIe 那種“一看就很猛”的高速總線反而是 eSPI 這種“頻率不高卻總出幺蛾子”的接口。名字里帶個(gè) Enhanced本質(zhì)還是串行外設(shè)總線可惜很多人一聽到“低速信號(hào)設(shè)計(jì)”就放松警惕等樣品回來用示波器一抓波形跟心電圖似的才知道這東西一點(diǎn)都不好惹。這篇文章拿 ESPI 當(dāng)主角把低速信號(hào)設(shè)計(jì)里最容易踩的坑、最值得記住的規(guī)則、以及我做了幾塊板子之后總結(jié)出來的實(shí)戰(zhàn)經(jīng)驗(yàn)一起聊清楚。適合正在畫 eSPI 相關(guān) PCB、準(zhǔn)備做 EC 方案、或者只是想把信號(hào)完整性問題系統(tǒng)性過一遍的硬件工程師。內(nèi)容不堆理論重點(diǎn)是可落地的操作。1. ESPI 到底是什么為什么值得單獨(dú)寫一篇1.1 eSPI 從哪來LPC 的繼任者eSPIEnhanced Serial Peripheral Interface最早是作為傳統(tǒng) LPCLow Pin Count總線的替代方案出現(xiàn)的。LPC 在傳統(tǒng) PC 平臺(tái)里用了很多年負(fù)責(zé) CPU 和 EC、BIOS Flash、Super IO 這些低速外設(shè)之間的通信。LPC 的問題很直接引腳數(shù)量多速率也上不去總線仲裁和信號(hào)設(shè)計(jì)都偏老舊。eSPI 用 4 根核心信號(hào)CLK、CS#、D0、D1再加上可選的 Alert# 和復(fù)位信號(hào)就把 LPC 的活兒全接了過來。真正讓 eSPI 區(qū)別于普通 SPI 的是它的“通道化”架構(gòu)。eSPI 把數(shù)據(jù)流拆成幾個(gè)邏輯通道比如 peripheral channel、virtual wire channel、flash channel、OOB channel。每個(gè)通道在時(shí)間片上分時(shí)復(fù)用同一條物理總線這樣一條總線既能讓 EC 跟主控通信又能讓主控直接訪問 SPI Flash還能傳一些帶外事件。硬件工程師不需要把每個(gè)通道的協(xié)議細(xì)節(jié)背爛但必須知道一件事不同通道對(duì)時(shí)序和信號(hào)質(zhì)量的要求不完全一樣尤其是 flash channel它對(duì)時(shí)鐘和數(shù)據(jù)線的對(duì)齊要求往往更嚴(yán)格因?yàn)?Flash 訪問對(duì)時(shí)序窗口很敏感。這也是我為什么說 eSPI 值得單獨(dú)寫一篇——它表面上是個(gè)“慢速串行接口”但實(shí)際設(shè)計(jì)起來要考慮的點(diǎn)比我預(yù)想的多得多。1.2 eSPI 的“低速”陷阱頻率低不等于沒有信號(hào)完整性問題很多工程師的判斷邏輯是這樣的eSPI 不就跑個(gè) 20MHz 到 40MHz 嗎DDR 都跑 1600MT/s 了一根 33MHz 的時(shí)鐘線有什么好怕的。這個(gè)想法大錯(cuò)特錯(cuò)。信號(hào)完整性問題從來不看時(shí)鐘頻率看的是信號(hào)的上升沿速度。一個(gè)信號(hào)哪怕時(shí)鐘只有 1MHz只要上升沿能沖到 1ns它照樣會(huì)在走線末端反射、振鈴、串?dāng)_。原因很簡(jiǎn)單信號(hào)在 PCB 上的傳播需要時(shí)間當(dāng)走線長(zhǎng)度超過信號(hào)上升沿在介質(zhì)里走過的“空間長(zhǎng)度”的一定比例時(shí)傳輸線效應(yīng)就不可忽視了。FR4 板材上電信號(hào)傳播速度大約是 6 英寸/納秒如果一個(gè)信號(hào)上升沿是 1ns這個(gè)沿在板上就占了 6 英寸的長(zhǎng)度。按照經(jīng)典經(jīng)驗(yàn)規(guī)則走線長(zhǎng)度超過這個(gè)沿長(zhǎng)度的 1/6也就是 1 英寸時(shí)就必須考慮阻抗匹配的問題。所以 eSPI 的坑就在這里。它名義上是低速信號(hào)但實(shí)際邊沿速度一點(diǎn)不慢。只要走線超過一兩英寸你就要開始認(rèn)真對(duì)待阻抗、端接、等長(zhǎng)這些問題不然波形上就會(huì)出現(xiàn)反射振鈴輕則握手失敗重則 EC 起不來。2. 動(dòng)手布局前先想清楚的三個(gè)底層問題2.1 時(shí)序預(yù)算比頻率更重要設(shè)計(jì) eSPI 信號(hào)第一個(gè)要建立的概念不是“這根線多快”而是“這個(gè)接口留給信號(hào)的時(shí)序窗口到底多大”。時(shí)序預(yù)算說起來就是初中數(shù)學(xué)算的是數(shù)據(jù)相對(duì)時(shí)鐘的建立時(shí)間和保持時(shí)間余量。我拿一個(gè)常見場(chǎng)景舉例。假設(shè)某平臺(tái) eSPI 跑 33MHz時(shí)鐘周期約 30.3ns。芯片手冊(cè)里給了源端輸出延遲最大值 Tco_max假設(shè)是 10ns接收端要求的數(shù)據(jù)建立時(shí)間 tSU假設(shè)是 6ns。那建立時(shí)間余量大概可以這樣估算建立時(shí)間余量 時(shí)鐘周期 - Tco_max - tSU - (數(shù)據(jù)線飛行時(shí)間 - 時(shí)鐘線飛行時(shí)間)如果數(shù)據(jù)線比時(shí)鐘線長(zhǎng)了 3 英寸飛行時(shí)間差大約 0.5ns。那余量就是 30.3 - 10 - 6 - 0.5 13.8ns看起來綽綽有余。但問題在于這只是建立時(shí)間。保持時(shí)間余量算下來往往沒有這么寬裕尤其當(dāng)數(shù)據(jù)線比時(shí)鐘線短太多或者驅(qū)動(dòng)端最小輸出延遲很小的時(shí)候保持時(shí)間會(huì)變得非常緊張。我建議每個(gè)做 eSPI 的工程師都動(dòng)手算一遍自己平臺(tái)的時(shí)序預(yù)算不要只看別人給的等長(zhǎng)規(guī)則就照抄。算了你才知道為什么要等長(zhǎng)因?yàn)橐瑫r(shí)控制數(shù)據(jù)線相對(duì)時(shí)鐘線不能太長(zhǎng)影響建立時(shí)間也不能太短影響保持時(shí)間。為什么要限制最大走線長(zhǎng)度因?yàn)樽呔€越長(zhǎng)累積的延遲誤差和環(huán)境污染就越大。這些結(jié)論規(guī)則表里寫得再清楚也不如自己推一遍來得印象深刻。2.2 拓?fù)浣Y(jié)構(gòu)點(diǎn)對(duì)點(diǎn)還是共享總線低速信號(hào)設(shè)計(jì)的第二個(gè)關(guān)鍵認(rèn)知是拓?fù)洹SPI 最常見的接法是主控和 EC 之間點(diǎn)對(duì)點(diǎn)連接CS# 單獨(dú)控制。這種拓?fù)渥罡蓛舴瓷湫〉乳L(zhǎng)也好做。但實(shí)際項(xiàng)目里經(jīng)常會(huì)出現(xiàn)兩個(gè)從設(shè)備掛在同一條 eSPI 總線上的情況或者為了讓調(diào)試方便額外引出一個(gè)連接器。一旦出現(xiàn)多個(gè)負(fù)載信號(hào)拓?fù)渚妥兂闪诵切位蛘邘Ф虡兜墓蚕砜偩€。很多工程師習(xí)慣把所有器件往同一網(wǎng)絡(luò)上一掛覺得反正低速無所謂。但 eSPI 的邊沿不是慢邊沿多一個(gè)分支就等于多一個(gè)阻抗不連續(xù)點(diǎn)反射立刻顯現(xiàn)。我踩過的坑是為了調(diào)試方便我在 eSPI 數(shù)據(jù)線上引了一個(gè)很小的測(cè)試焊盤結(jié)果這個(gè)焊盤帶來的短樁電容在高頻邊沿下把波形搞出了毛刺最后只能把焊盤去掉。經(jīng)驗(yàn)法則是eSPI 盡量采用菊花鏈拓?fù)渲髟O(shè)備先到離它最近的從設(shè)備再?gòu)牡谝粋€(gè)從設(shè)備繞到第二個(gè)中間不要出現(xiàn)長(zhǎng) T 型分支。如果實(shí)在避免不了分支分支越短越好最好控制在 300mil 以內(nèi)否則就等著調(diào)試時(shí)和反射搏斗。2.3 信號(hào)邊沿上升時(shí)間才是最關(guān)鍵的 SI 參數(shù)前面已經(jīng)提到低速信號(hào)設(shè)計(jì)的核心矛盾是“慢時(shí)鐘快邊沿”。那這個(gè)邊沿到底會(huì)受到什么影響主要有三樣驅(qū)動(dòng)端的驅(qū)動(dòng)強(qiáng)度、接收端的輸入電容、以及整條走線的寄生電容。驅(qū)動(dòng)強(qiáng)度不夠上升沿就變緩接收端電容太大沿也會(huì)變緩走線太長(zhǎng)太細(xì)電容和電阻一起把沿拉平。沿一旦變平信號(hào)穿越邏輯閾值的時(shí)間就不確定了抗干擾能力下降時(shí)序裕量也被壓縮。我在評(píng)估 eSPI 信號(hào)質(zhì)量時(shí)第一眼看的就是上升時(shí)間。比如 eSPI 25MHz 時(shí)鐘如果上升沿小于等于 2ns那是比較健康的狀態(tài)如果超過 3ns 甚至 4ns就要警惕了。尤其要注意時(shí)鐘上升沿的“單調(diào)性”波形上升過程絕對(duì)不能出現(xiàn)回勾或臺(tái)階。臺(tái)階意味著信號(hào)在閾值電平附近來回穿越接收端可能采樣到錯(cuò)誤的電平。抓波形時(shí)這些細(xì)節(jié)比單純的頻率讀數(shù)重要得多。3. 信號(hào)設(shè)計(jì)實(shí)操?gòu)淖杩沟蕉私拥耐暾?guī)則3.1 阻抗、疊層和參考平面eSPI 信號(hào)組建議按單端 50Ω 阻抗控制來走線公差 ±10%。這不難實(shí)現(xiàn)但有一個(gè)前提必須有完整的參考平面。常規(guī)四層板疊層可以這么排L1 信號(hào)層L2 地層L3 電源層L4 信號(hào)層。eSPI 信號(hào)盡量走 L1也就是靠近參考地平面的那一層這樣回流路徑最短輻射也最小。如果因?yàn)椴季€空間不夠被迫換到 L4那你得確認(rèn) L3 是不是完整的電源層或者地層不能參考一個(gè)被掏空的平面否則回流信號(hào)得繞過一堆空洞環(huán)路面積急劇增大波形和 EMI 都會(huì)劣化。線寬取決于板材厚度和層間距。同樣是 50Ω 微帶線介質(zhì)層厚度從 0.1mm 到 0.2mm線寬可能從 5mil 變到 12mil。所以不要照抄別人的線寬要讓你家板廠根據(jù)固定的疊層幫你計(jì)算或者用 Polar SI9000 之類的工具拉一條準(zhǔn)確的阻抗線寬。我自己一般會(huì)直接告訴板廠“eSPI 這組要走單端 50Ω你們給我對(duì)應(yīng)疊層下的線寬和公差”省心也穩(wěn)妥。3.2 等長(zhǎng)約束和分組匹配eSPI 等長(zhǎng)設(shè)計(jì)的分組邏輯是CLK 為主導(dǎo)D0、D1 相對(duì) CLK 做等長(zhǎng)CS# 也參考 CLK 做等長(zhǎng)。具體長(zhǎng)度差多少不同平臺(tái)手冊(cè)差異很大但工程經(jīng)驗(yàn)值一般是 ±100mil 以內(nèi)。如果你覺得不放心做到 ±50mil 也可以只是別為了這 50mil 的差距去繞巨長(zhǎng)的蛇形線那反而得不償失。蛇形繞線有講究。繞線間距至少要滿足 3W 到 5W 的間距W 是線寬。間距太小蛇形線相鄰段之間會(huì)產(chǎn)生嚴(yán)重的耦合電容和互感信號(hào)延遲不但沒有按預(yù)期增加反而會(huì)引入額外的串?dāng)_。我見過有人為了補(bǔ) 30mil 的差距繞了個(gè)密集蛇形結(jié)果那段信號(hào)質(zhì)量比不繞還差。另外繞線盡量用弧形或者 45° 折角不要用尖銳的 90° 直接折返雖然 90° 對(duì)信號(hào)完整性的影響在現(xiàn)代工藝下沒那么夸張但能避免就別留隱患。還有一個(gè)很多人忽略的點(diǎn)eSPI 組內(nèi)等長(zhǎng)做完之后整組的絕對(duì)走線長(zhǎng)度也要控制。不是只要你組內(nèi)相等就萬事大吉如果時(shí)鐘線走了 10 英寸即便數(shù)據(jù)線和它嚴(yán)格等長(zhǎng)整組信號(hào)在板上的延遲和衰減也已經(jīng)很可觀。我的習(xí)慣是 eSPI 信號(hào)總長(zhǎng)盡量控制在 6 英寸以內(nèi)超過這個(gè)長(zhǎng)度就要重新審視拓?fù)浠蛘唑?qū)動(dòng)強(qiáng)度。3.3 端接電阻和上下拉怎么選串聯(lián)端接是 eSPI 最常用的端接方式。做法是在驅(qū)動(dòng)端串一個(gè)電阻把驅(qū)動(dòng)端輸出阻抗和傳輸線阻抗匹配起來吸收反射。典型阻值 22Ω 到 33Ω具體值要看驅(qū)動(dòng)端阻抗和走線阻抗的差值。比如驅(qū)動(dòng)端輸出阻抗約 20Ω走線 50Ω串 22Ω 的電阻就是讓源端總阻抗接近 50Ω。這個(gè)阻值不是死的最好用仿真或者實(shí)測(cè)掃一下。如果串阻太大源端阻抗遠(yuǎn)高于傳輸線接收端看到的信號(hào)上升沿會(huì)變慢高電平還會(huì)掉電壓如果太小反射抑制效果不好。我一般會(huì)在原理圖里預(yù)留 0Ω 或 22Ω 的默認(rèn)值板子回來再根據(jù)示波器波形調(diào)。另外串聯(lián)端接電阻一定要放在驅(qū)動(dòng)端也就是靠近發(fā)射芯片的位置放反了變成接收端端接不僅沒用還會(huì)衰減信號(hào)。上下拉電阻也要分清。eSPI 是推挽輸出大部分信號(hào)不需要上拉但 Alert# 這類開漏或類似機(jī)制的信號(hào)必須有上拉常見 10kΩ 到 47kΩ 都行。CS# 有些設(shè)計(jì)會(huì)加上拉保證上電期間不被誤拉低這也可以但要注意上拉電阻值不能太小否則會(huì)跟驅(qū)動(dòng)端的低電平輸出打架。便宜的做法是預(yù)留一個(gè)上拉電阻位調(diào)試時(shí)再?zèng)Q定貼不貼。4. PCB 布局布線中的避坑指南4.1 布局優(yōu)先級(jí)和器件分區(qū)畫板子第一步不是拉線而是擺元器件的位置。eSPI 信號(hào)鏈的主設(shè)備SoC 或者 PCH、從設(shè)備EC和被訪問對(duì)象例如 Flash盡量靠近形成一個(gè)緊湊的信號(hào)小區(qū)。EC 通常是 eSPI 從設(shè)備同時(shí)它又可能帶一個(gè)本地 Flash這組信號(hào)也要一起考慮。布局時(shí)還要注意把 eSPI 信號(hào)和電源走線、開關(guān)節(jié)點(diǎn)隔開。開關(guān)電源的電感下面不要走 eSPI 信號(hào)DCDC 的開關(guān)節(jié)點(diǎn)噪聲大很容易通過空間耦合到長(zhǎng)走線上。如果板子空間允許把 eSPI 信號(hào)放在板邊而不是電源電路旁邊。我之前有一版就是 eSPI 的 CLK 走了板內(nèi)層正好從電感底下穿過結(jié)果 EC 經(jīng)常間歇性復(fù)位查了好久才定位到是耦合噪聲干擾。調(diào)試連接器的處理也要提前想。很多平臺(tái)需要把 eSPI 引出來做調(diào)試我建議做成“可選焊接”的連接器焊盤不上件時(shí)焊盤本身就是個(gè)短樁也會(huì)反射。如果確認(rèn)不焊接最好讓信號(hào)線不走該焊盤或者用 0Ω 電阻隔開需要調(diào)試時(shí)再貼。4.2 間距、包地和串?dāng)_控制eSPI 信號(hào)組內(nèi)部CLK 和 D0/D1/CS# 并行時(shí)間距至少要滿足 3W 規(guī)則。如果并行走線長(zhǎng)度超過 2 英寸建議間距拉到 4W 到 5W。這個(gè)間距主要防串?dāng)_D0/D1 在傳輸數(shù)據(jù)時(shí)不停翻轉(zhuǎn)對(duì) CLK 的干擾直接影響采樣抖動(dòng)。串?dāng)_問題在低速信號(hào)設(shè)計(jì)里經(jīng)常被忽視因?yàn)榇蠹矣X得頻率不高就不會(huì)耦合。但串?dāng)_靠的是邊沿不是頻率一個(gè) 1ns 的跳變沿足以在緊鄰的走線上耦合出幾十毫伏的毛刺。對(duì)于 3.3V 邏輯信號(hào)幾十毫伏看起來不算什么但如果耦合節(jié)點(diǎn)正好在接收端閾值附近再加上一點(diǎn)反射問題就來了。包地要不要做我的建議是區(qū)分對(duì)待。CLK 是 eSPI 里最關(guān)鍵的信號(hào)給它兩側(cè)各走一條地線并且每 1/4 波長(zhǎng)距離打一個(gè)地過孔是有效的。但不要把所有 eSPI 信號(hào)都包地那樣會(huì)占用大量空間還會(huì)引入不必要的耦合電容。整組信號(hào)外圍包一圈地倒是可以的起到整體屏蔽和隔離外界噪聲的作用。另外包地線不能是“死地”要確保它兩頭和地平面可靠連接否則一根漂浮的包地線反而成了天線。4.3 過孔、換層和回流路徑每個(gè)過孔都是一個(gè)阻抗不連續(xù)點(diǎn)也是寄生電容和電感的來源。eSPI 雖然不像高速差分那樣對(duì)過孔深惡痛絕但每多一個(gè)過孔波形質(zhì)量就變差一點(diǎn)。我對(duì)自己項(xiàng)目的硬性要求是eSPI 每組信號(hào)最多一個(gè)過孔能不打就不打。如果不得不換層切記檢查新走線層的參考平面是否連續(xù)。比如從 L1 換到 L3L3 的參考平面如果是電源層你得確認(rèn)這條走線下方?jīng)]有電源分割槽?;亓髀窂绞切盘?hào)自己找的你給它一條干凈的回路它就跑得穩(wěn)你給它一個(gè)布滿空洞的路徑它就只能繞遠(yuǎn)路噪聲和輻射全來了。換層處最好在過孔旁邊加一個(gè)回流地過孔給返回電流提供近距離的回路。這個(gè)習(xí)慣同樣適用于任何高速信號(hào)設(shè)計(jì)雖然 eSPI 是“低速信號(hào)”但按高速規(guī)則處理總沒錯(cuò)。5. 調(diào)試實(shí)測(cè)示波器上抓到的問題5.1 測(cè)量方法先搞對(duì)很多工程師調(diào) eSPI 問題第一步就錯(cuò)了因?yàn)樗麄冇玫臏y(cè)量方法是拿 100MHz 示波器、長(zhǎng)地線夾子、去測(cè) 1ns 上升沿的波形。測(cè)出來的振鈴有一半是測(cè)量系統(tǒng)自己產(chǎn)生的不是真實(shí)信號(hào)。測(cè)量 eSPI 這種信號(hào)示波器帶寬至少 500MHz推薦 1GHz這樣上升沿才不會(huì)被示波器自身帶寬壓扁。探頭地線要用彈簧地或者最短的接地方式千萬不要用那根長(zhǎng)長(zhǎng)的鱷魚夾地線它引入的電感會(huì)在高頻邊沿下激起一串振鈴讓你誤以為板子設(shè)計(jì)有問題。測(cè)量位置也要選對(duì)。測(cè)點(diǎn)盡量放在接收端芯片的引腳或者緊貼引腳處的過孔不要放在遠(yuǎn)端的調(diào)試焊盤上。如果你必須測(cè)量調(diào)試連接器處的信號(hào)那測(cè)出來的結(jié)果只能代表調(diào)試口位置的波形和芯片引腳處的真實(shí)波形是有差異的。5.2 經(jīng)典故障時(shí)鐘沿劣化故障現(xiàn)象是CLK 上升沿變得很平緩甚至超過 3ns偶爾出現(xiàn)臺(tái)階導(dǎo)致通信不穩(wěn)定復(fù)位偶爾失敗。排查步驟我一般是這樣走的先確認(rèn)驅(qū)動(dòng)端串阻是不是太大。eSPI 驅(qū)動(dòng)端如果串了 33Ω而驅(qū)動(dòng)端本身輸出阻抗又偏高整體 RC 就被拖慢上升沿自然大。然后看負(fù)載如果 EC 和 Flash 都掛在這條 CLK 上接收端輸入電容疊加驅(qū)動(dòng)能力可能就不夠了。這時(shí)候可以嘗試把 EC 的 PAD 驅(qū)動(dòng)強(qiáng)度配置調(diào)高一個(gè)檔位很多芯片的 eSPI 驅(qū)動(dòng)強(qiáng)度是可編程的默認(rèn)檔位不一定適合你的板級(jí)環(huán)境。如果軟件調(diào)不了驅(qū)動(dòng)強(qiáng)度那就只能改硬件減小串阻阻值縮短走線長(zhǎng)度減少負(fù)載。我在實(shí)際調(diào)板時(shí)遇到過一種情況EC 旁邊一個(gè)濾波電容給 CLK 造成了額外負(fù)載換個(gè)小容值或者挪遠(yuǎn)一點(diǎn)波形立刻改善。5.3 經(jīng)典故障CS# 建立時(shí)間不足這個(gè)故障比較隱蔽因?yàn)樗皇敲看紊想姸际《桥及l(fā)的環(huán)境溫度一變或者板子之間個(gè)體差異一大就出問題。現(xiàn)象是邏輯分析儀看時(shí)序CS# 下降沿離 CLK 采樣邊沿太近甚至重疊主控已經(jīng)開始發(fā)起事務(wù)EC 這邊的 CS# 還沒穩(wěn)定。原因幾乎都是走線長(zhǎng)度失配CS# 走線比 CLK 長(zhǎng)或者 CS# 上帶了額外的負(fù)載調(diào)試連接器、測(cè)試點(diǎn)上拉等導(dǎo)致 CS# 延遲偏大。解決辦法把 CS# 和 CLK 做嚴(yán)格等長(zhǎng)如果 CS# 上有分支盡量剪掉。這里有個(gè)經(jīng)驗(yàn)數(shù)據(jù)線稍微短一點(diǎn)問題不大CS# 一定不要比 CLK 晚太多因?yàn)檎麄€(gè)傳輸事務(wù)是由 CS# 拉低觸發(fā)的它晚了后面所有數(shù)據(jù)采樣都跟著完蛋。5.4 經(jīng)典故障串?dāng)_毛刺我曾經(jīng)在一個(gè)項(xiàng)目里被一個(gè)奇怪的現(xiàn)象折磨了兩天正常功能都能跑但只要相鄰信號(hào)有大量翻轉(zhuǎn)EC 偶爾就讀錯(cuò) Flash 里的配置數(shù)據(jù)。用示波器余輝模式抓波形發(fā)現(xiàn) CLK 上偶爾出現(xiàn)非預(yù)期的毛刺出現(xiàn)時(shí)間恰好和 D0/D1 的翻轉(zhuǎn)沿對(duì)齊。這就是典型的串?dāng)_。當(dāng)時(shí)那根 CLK 和 D0 并行了將近 4 英寸間距只有 5mil當(dāng)時(shí)對(duì)低速信號(hào)放松了警惕。后來把間距拉大到 10mil中間又加了一條地線毛刺基本消失。串?dāng)_毛刺難查的原因是你不一定每次都能復(fù)現(xiàn)要結(jié)合邏輯分析儀和示波器同時(shí)運(yùn)行才能抓到。建議排查時(shí)先看相鄰信號(hào)再看回流路徑最后看驅(qū)動(dòng)能力。不要急著改板先用飛線把可調(diào)間距的位置處理一下確認(rèn)是串?dāng)_再動(dòng)手改版。6. 仿真工具與檢查清單6.1 什么時(shí)候值得做仿真低速信號(hào)設(shè)計(jì)到底要不要做仿真我的判斷標(biāo)準(zhǔn)很簡(jiǎn)單走線很短、負(fù)載單一、布局緊湊不需要仿真按規(guī)則設(shè)計(jì)就夠。但如果你面臨以下情況建議花點(diǎn)時(shí)間做一輪仿真eSPI 信號(hào)走線超過 6 英寸、總線上掛了多個(gè)從設(shè)備、CLK 和 D0/D1 并行長(zhǎng)度很長(zhǎng)、或者你對(duì)這種拓?fù)淙狈扔薪?jīng)驗(yàn)。仿真工具可選 HyperLynx、Sigrity 或者 ADS流程大同小異提取 IC 的 IBIS 模型畫出拓?fù)浣Y(jié)構(gòu)設(shè)置走線阻抗和長(zhǎng)度跑一遍瞬態(tài)看波形。對(duì)于 eSPI 這種信號(hào)仿真精度不需要做到像 DDR 那樣極致重點(diǎn)是看趨勢(shì)串阻從 22Ω 調(diào)到 33Ω 波形往哪個(gè)方向變走線拉長(zhǎng)之后沿有多劣化。我實(shí)際用仿真的體會(huì)是它的最大價(jià)值不是給你一個(gè)“能跑/不能跑”的結(jié)論而是幫你在打樣之前預(yù)判問題方向。仿真掃一遍不同阻值下的波形你就知道該選 22Ω 還是 33Ω不用等板子回來一遍遍換電阻試。6.2 打樣前的自查清單這里分享一份我自己打樣前必過一遍的 eSPI 信號(hào)檢查表每條都是踩過坑總結(jié)出來的不是從文檔里抄的檢查項(xiàng)建議值/處理方式阻抗控制單端 50Ω ±10%參考平面優(yōu)先走在參考 GND 的層不跨分割等長(zhǎng)約束CLK 與 D0/D1 偏差 ≤ ±100milCS# 等長(zhǎng)CS# 相對(duì) CLK 偏差盡量小寧短勿長(zhǎng)串聯(lián)端接22Ω/33Ω靠近驅(qū)動(dòng)端上下拉Alert# 預(yù)留 10kΩ 上拉CS# 可選上拉并行間距至少 3W長(zhǎng)并行 4W~5W過孔數(shù)量單根信號(hào)不超過 1 個(gè)回流地孔換層處放置回流地過孔分支/Stub盡量無分支測(cè)試點(diǎn)用 0Ω 隔離每條都過一遍再投板大概率能省掉一輪調(diào)試時(shí)間。如果你中途發(fā)現(xiàn)問題寧可推倒重布也不要硬著頭皮繼續(xù)低速信號(hào)設(shè)計(jì)的錯(cuò)誤往往是最省事的驗(yàn)證方式——上電一瞬間就暴露。最后再分享一個(gè)實(shí)際項(xiàng)目里養(yǎng)成的習(xí)慣每次畫 eSPI我都在原理圖里給串阻留出 22Ω、33Ω 兩個(gè)候選封裝位給上拉留出 10kΩ 空焊位板子回來先按默認(rèn)值貼測(cè)試發(fā)現(xiàn)問題再調(diào)。這種“預(yù)留出可調(diào)空間”的做法比試圖在第一次設(shè)計(jì)里就保證絕對(duì)完美要現(xiàn)實(shí)得多。低速信號(hào)設(shè)計(jì)的魅力就在這——原理簡(jiǎn)單但每個(gè)細(xì)節(jié)都值得較真。處理好 eSPI 這組信號(hào)你對(duì)整個(gè)低速信號(hào)設(shè)計(jì)體系的理解基本也就到位了。