ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

以太网PHY芯片直连免变压器:3种接线图与实现原理

以太网PHY芯片直连免变压器:3种接线图与实现原理 做嵌入式以太网调试这么多年我越来越觉得真正让人头疼的往往不是协议栈也不是那几行初始化代码而是RJ45座子旁边那个绕线的小变压器。体积大、成本高、选型时还要纠结共模电感和匝数比尤其是在做板级测试、产测治具或者两块开发板对拷的时候这颗隔离变压器几乎就是纯累赘。那问题来了以太网PHY芯片和PHY芯片之间能不能把变压器拿掉直接连答案是能。只要把MDI差分线按照“一发一收交叉对接”的规则接好LAN8720A、DP83848这些常见百兆PHY都能稳定跑在100Mbps。这篇文章就专门讲清楚这件事核心是3种PHY芯片组合的接线图以及背后的原理和边界条件。做ESP32、STM32以太网通信自己画板子做内部互联的朋友这篇搭配你们的原理图看能省下不少弯路。1. 先搞清楚以太网变压器到底在干什么很多人一听“不用变压器”第一反应是“网口不是必须带隔离吗”。这个想法没错但得看用在什么场景。要判断能不能省先得明白以太网变压器在这条链路上扮演的角色。1.1 变压器不是“升压降压”而是隔离与耦合以太网口上用的变压器通常叫网络隔离变压器也有人叫磁性元件磁珠网口里那个黑色的小方块就是它。对于百兆以太网100BASE-TX来说变压器的匝数比一般是1:1所以它不做电压变换主要干四件事。第一是电气隔离。PHY芯片出来的差分信号是直流耦合的如果不加变压器两端设备的直流电位会直接导通一旦地电位不一致就会形成地环路电流轻则信号质量恶化重则烧毁PHY芯片。变压器通过磁耦合传递交流信号同时把两边的直流回路彻底隔开。第二是共模抑制。外界电磁干扰通常以共模形式耦合在线缆上表现为两根线对地的电压同时抬高或降低。变压器对共模信号呈现高阻抗再加上中心抽头通常会通过电容接地就能把共模干扰导走。这也解释了为什么差分信号本身抗干扰变压器又补了一层共模防护。第三是提供直流偏置路径。很多PHY芯片的MDI引脚输出级是电流模式驱动内部没有完整的直流回路需要依赖变压器中心抽头提供偏置电压。这个点非常关键后面讲接线图时会反复提到它直接决定了背靠背直连时你要不要额外补电阻。第四是配合完成AC耦合。变压器本身就是个高通通路会把PHY发送端的直流分量滤掉只把交流信号耦合到对端。背靠背直连时这一功能可以由PHY内部的耦合电路或外部的交流耦合电容来替代。1.2 省变压器的边界条件既然变压器承担了这么多职责那什么时候可以放心大胆地省掉它我给一个比较实用的判断标准两端PHY必须共地、距离短、环境可控。“共地”是最硬性的条件。同一个PCB上两个PHY直连或者两块开发板之间用短排线连接只要地线路径足够短、足够粗地电位基本一致地环路电流的问题就不存在。这种情况下变压器的隔离功能就失去了意义。“距离短”也很关键。百兆以太网的MDI差分信号本身是为100米双绞线设计的但在没有变压器、没有共模电感的情况下传输距离建议控制在10厘米以内最多不要超过30厘米。距离一旦拉长信号完整性会明显变差尤其是在PCB走线参考平面不连续的时候。“环境可控”指的是场景。实验室调试、板卡内部互联、产测治具、固件升级通道这些场景电磁环境相对干净没有雷击浪涌风险省掉变压器完全没问题。但如果这个接口要引到机箱外面、接标准网线、过认证测试那就必须老老实实装回隔离变压器甚至还需要配合共模电感和TVS管。这是原则不能省。2. 3种PHY芯片组合接线图详解原理说完了下面进入标题里的重头戏3种PHY芯片组合的具体接法。我按从简单到复杂、从常见到特殊的顺序来排每一种都给出对应的接线关系表和关键参数方便你直接照抄。2.1 组合一LAN8720A 对 LAN8720A这个组合最常见因为LAN8720A是ESP32、STM32以太网方案里用到最多的百兆PHY。小封装、低功耗、RMII接口一颗芯片加几个阻容就能跑起来。两个LAN8720A背靠背连接信号关系可以概括为一句话A的发送接B的接收A的接收接B的发送。具体引脚对应如下LAN8720A侧ALAN8720A侧B方向TXRXA发送到BTX-RX-A发送到BRXTXB发送到ARX-TX-B发送到A这里有个容易搞混的地方以太网PHY的MDI引脚本身就是差分对TX和TX-是一对RX和RX-是一对接的时候不能把TX接到B的TX-上必须成对交叉。交叉的含义是“发送对接收”交叉不是“正负号”交叉。也就是说A的TX要接到B的RX而不是B的TX。关键问题来了LAN8720A的MDI引脚需要变压器中心抽头来提供偏置现在变压器没了怎么办实际工程里我会在A、B两侧各补一套端接网络。每套网络由三个元件组成一个100欧姆电阻跨接在TX和TX-之间作为差分阻抗匹配一个0.1微法陶瓷电容一端接在100欧姆电阻的中点另一端接地为发送驱动级提供交流回流路径。RX侧同理。这里加100欧姆的原因是为了匹配以太网双绞线的100欧姆差分阻抗。虽然背靠背直连不经过双绞线但PHY芯片的收发驱动器和接收器都是按100欧姆差分阻抗设计的输出级是电流驱动型如果不对端接电阻交流信号反射会非常严重实测表现就是link时断时续或者说能ping通但持续大流量时丢包严重。电容的作用则是替代变压器的AC耦合功能。有些设计还会在中点和地之间再串一个分压电阻网络把中点偏置到某个直流电位比如用两个10千欧姆电阻分压得到1.65伏。我在调试中发现LAN8720A在交流接地方式下工作正常如果信号质量不够好加入分压偏置后眼图会明显更干净。接线的时候还有一点要注意LAN8720A的数据手册里MDI引脚有明确的命名叫TX、TX-、RX、RX-但有些PHY叫TD、TD-、RD、RD-本质是同一回事只是命名习惯不同。2.2 组合二LAN8720A 对 DP83848第二种组合常见于“一个ESP32模块和一个带DP83848的开发板之间做通信”。DP83848是TI的经典十百兆PHY在很多STM32官方评估板上都能看到和LAN8720A一样都支持RMII接口。这个组合的难点不在交叉接线本身而在于两个PHY芯片的MDI输出结构不同。前面说了LAN8720A需要外部变压器中心抽头提供偏置和回流路径而DP83848的MDI引脚内部集成了一部分端接和偏置电路在很多参考设计里DP83848的变压器中心抽头只需要通过一个电容接地。这意味着背靠背连接时DP83848那一侧可以省掉额外端接而LAN8720A那一侧仍然需要补齐100欧姆端接和回流电容。引脚对应关系如下功能LAN8720A侧DP83848侧发送差分正TXRD发送差分负TX-RD-接收差分正RXTD接收差分负RX-TD-注意这里DP83848侧的接收引脚叫RD、RD-发送引脚叫TD、TD-。LAN8720A的TX接DP83848的RDLAN8720A的RX接DP83848的TD方向不能反。如果两侧都支持自动交叉Auto MDI-X有时候线序反了也能自动协商成功但我在实际测试中发现嵌入式PHY的Auto MDI-X默认配置差异很大有的芯片默认关闭有的默认开启。最稳妥的做法是手动按“发送对接收”交叉连接并且把Auto MDI-X功能在寄存器里关闭避免出现“重复交叉”的问题。端接处理上LAN8720A侧的TX和TX-之间并联一个100欧姆电阻中点通过0.1微法电容接地。DP83848侧如果数据手册明确写了内置端接就什么都不用加直接用MDI引脚对接即可。这个组合我已经跑通过很多次协商速度稳定在100M全双工长时间大流量ping测试无丢包。唯一要注意的是两边的供电电压LAN8720A和DP83848的核心电压虽然不同MDI接口电平都兼容3.3伏所以直连没问题。如果用2.5伏供电的PHY和3.3伏供电的PHY对接就要仔细看数据手册里的差分输出摆幅范围不匹配时最好加AC耦合电容。2.3 组合三DP83848 对 DP83848第三种组合是“集成度更高的PHY对PHY直连”接线最简单适合两块DP83848开发板之间做通信测试也适用于KSZ8081、RTL8201这类自带端接的PHY。DP83848的MDI引脚内部已经集成了端接电阻和共模偏置网络所以在数据手册的典型应用图里变压器初级侧甚至不需要额外加电阻中心抽头处理好就行。背靠背直连时DP83848对DP83848可以直接交叉接线不需要外接任何端接元件。DP83848侧ADP83848侧B方向TDRDA发送到BTD-RD-A发送到BRDTDB发送到ARD-TD-B发送到A对比前两种组合你会看到这个组合的原理图最干净两个PHY之间只有四根差分线交叉对接。但我还是建议在PCB上预留100欧姆端接的位置理由有两个一是不同批次、不同封装型号的PHY内部端接参数可能有差异二是调试阶段如果发现信号质量不理想可以通过焊接端的电阻快速验证是不是端接问题。另一个需要关注的细节是极性。有些PHY内部集成了极性检测和纠正功能当RX和RX-接反时芯片会在自协商阶段自动纠正。但这不是所有PHY都支持实测中我也碰到过关闭极性纠正功能后通信更加稳定的情况。所以接线时务必保证正负极性一致不要抱着“反正有自动纠正”的心态。KSZ8081也是这个原理它内部集成了端接电阻参考设计里变压器中心抽头悬空或通过电容接地即可背靠背连接时可以照搬组合三的接线。3. 实操中的关键细节与验证方法接线图看懂了不等于上手就能通。这一节把我在实际调试中反复踩过的遍整理出来分三块讲画板阶段的细节、上电验证的顺序、以及RMII时钟和复位这两个最容易翻车的点。3.1 画板与接线阶段查这三处第一处是差分线处理。MDI差分信号虽然不像RF信号那么娇气但在省掉变压器之后信号完整性余量变小了。PCB走线时TX和TX-要成对、等长、靠近走RX和RX-同理。两条差分线的长度差控制在5毫米以内问题不大间距保持在3到5倍线宽。如果是在面包板或杜邦线上做验证那就尽量缩短长度杜邦线之间用双绞方式拧在一起能明显减少干扰。第二处是共地。前面反复强调过背靠背直连的前提是共地而且必须做到“可靠共地”。所谓可靠不是飞一根跳线就可以了而是两端PHY的地平面要就近打过孔连接或者在连接器的地引脚上多分配几个针脚保证回流路径短而宽。否则高速信号的回流电流会绕大圈形成的环路天线足以让你的丢包率高到怀疑人生。第三处是预留测试点。我画这类免变压器直连板子时习惯在每对差分线上预留两个测试焊盘方便用示波器测量信号波形。这两个焊盘的位置应该紧挨着PHY芯片的MDI引脚而不是靠近对接端。信号经过一段走线之后波形已经失真了量出来的结果不能代表PHY实际输出的质量。3.2 上电验证按这个顺序走免变压器直连的调试和普通网口调试不太一样没有RJ45座子也就没有网口指示灯可以直接观察。我的验证步骤是先确认PHY芯片本身工作再确认链路协商最后才是数据收发。第一步读取PHY芯片的寄存器。无论你用STM32的ETH驱动还是ESP32的LAN8720初始化代码上电后第一件事就是通过MDIO/MDC总线读取PHY的ID寄存器确认PHY芯片已经被正确识别。LAN8720A的PHYIDR1、PHYIDR2寄存器地址是0x02和0x03读出来的值应该对应0x0007和0xC0F1。DP83848的ID也能在数据手册里查到。这一步能排除芯片没上电、复位失败、MDIO时序错误等问题。第二步查看自协商状态。读取PHY Basic Control Register地址0x00和Basic Status Register地址0x01。其中0x01寄存器bit 2是Link Statusbit 5是自协商完成位。如果Link Status为0说明两端的物理层没有建立起有效连接这时候先不要查软件回头检查MDI接线和端接电阻。第三步验证数据通路。Link起来之后先用ping命令做小包测试再跑iperf或者大文件传输做大流量测试。小包能通只能说明链路基本没问题持续大流量丢包才是信号质量的真正考验。这一步如果丢包优先检查端接电阻是不是在发送端附近、差分线长度是不是超标、共地质量是不是过关。3.3 RMII时钟和复位这两个坑背靠背直连和普通连接一样绕不开RMII接口的时钟配置。RMII要求50MHz的参考时钟而且MAC和PHY必须共用同一个时钟源。常见接法有两种一种是用外部50MHz有源晶振接到PHY的XI引脚PHY内部产生REF_CLK输出给MAC另一种是MAC通过RMII接口输出50MHz时钟给PHY。在ESP32和LAN8720A的组合里ESP32的RMII时钟信号可以由内部APLL产生也可以外部提供但必须保证和PHY的50MHz时钟同源。我在调试中遇到过一种很典型的故障Link能够建立但数据传输速率极低偶尔能ping通数据传输一多就卡死。排查到最后发现是RMII时钟的占空比不达标PHY输出的REF_CLK信号经过较长走线后边沿变缓。解决方法是缩短走线、增加驱动能力或者在时钟线旁边加电容整形。复位电路同样是个高频翻车点。LAN8720A的NRST引脚需要满足上电复位时序RC复位电路里电阻电容的取值要参考数据手册要求。我遇到过复位时间不够导致PHY上电后寄存器读不到正确ID的情况折腾了很久最后把RC时间常数加大才解决。如果是用GPIO控制复位记得在初始化代码里先拉低再拉高并延时至少1毫秒再操作MDIO。4. 常见问题与避坑指南最后这部分我把直连场景里频率最高的几个问题和排查思路整理成速查表同时把ESP32接LAN8720模块的经典问题单独拎出来讲。4.1 ESP32接LAN8720模块的三个经典问题ESP32和LAN8720的组合在社区里讨论非常多我自己的开发经历中至少踩过三个重复出现的坑。第一个是PHY地址问题。LAN8720A的PHY地址由PHYAD0引脚决定默认为0。ESP-IDF的ETH驱动初始化代码里如果配置了错误的PHY地址MDIO读出来的寄存器全是0xFFFF表现为网口初始化失败。检查方法是用逻辑分析仪抓MDIO波形确认起始地址位和预期的PHY地址一致。第二个是RMII时钟相位问题。很多ESP32开发板把LAN8720的REF_CLK直接接到了ESP32的GPIO0但GPIO0是strap引脚上电瞬间的状态会影响芯片启动模式。如果这个引脚被RMII时钟信号干扰可能导致ESP32启动异常。我自己习惯用外部50MHz有源晶振给LAN8720提供时钟再把CLK_OUT接回ESP32这样最稳。第三个是复位时序。LAN8720模块上电后如果PHY寄存器能读但Link起不来可以试试在初始化代码里增加一次完整的硬件复位流程——GPIO拉低复位引脚延时100毫秒拉高再延时至少1毫秒然后重新初始化PHY。这个操作能解决大量“偶发不通”的问题。4.2 免变压器直连问题速查表现象可能原因检查与处理Link起不来两边PHY都读不到ID芯片没复位或MDIO时序错误确认复位引脚状态用示波器抓MDC/MDIO波形Link只有一边亮另一侧无响应MDI交叉线序错误且对端PHY未开Auto MDI-X按“发送对接收”重新交叉关闭两端Auto MDI-XLink能起来ping小包通跑流量就丢包端接电阻缺失或位置不对在发送端差分线上补100欧姆端接中点加0.1微法电容到地10M能协商成功100M协商失败差分线过长或地参考不佳缩短走线确保差分线下方有连续地平面两端可靠共地链路偶尔断开重新自协商后恢复电源纹波大或复位电路临界检查PHY供电电压和纹波加大复位电容两端都是同型号PHY但顺序交叉后仍不通正负极性接反PHY极性纠正能力未启用交换RX和RX-重新测试信号波形幅度异常或眼图闭合共模偏置缺失检查PHY数据手册确认MDI是否需要外部偏置网络这张表里的前两行是最高频的问题尤其是交叉线序。每次画完板子回来调试我都会先拿万用表测一遍MDI引脚之间的连接关系再决定是否上电。别嫌麻烦这一步能省下大量的排查时间。5. 写在最后的一点经验免变压器直连这个方案我从最开始在面包板上飞线测试到后来在正式PCB上做成固定功能模块前后也调了小半年。最大的体会是这个方案绝对不能用来替代所有场景的以太网变压器但它非常适合受控环境下的板级互联和产测应用。我个人的建议是如果你打算在自己的项目里用这个方案PCB画板时把端接电阻和回流电容的位置都预留好哪怕芯片本身自带端接也留上空焊位。调试的时候先按最简单的接法试不行再逐步补元件。很多PHY芯片手册里不会专门写“无变压器连接”这一节但通用思路就是保证共地、保证交叉、保证差分阻抗匹配这三个基本条件。另外如果你做的是两块板子之间的直连尽量把连接器放在同一侧、地引脚尽量多最好能做到整板地平面连续。如果只是实验室临时飞线测试那就把差分线绕短一点信号质量比什么都重要。这篇文章里的接线图都是从实际项目中整理出来的照着接基本能一次跑通。还是那句话产品要做对外网口变压器一个都不能少但做内部互联、测试治具这个直连方案真的可以被列入优先级。
返回列表