硬件設(shè)計實戰(zhàn):從原理圖到PCB調(diào)試)
做嵌入式聯(lián)網(wǎng)項目STM32F407配LAN8720A幾乎是繞不開的組合。F407自帶MAC控制器外部PHY選LAN8720ARMII接口下只占7根信號線單3.3V供電成本也壓得下來這幾年工業(yè)采集網(wǎng)關(guān)、串口服務(wù)器、測試板卡上到處都能看到這套搭配。但恰恰是這種“參考手冊照抄就能用”的方案實際畫板時坑不少X1/X2時鐘走有源還是無源、TXD和TX_EN之間要不要做等長、變壓器中心抽頭接到哪、PHY地址到底是0還是1……這些細(xì)節(jié)一旦翻車輕則網(wǎng)口插上不識別重則PHY發(fā)燙、整板功耗異常。這個項目本身不是多復(fù)雜的大板子但正好踩遍了以太網(wǎng)PHY硬件設(shè)計的主要雷區(qū)。如果你正要畫F407的板子或者已經(jīng)在調(diào)試LAN8720A死活不通這篇內(nèi)容值得花幾分鐘看完。我會從選型邏輯、原理圖每個引腳、外圍變壓器、PCB布局到聯(lián)調(diào)驗證一條龍講清楚重點(diǎn)放“為什么這么做”而不是只給你一份能抄的圖紙。1. 方案選型為什么F407工程師多數(shù)選了LAN8720A1.1 F407以太網(wǎng)外設(shè)與PHY的基本分工STM32F407內(nèi)部集成了以太網(wǎng)MAC控制器但物理層信號收發(fā)做不了需要一顆外部PHY芯片來干活。MAC和PHY之間的接口有MII和RMII兩種模式MII需要16根信號線數(shù)據(jù)總線是4位的TXD[3:0]和RXD[3:0]還要單獨(dú)引出TX_CLK、RX_CLK、RX_DV、RX_ER、CRS、COL等控制信號引腳占用非常大對F407這種QFP100/144封裝的芯片來說佈線壓力不小。RMII模式把數(shù)據(jù)線砍到2位收發(fā)一共只需要TXD[1:0]、RXD[1:0]、TX_EN、CRS_DV和REF_CLK這7根信號線100Mbps帶寬下用50MHz時鐘就能跑滿。說白了RMII就是用“提高PHY側(cè)時鐘頻率”來換“減少M(fèi)CU引腳占用”。F407的ETH外設(shè)這兩種模式都支持我在實際項目里基本都選RMII因為省下的引腳能留給人機(jī)交互、傳感器采集、RS485擴(kuò)展這些更有價值的功能。LAN8720A是SMSC現(xiàn)在是Microchip旗下主打低功耗的百兆以太網(wǎng)PHY內(nèi)置1.2V穩(wěn)壓器單3.3V供電就能工作不需要額外的1.2V電源平面。官方標(biāo)稱正常工作電流大概六七十毫安實際跑起來也就幾十mA量級配合F407做低功耗網(wǎng)關(guān)非常合適。它支持Auto-MDIX自動翻轉(zhuǎn)、自協(xié)商、節(jié)能以太網(wǎng)這些常規(guī)功能封裝是QFN24體積很小適合對板面積敏感的產(chǎn)品。1.2 與DP83848、KSZ8081、YT8512H的橫向?qū)Ρ扔腥藭枮槭裁床挥肨i的DP83848或者M(jìn)icrochip自家的KSZ8081還有國產(chǎn)的YT8512H這里我把幾個常見方案放在一起對比一下PHY芯片接口供電功耗典型值封裝參考設(shè)計復(fù)雜度LAN8720ARMII3.3V單電源約70mAQFN24低內(nèi)置穩(wěn)壓器DP83848IMII/RMII3.3V需額外注意模擬/數(shù)字電源隔離約110mALQFP48中等引腳多KSZ8081MII/RMII3.3V單電源約70mAQFN32低和LAN8720A接近YT8512HMII/RMII3.3V單電源約70mAQFN32低兼容類設(shè)計從參數(shù)看LAN8720A并不是性能最強(qiáng)的那顆但它的優(yōu)勢在于應(yīng)用時間久、參考電路驗證充分、價格便宜、QFN24封裝小而且F407官方評估板以及網(wǎng)上大量開源項目都默認(rèn)用這顆芯片遇到問題很容易找到對照資料。DP83848雖然是經(jīng)典老將穩(wěn)定性和溫度范圍不錯但封裝大、外圍去耦要求高對多數(shù)中小項目來說“沒必要”。KSZ8081和LAN8720A基本是同級別替代引腳不直接兼容需要改原理圖。YT8512H這幾年在一些國產(chǎn)方案里也不少晶振電路和寄存器初始化略有差異新手不建議拿來做首板。另外注意這些PHY基本都是電壓型PHY差分線可以直接和變壓器對接不需要額外加偏置電阻而部分老款電流型PHY需要外部電阻提供直流偏置接法完全不同。選型時如果看到別人設(shè)計里差分線上串了一堆電阻先確認(rèn)是阻抗匹配還是電流型PHY的偏置需求別盲目照抄。2. LAN8720A原理圖核心每個引腳都在干什么2.1 RMII接口信號與引腳規(guī)劃RMII模式下LAN8720A與F407相連的關(guān)鍵信號主要有以下幾組TXD[1:0]發(fā)送數(shù)據(jù)MCU側(cè)輸出到PHY由F407的ETH_TXD0/ETH_TXD1驅(qū)動傳輸速率100Mbps時有效數(shù)據(jù)位2位10Mbps時仍按2位傳輸只是時鐘頻率降低。TX_EN發(fā)送使能高電平表示TXD上的數(shù)據(jù)有效必須和TXD[1:0]同步變化。RXD[1:0]接收數(shù)據(jù)PHY輸出給F407不需要額外時鐘線數(shù)據(jù)隨REF_CLK同步。CRS_DV載波偵聽/數(shù)據(jù)有效復(fù)用線在RMII模式下同時承載CRS和RX_DV兩個信息PHY內(nèi)部處理后由這根線輸出給MCU的ETH_CRS_DV引腳。新手最容易在這里踩坑把CRS_DV接到F407的RX_DV專用引腳上導(dǎo)致接收路徑完全不通。MDC/MDIO管理接口用于讀寫PHY內(nèi)部寄存器MCU通過MDC時鐘線和MDIO雙向數(shù)據(jù)線完成配置。原理圖階段我建議在每個RMII信號線上預(yù)留串聯(lián)電阻位阻值22到33Ω位置放在靠近MCU一側(cè)。這么做有兩個好處一是高速信號的振鈴能被適當(dāng)抑制二是調(diào)試時可以直接斷開某一路信號方便用示波器單個排查。除了串阻還要在F407側(cè)給這些信號預(yù)留測試點(diǎn)特別是TXD[0]、TXD[1]、TX_EN、CRS_DV四根線。后面聯(lián)調(diào)時如果ping不通首先要確認(rèn)的就是這四個信號在PHY引腳上有沒有正確的電平翻轉(zhuǎn)。2.2 時鐘方案50MHz外部時鐘和無源晶振怎么選LAN8720A的X1/X2引腳支持兩種時鐘輸入方式這也是原理圖設(shè)計中最容易糾結(jié)的地方。第一種是外部50MHz時鐘直接接到X1X2懸空。這里的時鐘必須是有源時鐘或者M(jìn)CU輸出的時鐘信號不能是無源晶振。STM32F407的MCO1引腳PA8可以配置輸出PLL時鐘當(dāng)系統(tǒng)時鐘為168MHz、PLL分頻配置合適時MCO1正好可以輸出50MHz。把這個時鐘接到LAN8720A的X1就實現(xiàn)了MCU和PHY共用一個時鐘源省掉一顆晶振還避免兩個獨(dú)立晶振之間的頻率偏差。第二種是25MHz無源晶振接X1/X2由LAN8720A內(nèi)部PLL倍頻產(chǎn)生50MHz的REF_CLK。這種方案下如果F407側(cè)需要REF_CLK可以讓PHY的REF_CLK輸出給MCU也可以再單獨(dú)用一顆50MHz有源晶振給MCU但這樣就有兩個時鐘源設(shè)計冗余且可能存在相位抖動問題。我個人的選擇是優(yōu)先用F407的MCO1輸出50MHz給LAN8720A原理圖簡單、時鐘同源調(diào)試時也只要量一個點(diǎn)。注意MCO1輸出要和GPIO復(fù)用功能配置正確CubeMX里選ETH外設(shè)時如果勾選了RMII會提示MCO1引腳沖突直接按工具分配即可。如果PA8被其他功能占用就老實使用25MHz無源晶振加PHY內(nèi)部PLL方案不再用雙時鐘源。無源晶振方案需要注意負(fù)載電容匹配LAN8720A數(shù)據(jù)手冊推薦值一般是18pF或22pF具體以晶振廠家規(guī)格為準(zhǔn)。晶振兩端建議各對地接一個電容晶振本體盡量靠近X1/X2引腳PCB上不要打過孔晶振下方不要走其他信號線。2.3 電源、去耦與PHY地址配置LAN8720A的電源引腳分幾類VDD和VDDIO通常統(tǒng)一接3.3V負(fù)責(zé)芯片數(shù)字和I/O供電VDDCR是內(nèi)部1.2V核心電壓的輸出引腳不是輸入這個特別容易被搞反。VDDCR外部只需要加去耦電容絕對不能把3.3V直接灌進(jìn)去否則芯片大概率直接燒壞或者嚴(yán)重發(fā)燙。去耦電容的擺放原則是每個電源引腳就近放一個0.1uF陶瓷電容電容到電源引腳走線盡量短最好直接打過孔扇出芯片背面或電源入口處再加一個4.7uF到10uF的鉭電容做低頻儲能。很多人在原理圖上畫了電容但Layout時放得離引腳很遠(yuǎn)結(jié)果等于沒放。PHY地址通過PHYAD0引腳配置把PHYAD0拉低MDIO地址為0拉高地址為1。絕大多數(shù)STM32以太網(wǎng)驅(qū)動和CubeMX配置默認(rèn)PHY地址為0如果你的板子為了布線方便把PHYAD0拉高了后續(xù)軟件初始化就一定會卡在PHY復(fù)位或讀取ID超時。所以原理圖階段就要把PHYAD0的接法固定下來并在工程文檔里記清楚。LAN8720A還有幾個復(fù)合功能引腳比如nINT/REGOFF這類它們同時承擔(dān)中斷輸出、內(nèi)部LDO關(guān)斷控制等作用必須嚴(yán)格按參考設(shè)計接不能想當(dāng)然當(dāng)普通GPIO隨便拉高拉低。我見過有人把REGOFF誤接高電平導(dǎo)致內(nèi)部穩(wěn)壓器被關(guān)斷整個PHY根本沒有核心供電網(wǎng)口自然完全沒反應(yīng)。3. 外圍關(guān)鍵電路網(wǎng)絡(luò)變壓器、RJ45與ESD防護(hù)3.1 網(wǎng)絡(luò)變壓器的作用PHY芯片的差分信號線不能直接接到RJ45插座上中間一般要經(jīng)過網(wǎng)絡(luò)變壓器。變壓器在這里起了多重作用電氣隔離把PHY側(cè)的地和外部網(wǎng)線地徹底隔開防止共地環(huán)路帶來的干擾和安全隱患共模抑制網(wǎng)線在長距離傳輸中會感應(yīng)各種共模噪聲變壓器通過共模扼流圈結(jié)構(gòu)把這些噪聲濾掉阻抗匹配保證差分信號在PHY、變壓器、網(wǎng)線之間保持100Ω特征阻抗減小反射。以太網(wǎng)差分信號本質(zhì)上是帶直流偏置的高速信號變壓器通過磁耦合把直流分量隔掉只讓交流信號通過。所以不要因為“板子上空間不夠”或者“只是調(diào)試用”就省掉變壓器那基本上是在給自己挖坑。之前有個朋友為了省那幾塊錢成本直接把PHY差分線接到RJ45針腳結(jié)果只有自己和自己測試沒問題跟交換機(jī)一接就瘋狂丟包最后老老實實改板。RJ45可以選擇集成變壓器的型號比如HR911105A、RJ45帶網(wǎng)絡(luò)變壓器的模組都是常見選擇電氣上把變壓器和座子合二為一布局更省空間外圍也更簡潔。如果選分離方案就是一顆獨(dú)立網(wǎng)絡(luò)變壓器模塊如HX1188NL1:1隔離普通RJ45靈活性更高但PCB上要分開放布局要求也高。3.2 中心抽頭接法不要閉眼抄參考設(shè)計網(wǎng)絡(luò)變壓器內(nèi)部有兩組繞組分別對應(yīng)TX和RX差分對每組繞組都有中心抽頭這個中心抽頭的接法直接決定PHY能否正常工作。LAN8720A參考設(shè)計中中心抽頭的處理方式有其默認(rèn)推薦但不同變壓器廠商的繞線結(jié)構(gòu)可能不同最穩(wěn)妥的做法是查你所選變壓器型號的手冊看它推薦的抽頭接法。HR911105A這類集成變壓器RJ45內(nèi)部一般已經(jīng)把中心抽頭和匹配電容都處理好了外部只管連接差分對即可方便但也要確認(rèn)內(nèi)部結(jié)構(gòu)是否與PHY匹配。分離式變壓器方案則常在RJ45內(nèi)側(cè)做Bob Smith端接四對線對與地之間通過51Ω或75Ω電阻再串1000pF/2kV高壓電容連到外殼地用來泄放共模干擾和靜電。注意外殼地要和數(shù)字地用高壓電容和大電阻跨接不能直接大面積短接防止機(jī)殼靜電直接灌進(jìn)板子。調(diào)試時如果出現(xiàn)link燈閃爍不穩(wěn)定或者只有10M能通100M不通先用示波器量差分對再用萬用表量中心抽頭電壓。很多這類問題都是中心抽頭焊錯位置或者焊接虛焊導(dǎo)致直流偏置不對PHY的接收端工作點(diǎn)異常信號質(zhì)量很差。3.3 ESD與防浪涌設(shè)計要點(diǎn)以太網(wǎng)接口是板卡最容易遭受靜電和浪涌沖擊的位置因為網(wǎng)線常年暴露在外部插拔瞬間、雷雨天氣的感應(yīng)浪涌都可能從RJ45侵入。在靠近RJ45內(nèi)側(cè)放置TVS陣列是標(biāo)配比如SLVU2.8-4、USBLC6-2SC6這類專為以太網(wǎng)設(shè)計的TVS鉗位電壓選5V以內(nèi)的結(jié)電容盡量小幾pF級別接在差分線和外殼地之間。關(guān)鍵點(diǎn)在于TVS要放在變壓器的線纜側(cè)也就是靠近RJ45那一端不能放在PHY這邊。變壓器隔離的是PHY和網(wǎng)線如果TVS放在PHY側(cè)外部浪涌要先穿過變壓器此時變壓器已經(jīng)出現(xiàn)高壓擊穿風(fēng)險TVS就幫不上忙。另外RJ45金屬外殼的固定腳要連接外殼地不要懸空。這些細(xì)節(jié)在原理圖上看起來都一樣但Layout和接地方式不同抗干擾能力差距非常大。4. 原理圖優(yōu)化與PCB布局經(jīng)驗4.1 從參考設(shè)計出發(fā)可以做的3處優(yōu)化官方參考設(shè)計只能保證“能工作”離“好生產(chǎn)、好調(diào)試”還有一段距離。我在畫F407LAN8720A這塊板時做了幾處針對性優(yōu)化。第一所有RMII信號串聯(lián)電阻預(yù)留測試點(diǎn)位。串阻選33Ω靠近MCU引腳側(cè)放置旁邊留過孔做測試點(diǎn)。這樣調(diào)試時如果懷疑某根信號線有問題可以直接斷開串阻從MCU側(cè)和PHY側(cè)分別測量快速定位問題。第二LAN8720A的復(fù)位電路不要只用一個簡單的RC。nRST低電平有效上電后要保證復(fù)位時間足夠長確保內(nèi)部穩(wěn)壓器穩(wěn)定輸出。我習(xí)慣用10kΩ電阻上拉加上1uF電容到地這樣上電復(fù)位時間約10毫秒足夠穩(wěn)妥。如果F407的復(fù)位引腳資源足夠也可以用GPIO控制PHY復(fù)位CubeMX里配置一個輸出引腳軟件上電后延時幾十毫秒再釋放復(fù)位這樣調(diào)試時可以隨時軟復(fù)位PHY。第三LED指示電路必須加限流電阻。LAN8720A的LED引腳內(nèi)部驅(qū)動能力有限直接外接高亮LED不加電阻輕則亮度刺眼、影響壽命重則超過引腳最大電流。串470Ω到1kΩ電阻根據(jù)LED壓降計算即可。另外LED引腳默認(rèn)的極性是低電平點(diǎn)亮還是高電平點(diǎn)亮不同型號和引腳配置不一樣原理圖階段就要確認(rèn)。4.2 差分對、時鐘信號與整板布局PCB布局上高速信號最核心的原則是信號路徑要短回流路徑要完整阻抗要匹配。以太網(wǎng)PHY到變壓器這一段是真正的差分信號必須按100Ω差分阻抗布線寬和線距由疊層結(jié)構(gòu)決定一般表層差分線線寬5到7mil、間距8到10mil具體用阻抗計算工具算清楚。RMII信號雖然都是單端信號但TXD[0]、TXD[1]、TX_EN這三根線建議做等長處理長度差控制在1mm以內(nèi)。原因是這三個信號要同步發(fā)送如果時序偏差過大PHY側(cè)采樣時數(shù)據(jù)已經(jīng)發(fā)生變化就會出現(xiàn)偶發(fā)丟幀、網(wǎng)絡(luò)時延抖動。實測中如果等長差太多輕則100M不通重則自協(xié)商都不成功。地平面處理上變壓器下方要掏空整個內(nèi)層銅皮避免變壓器線圈通過寄生電容耦合到數(shù)字地平面形成共模干擾。變壓器區(qū)域的地單獨(dú)劃出來做EGNDEGND和主GND之間通過0Ω電阻或磁珠跨接再并聯(lián)一顆高壓電容增強(qiáng)高頻隔離。PHY芯片底部散熱焊盤必須接地通過多個過孔打到主地平面既散熱又降低地阻抗。4.3 晶振和50MHz時鐘的布局禁忌如果采用MCO1輸出50MHz給PHY這路時鐘線要當(dāng)作高速信號對待。它不能和TXD、RXD差分線長距離并行間隔至少3倍線寬以上最好在兩路信號之間加一條地線隔離。時鐘線自己也要盡量短、直、少打過孔不能繞來繞去。這塊板第一次Layout時MCO1走線從PHY的RXD差分對附近繞了一圈結(jié)果實測以太網(wǎng)丟包率很高。后來把時鐘線改短、避開差分區(qū)問題才解決。凡是這類高速數(shù)字信號時鐘路徑的每一寸都值得認(rèn)真對待。無源晶振方案更要注意晶振必須貼著X1/X2引腳放晶振下方不能走任何信號線晶振兩端電容的地過孔要直接到主地平面。5. CubeMX配置與硬件聯(lián)調(diào)全流程5.1 CubeMX端3個關(guān)鍵配置硬件畫完只是開始F407的以太網(wǎng)外設(shè)初始化也要配合好。STM32CubeMX里打開ETH外設(shè)后選擇RMII模式PHY Address這里填0要和PHYAD0引腳實際接法對應(yīng)。PHY Clock選擇MCO1輸出50MHz工具會自動把PA8切換到復(fù)用功能并提示相關(guān)引腳沖突按提示確認(rèn)即可。復(fù)位腳配置成GPIO輸出比如用PA1接LAN8720A的nRSTCubeMX里把它配成GPIO Output初始電平設(shè)高或低都可以后面代碼里先拉低再拉高完成復(fù)位。DMA配置建議打開收發(fā)各分配一個DMA通道減少CPU中斷負(fù)擔(dān)。MAC地址可以先用固定的靜態(tài)地址后期再考慮從外部存儲讀取。這里容易忽略的是MDIO必須配置為開漏輸出帶上拉PHY的管理接口是雙向工作機(jī)制開漏加外部上拉才能正常讀寫寄存器。CubeMX里MDIO對應(yīng)的GPIO要選開漏模式內(nèi)部上拉默認(rèn)打開一般夠用如果板子上MDIO走線較長建議在原理圖上再外接一個2.2kΩ上拉電阻。5.2 上電后按順序做的5分鐘驗證拿到新板子不要急著跑網(wǎng)絡(luò)協(xié)議棧按下面的順序做驗證能省大量排查時間。第一步測電源。用萬用表量3.3V是否正常量LAN8720A的VDDCR引腳電壓應(yīng)該在1.2V左右。如果VDDCR是0V先檢查3.3V有沒有到芯片再懷疑焊接問題如果VDDCR接近3.3V馬上斷電查是不是把外部電源錯接到了VDDCR引腳。第二步示波器看50MHz時鐘。找到PHY的X1引腳或REF_CLK引腳用示波器量有沒有穩(wěn)定的50MHz方波或正弦波疊加上直流。沒有時鐘說明MCO1配置不對或晶振沒起振此時后面所有驗證都不用繼續(xù)。第三步量RMII信號。用示波器或邏輯分析儀看TXD、TX_EN、CRS_DV在MCU初始化后是否有信號翻轉(zhuǎn)。特別注意CRS_DV在空閑時是低還是高它應(yīng)該和PHY狀態(tài)一致。第四步插網(wǎng)線看link狀態(tài)。接上交換機(jī)或電腦網(wǎng)口看LAN8720A的link LED是否常亮或閃爍注意鎖定LED極性和工作模式。第五步讀PHY寄存器。通過MDIO接口讀取PHY IDLAN8720A應(yīng)該能讀到OUI和Model ID組合出來的固定值。能讀回ID說明MDIO管理通道正常鏈路物理層已經(jīng)工作。// 以F407的LwIP驅(qū)動為例讀取PHY ID寄存器 uint32_t phy_id 0; // LAN8720A的寄存器2是PHYIDR1寄存器3是PHYIDR2 uint32_t idr1 ETH_ReadPHYRegister(0, 2); // PHY地址0寄存器2 uint32_t idr2 ETH_ReadPHYRegister(0, 3); // PHY地址0寄存器3 phy_id (idr1 16) | idr2; // LAN8720A的IDR1/IDR2組合結(jié)果應(yīng)能識別為LAN8720A家族5.3 軟件調(diào)試中容易踩的三個坑第一個坑是PHY地址不一致硬件PHYAD0引腳拉低了軟件里卻填地址1MDIO讀寫全部超時。CubeMX里的PHY Address要和硬件一一對應(yīng)如果改了硬件跳線軟件也要跟著改。第二個坑是MDIO沒有上拉。MDIO是雙向開漏信號必須有上拉電阻才能正常拉高。F407內(nèi)部上拉通常能用但自己在原理圖上加一顆2.2kΩ到3.3V最穩(wěn)妥。之前調(diào)一塊板子時MDIO走線穿過了一個排針區(qū)域寄生電容比較大內(nèi)部上拉不夠?qū)е伦x寄存器隨機(jī)失敗補(bǔ)了外部上拉后正常。第三個坑是復(fù)位后沒有延時。PHY上電后內(nèi)部需要時間完成自校準(zhǔn)和穩(wěn)壓器啟動上電或復(fù)位釋放后至少要延時10毫秒再訪問寄存器。很多驅(qū)動代碼里復(fù)位后緊接著就訪問PHY導(dǎo)致初始化失敗。我習(xí)慣在PHY復(fù)位釋放后直接延時20毫秒穩(wěn)一點(diǎn)沒壞處。6. 常見問題與排查技巧實錄6.1 問題速查表現(xiàn)象可能原因排查順序插網(wǎng)線link燈完全不亮PHY供電、時鐘、復(fù)位不正?;蜃儔浩髦行某轭^接錯量3.3V和VDDCR電壓示波器看50MHz時鐘檢查復(fù)位電平最后量變壓器引腳link燈亮但ping不通RMII信號線接錯、MDIO配置錯誤、軟件PHY地址不對確認(rèn)CRS_DV接的是ETH_CRS_DV而非RX_DV檢查CubeMX里PHY地址和MDIO引腳只有10M能通100M不通差分對阻抗不匹配或變壓器中心抽頭偏置不對或TX信號等長差太多檢查差分線阻抗量中心抽頭電壓核對TXD[1:0]和TX_EN布線長度偶爾丟包、ping時延抖動時鐘質(zhì)量問題、地平面分割、相鄰信號串?dāng)_示波器看MCO1時鐘抖動檢查變壓器區(qū)是否掏空鋪銅檢查時鐘線是否靠近差分線PHY芯片發(fā)燙VDDCR外接錯電源、電源去耦不足、引腳焊接短路斷電萬用表量各電源引腳對地阻值排查焊接連錫核對VDDCR接法只有自己的板子不通換別人板子正常PHY復(fù)位時序不夠、軟件配置問題在PHY復(fù)位后加長延時確認(rèn)軟件PHY地址、時鐘配置匹配6.2 一次“玄學(xué)”問題的排查實錄這塊板子調(diào)試時也遇到了一個非常典型的疑難雜癥網(wǎng)線插上link燈正常亮自協(xié)商能過但ping包偶發(fā)超時重試幾次又能通。一開始懷疑軟件問題把LwIP參數(shù)來回調(diào)沒解決。后來用示波器抓PHY的RXD信號發(fā)現(xiàn)接收數(shù)據(jù)在個別字節(jié)上有毛刺正好發(fā)生在差分線經(jīng)過變壓器到RJ45的那一段。用萬用表逐個點(diǎn)量RJ45母座引腳對地阻值發(fā)現(xiàn)其中一個差分對引腳對地阻值比理論值低了接近一倍拆下來看是RJ45座子焊接時錫膏橋接把中心抽頭和其中一個差分腳之間拉了一條毛刺。這類問題最難的地方在于它不穩(wěn)定時好時壞。經(jīng)驗是先分層——物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層一步步隔離再結(jié)合示波器看信號質(zhì)量不要一上來就懷疑協(xié)議棧。后面我把RJ45封裝改成底部開大窗的手工焊盤徹底杜絕了焊接橋接隱患再也沒出現(xiàn)過類似丟包。這個板子的經(jīng)驗也是我在后續(xù)所有以太網(wǎng)項目里一定會執(zhí)行的一條原則LAN8720A外圍電路盡量照官方參考設(shè)計走但每處接法的“原因”必須自己搞清楚。中心抽頭為什么接這里、時鐘為什么從MCO出、串阻為什么要預(yù)留全弄明白了以后再換PHY芯片、再畫新板子都不會被同一批問題絆住。如果你現(xiàn)在正在調(diào)F407LAN8720A把上面這些點(diǎn)挨個核對一遍大概率能少熬好幾個通宵。