尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

STM32以太网硬件设计实战:从PHY选型到PCB布局全攻略

STM32以太网硬件设计实战:从PHY选型到PCB布局全攻略 1. 方案选型与整体架构设计1.1 为什么大多数人都选MCU内置MAC外置PHY先聊一个新手经常纠结的问题STM32的以太网方案到底怎么选。市面上能看到的基本就三条路——内置MAC加外置PHY芯片、内置MAC加Switch芯片、直接上带以太网的高端型号。我自己的经验是95%以上的项目最后都落在内置MAC外置PHY这个组合上。原因很简单STM32F4、F7、H7这些系列内部集成了完整的以太网MAC控制器但物理层信号也就是差分信号收发、编码、时钟恢复这些事必须交给PHY芯片处理。这就像你的电脑有网卡驱动但还得有一块物理网卡插在PCIe槽上。PHY芯片的选择大家用得最多的就是LAN8720A、DP83848、KSZ8081这几颗。它们都是10/100M速率、RMII接口为主流外围电路差异不大。选型时要关注的关键参数反而是你平时容易忽略的工作温度范围、是否内置端接电阻、芯片本身的封装好不好焊。先说结论后期做量产和返修都要考虑别只盯着数据手册首页那几行速率参数。1.2 RMII还是MII别被快字带偏接口模式上RMIIReduced Media Independent Interface和MIIMedia Independent Interface是两种实现方式。MII需要16根数据线RMII只需要7根。信号线一少PCB走线压力小很多这也是RMII在STM32板子上烂大街的原因。但RMII有个容易被忽视的前提它把时钟频率从25MHz提到了50MHz。MII模式下接收和发送时钟各自由PHY提供收发路径各自独立容错性更好。RMII模式只用一个50MHz参考时钟讲白了就是把这根时钟当成收发双方的公共基准。这里要讲清楚一个巨容易踩的坑绝大多数STM32搭配RMII接口的PHY都需要外部提供一个50MHz时钟源。这个时钟可以来自MCU的MCO引脚输出也可以由PHY芯片自己产生然后供出去但绝对不能MCU和PHY各用一个独立晶振然后互相对不上眼。我曾经在这上面折腾了两天现象就是Link灯偶尔亮一下然后灭掉抓包全是CRC错误。如果选MII25MHz时钟由PHY提供更稳定一些但代价是信号线数量翻倍。我的建议是如果你的板层足够四层板起步、MCU引脚富余、对可靠性和时序余量要求高那MII不见得是坏事。但做小体积消费类产品RMIILAN8720A是目前综合体验最顺的配方。1.3 从系统框图看关键节点画原理图之前先把系统层面的几个模块在脑子里过一遍。以太网链路在硬件上其实就五块MCU MAC、RMII接口信号线、PHY芯片、网络变压器/集成座、RJ45连接器。每一块之间有明确的接口关系和电气约束原理图只是表层的连线真正的功力在信号完整性、接地、电源隔离这些看不见的地方。下面我会把每一环单独拆开讲这是整篇文章的干货核心。2. 核心电路模块逐项拆解2.1 PHY芯片供电一个容易被滤波糊弄过去的环节以太网PHY的供电设计是整个电路的基石。这里说的不只是接个3.3V、放几个104电容这么简单。PHY内部有模拟收发器和数字逻辑两部分模拟部分对电源噪声极其敏感特别是电源纹波会直接耦合到差分信号上体现在误码率和辐射上。LAN8720A的数据手册上VDDCR内部核心电压需要1.2V这个电压通常由芯片内部的LDO从3.3V降压得到。外部只需要保证3.3V供电干净。实践上我习惯在PHY电源引脚旁边放一个磁珠加两个电容的组合磁珠选600Ω/100MHz的规格电容用10uF和0.1uF并联。注意这个磁珠只供PHY的模拟电源域不要和数字电源混在一起。MCU的3.3V和PHY的3.3V虽然来自同一路电源但在PCB上要从源头分开走线最后在一点汇合避免数字噪声通过电源平面串到PHY的模拟端。另外还有一个容易被忽略的点很多PHY芯片有AVDD和DVDD分开的引脚数据手册会要求它们之间有特定的上电时序。LAN8720A的VDDCR和VDDIO要求同源如果分开供电要检查是否满足数据手册里标注的斜坡率要求。实际项目中最好直接用同一路电源给PHY供满所有电源引脚省心。2.2 MAC地址到底从哪里来MAC地址这是很多入门者完全不考虑的问题直到产品要做联网测试才发现问题。STM32内部的MAC控制器不存MAC地址它需要你通过寄存器配置一个48位的MAC地址一般是软件在启动时写入。那么问题来了你的板子出厂时这个地址从哪里来如果每一块板子都写同一个地址所有设备接入同一个局域网必然冲突表现就是设备时通时断、路由器的ARP表不断抖动。量产合理的做法是在每一块板子的生产工序里通过烧录器或者MCU的UIDUnique ID生成一个唯一的MAC地址。STM32每颗芯片都有一个96位的唯一ID你可以取其中一部分作为MAC地址的低字节再和厂商代码拼起来。网上流传的方案是用UID的前几个字节填充MAC地址的后半段并保证本地管理位即MAC地址的bit 1置1让它标志为本地管理地址不和其他厂商的全球唯一地址冲突。我在实际项目里是这么处理的在Bootloader里读取UID拼成一个6字节的MAC其中前3字节用一个固定前缀比如0x02、0x00、0x00开头bit 1置1表示本地管理后3字节取UID的低24位。这样即使你的产品没有花钱买IEEE的OUI也能在私有网络里正常工作。2.3 复位电路和上电时序PHY复位这件事看起来小事一桩但对产品稳定性影响很大。大多数PHY芯片有一个NRST引脚低电平复位。这里的坑在于PHY的复位必须和MCU的以太网时钟稳定之后协调完成否则PHY可能在时钟还没有稳定的时候进入错误状态。建议用MCU的GPIO去控制PHY的复位引脚而不是简单接一个RC复位电路。GPIO控制的好处是软件可以在初始化时按需控制复位时序比如上电后先等待系统时钟稳定再拉低PHY复位、保持至少10ms、再释放。LAN8720A数据手册要求的复位脉冲宽度至少是1ms但我建议软件里留足10ms并且释放之后等一段时间再开始读写PHY寄存器给它留足内部上电初始化时间。顺便说一个我在调试中遇到的坑如果PHY的复位和MCU的以太网控制器复位同步触发可能出现MAC和PHY状态机不一致的问题典型症状是PHY的Link状态寄存器读不到正确值。解决办法是让PHY比MAC晚一点释放复位错开上电时序。2.4 时钟电路RMII的50MHz从哪来RMII模式整个系统的参考时钟是50MHz。这个时钟的来源有三种做法我把它们的优缺点和对布线的影响写清楚。第一种是MCU的MCO引脚输出50MHz时钟给PHY。这个方案不需要额外的晶振省了一颗料但MCO引脚本身是MCU内部PLL分频出来的jitter值相对较大。对于100M以太网来说通常够用但注意STM32的MCO输出能力有限驱动能力弱走线要短、不要带太多负载。第二种是PHY自己焊一颗50MHz无源晶振然后由PHY的CLKOUT引脚把50MHz时钟反馈给MCU。这是我最推荐的方案因为晶振距离PHY近时钟质量好而且PHY的驱动能力通常比MCU的MCO强。LAN8720A外接50MHz晶振的时候配合两个20pF左右的负载电容典型应用电路数据手册里都有。第三种是外部有源晶振同时给MCU和PHY供时钟。这个成本最高一般用在要求最苛刻的工业场景。无论用哪种方案都必须注意50MHz时钟线尽量短、走到内层、包地处理、远离其他高速信号线。时钟是数字电路的心脏这段话我写了不下十次但每次都有朋友因为时钟线布得太随意板子回来跑不出正确速率。2.5 网络变压器与RJ45分立还是集成网络变压器的作用有三个电气隔离、共模抑制、阻抗匹配。它把PHY芯片的差分信号对和外部网线隔离开来防止外部浪涌和共模干扰伤到后端电路。选型上你可以用独立的网络变压器配独立的RJ45座子也可以直接用带变压器的RJ45集成座。集成座最大的好处是省PCB面积、减少一个器件的选型工作、布线也简洁。但集成座有一个缺点变压器和RJ45之间的物理距离很近抗浪涌能力通常比独立变压器差那么一点。所以如果产品用在强电磁干扰环境比如工业现场我更倾向用分立的变压器加RJ45座子至少可以在中间加一级共模电感防护能力更强。另外要重点提醒一下RJ45连接器的金属外壳接地问题这在汽车以太网和工业以太网里尤其重要。2.6 RJ45金属外壳的接地处理首先明确一点RJ45的金属外壳屏蔽壳不是随便接个地就能完事的。它的接法直接关系到整机的ESD抗性和辐射发射指标。以前有工程师朋友问是不是把RJ45外壳直接连到PCB的地平面就行不对。正确做法是让RJ45外壳通过一个高压电容通常1kV以上耐压的1000pF到2200pF和一个大阻值电阻1MΩ左右并联到系统地。这样做的原因有两个方面。第一高压电容提供高频干扰的低阻抗路径把网线上的共模干扰泄放到地第二1MΩ电阻阻断了直流回路防止不同设备之间地电位差形成环流。如果你直接把外壳和系统地连死当两台设备存在地电位差时会形成地环路电流这个电流会经过变压器绕组感应到信号线上表现为丢包率飙升。我见过一个案子设备在客户现场总是偶尔断网用示波器抓PHY的TX信号一点问题都没有最后发现RJ45外壳是通过螺丝孔直接连在了机箱金属面板上而机箱面板接地不良形成一根大天线。后来把外壳和信号地之间加上电容电阻并联组合问题消失。2.7 ESD防护器件的选型和摆放以太网口是设备对外的接口直接暴露在各种静电环境里。很多人只在电源口做ESD防护忽略了网口这是不对的。RJ45口在插拔网线的时候人体静电很可能会通过金属外壳或信号线引入系统。网口的ESD防护通常有两种做法一种是普通TVS管放在变压器外侧靠近RJ45侧主要防护网线感应到的浪涌另一种是专用以太网ESD保护阵列集成度高一个器件覆盖四对差分线。我建议用后者比如TI的TPD4E05U06或者类似的型号因为它的寄生电容控制得很好0.5pF级别不会对高速差分信号造成明显影响。摆放位置也有讲究ESD器件必须紧挨着RJ45座子尽量靠近连接器引脚路径越短越好。如果器件放得离RJ45太远ESD电流会先在PCB走线上跑一段距离再进保护器件这段距离上的寄生电感会形成高压击穿后面的PHY芯片。这个经验是真实教训换来的。3. PCB布局布线实操过程3.1 四层板还是两层板这是一个问题以太网电路对PCB层叠有最低要求。我的结论是如果你有得选一定上四层板。四层板的标准叠层是顶层放元件和走线、第二层完整地平面、第三层电源平面、底层走线。以太网差分信号放在顶层地平面就在下面一层形成良好的阻抗参考面这对抗干扰和信号完整性帮助非常大。两层板能不能做能做但前提是差分对走线下方必须保证完整的地铜皮不能有走线穿过。实际上我很早就用两层板做过带以太网的最小系统板但付出的代价是布线难度成倍增加信号线必须绕开敏感区域而且整板的EMC性能明显不如四层板稳定。如果你在产品化和过认证老老实实上四层板。还有一个层叠上的隐蔽问题PHY芯片、网络变压器、RJ45这个串行链路最好放在整个PCB的边缘让网线插座突出板边。这样设计的好处是差分信号从PHY出来之后不需要穿越整个板子路径短而且RJ45的机械结构也更容易固定。3.2 差分对的布线要领90欧姆不是玄学以太网的差分信号线有明确的阻抗要求100BASE-TX的差分阻抗是100Ω单端对地阻抗是50Ω。你的PCB的层叠参数决定走线宽度和间距这个一定要在布线前算清楚。计算工具用免费的Saturn PCB Toolkit或者Polar Si9000都可以。四层板常见叠层下例如芯板厚度0.2mm、走线到参考平面0.2mm100Ω差分阻抗对应的线宽和间距大概是0.15mm/0.15mm具体数值以你的叠层计算为准。注意这是差分阻抗不是单端阻抗别把单位搞混。差分对布线有三条铁律每一条都是我付出了板子成本才记住的。第一条一对差分线从PHY芯片出来到变压器全程平行等长走线间距保持恒定第二条同一对线之间严禁打过孔要让它们在同一层走完第三条差分对和其他信号线的间距要拉开到3倍线宽以上尤其是时钟线避免串扰。实际操作中我一般会让差分对先走一小段直出线离开PHY引脚然后快速换到内层或者保持顶层直接拉到变压器。过程中如果必须换层必须成对打过孔并在过孔附近增加回流地孔保证参考平面连续。3.3 跨分割问题为什么你的网口总是不稳定跨分割这个问题在以太网PCB里非常典型。很多人知道差分对下面要连续的地平面但实际操作时容易犯一个错为了把各种电源隔离在地平面上用一条细缝分开数字地和模拟地然后差分对从这条缝上面走过这等于给差分信号的高速回路加了一个大电感。在以太网方案里我强烈建议不要分割地平面。整块PCB只保留一个地用统一的GND网络。PHY的模拟地和数字地全部就近打孔接到同一个地平面上靠地平面的低阻抗来保证回流质量。很多教科书说模拟地和数字地要分开那是针对模拟信号非常敏感的场合在以太网这种高速数字信号场景下分割地平面带来的跨分割问题远比模拟地有点数字噪声严重得多。如果你实在需要隔离比如工业现场要求网络隔离正确的做法是使用带隔离的RJ45集成座让隔离发生在变压器初级的物理隔离带上而不是在PCB上割地。3.4 布局顺序从RJ45往PHY推着画PCB布局的时候我个人习惯从连接器向芯片方向推先把RJ45固定好紧贴着放网络变压器如果是分立的再沿一个方向把PHY芯片放过来尽量让三个器件呈一字排列。这样做的原因是让差分信号路径最短、最直。如果板形限制导致RJ45和PHY不能一字排开那就需要把PHY旋转90度尽量让差分对走线仍然保持短而直。切记不要让差分线在变压器和PHY之间绕圈。时钟晶振如果是PHY外挂晶振的那一路要放在PHY芯片旁边不要隔着其他器件。50MHz时钟线走线短是硬要求能短到什么程度就短到什么程度。MCU到PHY之间的RMII信号线包括TX_EN、TXD0、TXD1、RXD0、RXD1、CRS_DV、REF_CLK以及MDIO和MDC。这些信号是数字信号工作在50MHz附近互相之间的等长要求不严格但REF_CLK这条线要尽量避免和其他信号线平行长距离走线。3.5 电源和地的处理细节PHY芯片电源部分的布局我通常的做法是在PHY的电源引脚旁边分别放置磁珠、10uF钽电容或陶瓷电容、0.1uF陶瓷电容。这些元件必须紧贴电源引脚从芯片引脚出来先经过小电容再经过大电容最后才是磁珠接电源源头。原理上小电容提供高频退耦大电容提供中低频储能磁珠隔离高频噪声。如果你把顺序搞反滤波效果会大打折扣。另外PHY芯片下方的地平面尽量不要破坏不要在芯片正下方走其他信号线保持一个完整的地铜皮这样散热和回流都好。RJ45集成座如果自带指示灯这些LED的驱动信号也要顺势布好别在最后一刻才想起来。LED走线和普通信号线没有特殊要求但不要和差分线平行长距离并行避免耦合。4. 常见问题与调试技巧实录4.1 Link灯亮但Ping不通先别急着怀疑代码这是以太网调试中遇到最多的一种情况。看到Link灯亮了第一反应往往是软件问题于是疯狂查LwIP初始化代码其实问题很可能出在硬件上。我的排查顺序是固定的。第一步用示波器看PHY的差分输出波形确认TX差分信号的摆幅是否正常。100BASE-TX的差分幅度峰峰值应该在2V左右如果你看到幅度明显偏低可能变压器抽头连接有问题或者端接电阻没焊好。第二步用逻辑分析仪抓RMII接口上的TXD0和TXD1看MCU是否确实在发送数据。第三步抓CRS_DV信号这个信号在收到数据时应该拉高。如果以上信号都正常但PC端Ping不通用Wireshark在PC上抓包看看有没有ARP请求到达你的开发板。如果完全没有ARP包过来问题大概率在PHY没有正确协商到100M模式或者RJ45到变压器之间的差分对接反了。PA极性接反是个搞人的故障表现就是Link能建立但数据完全传不出去。有些PHY芯片的寄存器提供自动极性纠正功能Auto MDI/MDIX但很多芯片的默认配置并不开启所以布线时一定要仔细对照数据手册的管脚定义别把TX和TX-接反了。4.2 PHY配置读不到或者读出来全是0xFF这个问题几乎每个人都会遇到一次。读PHY寄存器返回0xFFFF多半是MDIO时序有问题或者PHY根本没有被正确复位。检查顺序先测PHY供电电压对不对复位引脚电平状态对不对REF_CLK有没有波形最后才怀疑代码。我以前遇到过一次很隐蔽的情况MCU和PHY之间的MDIO上拉电阻没焊。MDIO是双向开漏信号必须有上拉电阻否则时序完全跑不起来。通常这个上拉电阻是1.5kΩ到10kΩ接在MDIO上拉到3.3V。另外一个常见原因是复位引脚被RC电路拉低后没有释放。如果RC充电时间太长PHY一直处于复位状态那配置自然失败。用GPIO控制复位就没有这个问题。4.3 网络变压器中心抽头的连接方式网络变压器的中心抽头Center Tap接法是新手容易困惑的地方。不同厂家的变压器抽头连接方式不一样。有些变压器要求中心抽头接电源比如通过1kΩ电阻接3.3V有些则要求直接接地。关键在于一定要看PHY芯片数据手册里推荐的变压器典型电路并配合变压器厂家手册一起核对。LAN8720A的典型电路里集成RJ45座的变压器中心抽头通常接一个1kΩ电阻到3.3V同时通过0.1uF电容接地这是为了给PHY的差分驱动提供共模电平。我在一次设计里用了不带内部抽头电阻的变压器按别人板子的电路抄结果信号幅度严重偏低误码率高得吓人。后来翻变压器的数据手册才发现需要单独加抽头电阻加上之后一切正常。这种问题非常难排查因为板子上看起来元件都是对的。4.4 网线一插上板子发热严重出现这种情况先立刻断电然后检查PHY芯片到变压器之间的差分走线是否短路、变压器到RJ45之间是否短路、RJ45本身是否损坏。另外一个常见的发热源是PHY芯片的DVDD和AVDD被反接或者两者的去耦电容焊错位置。有一种情况值得特别提醒如果差分信号线和地平面之间存在焊锡残渣可能会在高频信号下产生微短路静态测不出来一上电就发热。这种故障靠目测很难发现最好用热成像仪观察整板发热点能快速缩小范围。4.5 局域网内传输速率只有10M而不是100M速率协商不上100M先看PHY是否配置了强制100M模式再看网线是不是四芯的劣质线。如果软件用的是自动协商查PHY的ANAR寄存器和ANLPAR寄存器确认两边协商的结果。硬件方面问题通常出在REF_CLK的时钟质量上。RMII的50MHz时钟如果有较大的jitter自动协商会掉到10M甚至协商失败。用示波器看看50MHz的频率和抖动情况你可能会发现MCO引脚输出的时钟驱动能力不足波形边沿变缓这时候改用PHY外接晶振方案问题就解决了。另外换了一根合格的网线就能到100M的话说明问题多半在RJ45座子的弹片接触或变压器绕组的品质上而不是电路设计本身的错。4.6 静电测试不过一打静电就掉线ESD测试不过的时候重点检查几个位置。RJ45金属外壳和地之间的高压电容是否放了放置位置是否正确容值是否在1000pF到2200pF范围。ESD保护器件是否紧贴RJ45安装有没有离太远。机箱的地和处理板的地是否做好了系统级连接。另外一个容易被忽略的是螺丝孔如果板子用螺丝固定在金属机箱上螺丝孔的接地焊盘要和系统的保护地良好连接这样才不至于让静电从网口进来后没有泄放路径。螺丝孔附近不要铺大片孤立铜皮要明确它属于哪个地网络否则会变成天线。如果你在打静电测试之前没有放TVS测试挂了也只能怪自己偷懒。正规产品设计网口ESD保护是基本要求不存在板子内部调试阶段不用放的说法因为测试后期补器件会严重影响布线。5. 设计清单与实测要点整理5.1 分项自检清单我在每次投板之前都会过一遍自己的检查清单这里完整列出来读者可以直接抄作业。电源方面确认PHY的3.3V电源干净磁珠和去耦电容位置正确MCU的以太网控制器电源引脚也有去耦。时钟方面确认50MHz时钟源有确定的来源时钟线短且包地如果是MCO输出检查MCU引脚配置。复位方面确认PHY复位由GPIO控制复位时序软件可调。信号完整性方面确认差分对阻抗设计合理差分对不跨分割等长误差控制在5mil以内和其他信号间距保持在3W以上。接口防护方面确认RJ45外壳通过1MΩ电阻和高压电容接地ESD防护器件紧贴RJ45。变压器方面确认中心抽头接法和PHY数据手册一致。5.2 首板调试顺序建议拿到新做的板子我通常按下面的顺序来上电调试每一步都确认没问题再往后走。先用万用表测量所有电源对地阻抗排除短路。然后上电测电压确认各路电压正常。用示波器测50MHz时钟是否起振频率准确。测量PHY复位引脚的状态确认复位已经释放。连接网线到电脑看Link灯是否亮起。读PHY的基本寄存器0号寄存器确认能读到正确的芯片型号。配置MCU的以太网控制器尝试Ping通。用Wireshark抓包确认收发都没有CRC错误。按照这个顺序每步都能快速定位问题所属的模块而不会在什么都正常但就是不通的状态下瞎猜。5.3 关于Layout的小结性建议最后再强调几个我反复体会到的点。以太网电路设计硬件原理图只是前菜PCB布局布线才是主菜。一张看起来能通的板子谁都能画出来但一张能在各种恶劣环境下稳定工作的板子考验的是你对地平面、差分信号、时钟完整性、防护器件的综合理解。如果手上没有测试条件至少做到四层板、完整地平面、差分对遵守阻抗要求、时钟线短而粗、RJ45外壳按规范接地、ESD器件紧贴接口。这些规则全部落实成功率起码在九成以上剩下的调试工作主要就是软件配置了。我自己在调试过程中最大的体会是以太网的很多问题看起来是软件问题实际上根源都在硬件。特别是信号完整性和接地处理这两块是软调试无从下手的。希望这篇文章能帮你在画第一块以太网板子的时候就避开我当年踩过的那些坑。
返回列表