ARTICLE DETAIL

资讯详情

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

STM32F407+LAN8720A以太网硬件设计详解:从原理图到PCB布局

STM32F407+LAN8720A以太网硬件设计详解:从原理图到PCB布局 做STM32F407的以太网项目时基本上每个硬件工程师都会遇到一块叫LAN8720A的小芯片。这颗PHY芯片出货量极大参考设计满天飞但很多人照着画完板子回来却踩了一堆坑Link灯亮但Ping不通、收发不稳定、MDIO读不到ID等等。这篇文章就围绕LAN8720A的原理图设计从头拆一遍把每一个引脚、每一条走线、每一颗电阻电容背后的设计逻辑讲明白结合我这些年实际打板和调试的经验给出完整可抄作业的方案。先说一下这篇文章适合谁看正在用STM32F407做带网口产品的硬件工程师或者刚入门想自己画一块带以太网核心板的学生。软件基础有没有不重要硬件部分看懂原理图和PCB布局就够用。我默认你已经清楚以太网大体分MAC层和PHY层接下来直接进入方案选型。1. 以太网硬件方案选型为什么大家都用LAN8720A1.1 先理清MAC和PHY的分工很多新手第一次看以太网电路会懵因为STM32F407芯片本身带有以太网MAC控制器但它不能直接接RJ45网口中间必须放一个PHY芯片。打个不太严谨的比方MAC是处理数据的“大脑”PHY就是负责把数据变成电信号发出去的“嘴巴和耳朵”。STM32F407内部集成的以太网MAC支持10M/100M速率支持MII和RMII两种接口方式。它负责IP包封装、CRC校验、MAC地址过滤这些事但最终要往网线上发送的是差分模拟信号必须靠PHY来完成编码、并串转换、电平驱动等工作。LAN8720A就是这颗负责物理层收发的芯片。所以硬件设计的核心任务就两部分一是把STM32F407的MAC接口信号和LAN8720A的PHY接口信号正确接起来二是把LAN8720A另一侧的差分信号通过网络变压器和RJ45连到外部网线。这两部分搞通了硬件就成功了一大半。1.2 LAN8720A和同类PHY的横向对比市面上主流的10M/100M单端口PHY芯片无非那几颗LAN8720A、YT8512H、IP101GRI、DP83848I。我这几颗都画过板子说说选择倾向。LAN8720A好在三点一是体积非常小QFN-24封装4mm见方在寸土寸金的PCB上很友好二是功耗低官方标称功耗在0.5W以内基本不发热三是内置了1.2V稳压器外部只需要一路3.3V供电BOM简单。这对STM32F407的核心板设计尤其方便因为整板电源轨少。IP101GRI和DP83848I性能上都不差但封装大、外围要求多一般用在工业级产品里。YT8512H是目前国内性价比很高的替代方案基本兼容LAN8720A的RMII接口不过它的参考电路和寄存器映射有些差异不能直接无脑替换。如果你是新设计后续想省成本可以评估YT8512H如果求稳、参考资料多LP建8720A仍然是首选。1.3 RMII与MII接口选型决定画板难度STM32F407的ETH外设同时支持MII和RMII。MII接口信号多需要16根线而且TX_CLK和RX_CLK分别独立对MCU引脚占用大布线也折腾。RMIIReduced MII把数据线压缩到2根发送、2根接收加一个50MHz的REF_CLK时钟总共10根左右的信号线PCB布线压力小很多。代价是RMII要求50MHz时钟信号而且TX和RX都共用这同一个50MHz基准时钟对时钟质量要求更高。LAN8720A支持从外部输入50MHz晶振信号也支持自己从25MHz无源晶振经过内部PLL产生50MHz时钟再输出给MAC。我后面会详细讲两种方案的取舍这里先记住结论用RMII接口信号线少适合STM32F407这种引脚资源紧张的场景绝大多数开源项目也都是这样做的。2. 原理图设计拆解一张图讲透每个引脚2.1 电源系统多路电源引脚与去耦电容放置LAN8720A有VDDA、VDDIO、VDDCR三组电源引脚很多人看不懂这三个有什么区别我就用通俗的方式解释。VDDA是模拟电源给PHY内部的模拟前端电路供电噪声敏感度最高。VDDIO是I/O电源给RMII接口的输入输出缓冲供电它决定了和MCU通信的电平范围。VDDCR是内部数字核心电源引脚但注意这颗芯片内置了1.2V稳压器所以外部不需要再单独提供1.2V只需在VDDCR引脚上接一个1uF左右的滤波电容稳压器会自动在内部产生1.2V供给核心逻辑。我的习惯是在原理图阶段就规定清楚去耦电容的容量和位置VDDA和VDDIO每个引脚旁边放一个0.1uF的陶瓷电容就近打孔到地平面然后再在芯片供电端的总入口放一个10uF的钽电容或陶瓷电容做低频储能。VDDCR的1uF电容必须离引脚尽可能近因为这个1.2V内核电流变化很快远了电感效应会很严重。注意LAN8720A的所有电源引脚都不能悬空也不能直接全绑在一起就完事模拟地和数字地在芯片底部焊盘处要单点连接否则地弹噪声会直接耦合进模拟电路表现为丢包率升高。2.2 时钟方案50MHz有源晶振还是25MHz无源晶振这是我在论坛里看到问得最多的一个问题STM32F407的RMII接口需要一个50MHz参考时钟这个时钟从哪里来网上常见的做法有两种。第一种是给LAN8720A配一个50MHz有源晶振把CLKOUT引脚或者叫REF_CLK配置成输出模式让PHY把50MHz时钟送给STM32F407的ETH_REF_CLK引脚。第二种是给LAN8720A接25MHz无源晶振PHY内部通过PLL倍频到50MHz然后从CLKOUT引脚输出给MCU或者直接由外部MCU提供50MHz基准时钟、PHY工作在从模式。我个人的建议是用25MHz无源晶振方案因为LAN8720A内部的PLL电路完全有能力承担倍频工作而且25MHz无源晶振成本低、体积小也不需要额外的电源滤波。关键是要把晶振放在LAN8720A晶振输入引脚旁边两个负载电容一般18pF或22pF看晶振规格书也要尽量靠近走线不要过长晶振正下方不要走其他信号线。也有人直接把STM32F407的MCO引脚输出50MHz时钟给PHY用。这种设计不是不行但我评估下来不如PHY自带晶振可靠因为MCO的输出驱动能力有限而且MCU内部时钟树的噪声会串到以太网时钟上影响信号眼图。2.3 RMII信号连接映射与STM32F407的引脚对应RMII接口的信号数量不多但每一根都不能接错。我对照数据手册重新整理过一张接线表这里直接给大家参考信号名LAN8720A引脚STM32F407引脚说明TXD0TXD0PB12发送数据位0TXD1TXD1PB13发送数据位1TX_ENTX_ENPB11发送使能RXD0RXD0PC4接收数据位0RXD1RXD1PC5接收数据位1CRS_DVCRS_DVPA7载波侦听/数据有效REF_CLKCLKOUTPA150MHz参考时钟MDCMDCPC1管理接口时钟MDIOMDIOPA2管理接口数据这组对应关系是STM32F407在RMII模式下的默认复用映射也是STM32CubeMX里最常见的选择。强烈建议原理图阶段就把每一根信号命名成ETH_RMII_TXD0这种格式别用芯片原始引脚名TXD0就完事。我踩过这种坑PCB Layout时回读网络表发现MDC接错了引脚因为原理图里两个不同网络都叫了类似的名称排查起来非常痛苦。还有一点REF_CLK的50MHz信号方向必须确认清楚。在RMII标准定义里这个50MHz时钟可以由MAC提供也可以由PHY提供。LAN8720A默认配置下CLKOUT引脚会输出50MHz给MCU所以STM32F407侧的PA1要配置为输入模式。如果你用的是外部有源晶振直接供给两边那就把PHY的REF_CLK模式配置成输入方向别搞反。2.4 网络变压器与RJ45设计中心抽头和Bob Smith端接LAN8720A一侧的TX±和RX±差分对不能直接接到RJ45中间必须过网络变压器。网络变压器在这里的作用有几个隔离共模电压、抑制共模干扰、提供浪涌保护路径。很多新手偷懒直接用带变压器的RJ45插座比如HR911105A这是最省事的方案也完全可以但设计原理还是要懂。变压器次级线路侧的两个中心抽头要通过Bob Smith电路端接到保护地。标准做法是每个差分对的中心抽头分别通过75Ω电阻连到一起再串联一个高压电容常见1000pF/2kV接到机壳地。这组阻容的作用是给共模噪声提供泄放通道同时隔离直流防止外部浪涌直接打穿PHY芯片。变压器初级PHY侧的中心抽头接法要看PHY的输出结构。LAN8720A的TX驱动是电流型输出所以初级中心抽头通常直接接VDDIO电源3.3V为输出级提供直流偏置电流。RX侧的初级中心抽头一般通过0.1uF电容接地给接收端提供一个交流参考点注意不是直接接地否则会影响接收共模电压范围。提示LAN8720A数据手册的参考电路中TX中心抽头接3.3VRX中心抽头通过电容接地。如果用了带变压器的RJ45一体式连接器务必核对连接器内部的变压器中心抽头是否已经处理有些一体式连接器内部已经集成好了端接电阻外部再接反而画蛇添足。2.5 PHY地址与模式引脚配置上拉电阻不容马虎LAN8720A有几个引脚是复用功能的其中最关键的是PHY地址配置。STM32F407的以太网驱动初始化时需要向MDIO总线上的某个地址去读PHY的寄存器如果地址对不上直接读不到芯片ID。LAN8720A的PHY地址由PHYAD0引脚在复位时的电平决定常见接法是接10kΩ电阻上拉到3.3V得到地址1再配合一个外部下拉/上拉电阻将地址改成0或2等其他值。如果你设计里有多个PHY挂在同一条MDIO总线上就必须给每颗PHY分配不同地址。我建议在PHYAD0引脚上加一个0Ω电阻或2kV ESD保护器件方便的调试点万一需要改地址飞线也容易。另外还有nINT中断引脚、REGOFF低功耗关断引脚。REGOFF必须接GND否则芯片直接进入低功耗状态RMII接口完全不工作。这个引脚我见过有人悬空结果上电后PHY像没通电一样实测电流只有几毫安查了好久才发现是REGOFF没拉低。nINT可以接MCU的GPIO也可以不接。软件轮询MDIO读状态其实更简单但如果你要做WOL网络唤醒或者想用中断方式快速感知Link状态变化那就接上注意它是开漏输出需要外部上拉电阻。3. PCB Layout实操决定稳定性的是高速走线3.1 差分对与100Ω阻抗控制原理图对了只算一半PCB Layout才是真正决定LAN8720A能不能稳定跑满100M的地方。TX±和RX±两对差分线必须做100Ω差分阻抗控制。很多两层板爱好者问两层板能不能跑以太网能但你必须控制走线宽度和间距。常用FR4板材、1.6mm板厚、表层微带线结构下如果板厂默认铜厚1oz差分对走线宽度大概在8mil左右、线间距5~8mil时阻抗接近100Ω。不过这个数值会随叠层变化最靠谱的做法是在制板前把叠层参数发给板厂让板厂帮你算阻抗或者直接用“5mil线宽、5mil间距”这种常见组合再配合板厂阻抗测试报告调整。差分对走线的核心要求是等长、紧耦合、避免跨分割。等长不是说两线相差必须0而是尽量控制在5mil以内因为100M以太网的上升沿大约几纳秒5mil长度差引起的时延大约0.3ps完全可接受。更重要的事情是两线之间不能有大面积铜皮掏空不能让差分对跨过地平面的裂缝。3.2 时钟线、MDIO/MDC走线处理50MHz的REF_CLK信号是整个RMII接口里最关键的单端信号。它虽然频率只有50MHz但上升沿非常陡谐波分量很高处理不好会辐射出去干扰其他电路也可能被其他信号干扰导致时钟抖动。我的规则是REF_CLK走线控制在1000mil以内越短越好远离DC-DC电感、晶振、开关节点这类噪声源。最好在CLK信号两侧包地地过孔沿着走线两侧均匀放置把信号屏蔽起来。MDC和MDIO这两根管理信号速度不高通常几MHz但对布线的要求也不能太随意避免和高速数据线平行走长距离防止串扰。LAN8720A到STM32F407的RMII数据线组内等长最好控制在200mil以内虽然RMII标准对建立保持时间要求不算苛刻但信号质量好一点调试时候的怪问题就少一点。TXD0/TXD1/TX_EN这三根发送信号分组走在一起RXD0/RXD1/CRS_DV这三根接收信号分组走在一起组间独立先走完整再修等长。3.3 电源平面与去耦电容的摆放位置LAN8720A的中文资料上一般会标注“所有去耦电容应紧靠相应的电源引脚走线要短而粗过孔要尽量靠近焊盘。”但真正做Layout的时候很多人会因为布局拥挤把电容放得远远的效果大打折扣。我建议在原理图阶段就给PHY芯片区留出足够的“呼吸空间”。芯片周围至少预留150mil的净空区用来放置电源去耦电容、晶振电路、RBIAS偏置电阻。RBIAS引脚需要接一颗12.4kΩ、精度1%的电阻到地这颗电阻的精度直接决定PHY内部电流偏置精度进而影响发送信号幅值尽量别用5%的普通电阻替代。去耦电容的放置顺序是先放VDDCR的1uF再放VDDA的0.1uF再放VDDIO的0.1uF每个电容的地端过孔单独打不要串到一个过孔上。顶层铺一小块完整的3.3V铜皮把芯片电源引脚和电容一端连起来比拉着细走线强太多了。3.4 变压器区域处理隔离与跨分割网络变压器和RJ45区域要按“隔离”的思路来设计。RJ45的金属外壳、变压器次级侧线路、保护地是一套系统和PHY、MCU的数字地不能混在一起。我通常的做法是把RJ45和变压器放在板边RJ45金属外壳通过一个高压电容2kV/1000pF和一个1MΩ电阻连接到数字地形成单点连接。变压器下方的地平面要彻底掏空留出隔离带避免次级侧的浪涌电流直接耦合到初级侧的地系统。掏空宽度大约80~120mil就够了太宽会切断两侧的差分信号回流路径太窄又起不到隔离作用。有工程师为了省钱直接把RJ45插座放在板子中央然后走长线穿过一堆数字逻辑电路结果产品过不了快速脉冲群测试这就是典型的Layout问题不是芯片问题。4. 调试踩坑实录Link灯亮却Ping不通怎么办4.1 PHY ID读不到先别怀疑芯片拿到新板子上电后发现STM32的以太网驱动初始化失败打印信息显示读不到PHY ID不要急着怀疑芯片坏了。按这个顺序排查第一查REGOFF引脚是不是被正确拉低第二查PHYAD0设置的地址和驱动里填的PHY地址是否一致第三查MDC/MDIO两根线是否接反或短路第四查网络变压器的中心抽头接法。我调试过一块板子现象是驱动读ID时永远返回0xFFFF。用示波器抓MDIO波形发现只有MDC有时钟MDIO数据线一直高电平。最后发现是PHY地址配置问题PHYAD0通过10k电阻接到了3.3V而驱动初始化代码里读的地址是0地址完全不匹配。把代码里的PHY地址改成1之后立即读到0x0007正常识别LAN8720A。另外提一句MDIO上一般要加一个1kΩ到4.7kΩ的上拉电阻具体值取决于总线上挂的设备数量。如果你发现MDIO信号上升沿很缓波形像在爬斜坡多半是总线电容太大上拉太弱把上拉电阻调小一点即可。4.2 指示灯状态分析快速定位故障LAN8720A有nLED0和nLED1两个LED驱动引脚配置好后能指示Link状态和收发活动。我习惯把LED0接Link/Activity指示LED1接Speed指示。如果上电后LED0常亮说明PHY已经通过自协商和交换机建立了链接物理层基本没问题如果LED0完全不亮优先检查变压器次级接线和RJ45的差分线有没有接反。有一次调试LED0亮得正常但Ping不通。网络抓包软件显示ARP请求发不出来。最后定位到是TX和RX差分对在网络变压器次级侧交叉接错了外部看到的Link是对端交换机通过自协商的“假Link”实际数据通路不通。所以Link灯亮只代表物理层协商成功不代表数据链路没问题。4.3 丢包与断流时钟和电源是重灾区如果Ping大包或者长时间跑吞吐会偶发失败最常见的原因有两个时钟抖动过大和电源纹波过高。用示波器看PHY输出给MCU的REF_CLK信号要求上升沿干净、无回勾、抖动尽可能小。我遇到过因晶振负载电容配错导致时钟幅度偏低、边沿变缓的情况表现为高负载下丢包率直线上升。电源方面如果3.3V由DC-DC提供注意开关频率噪声是否直接耦合到了VDDA。解决办法是在VDDA引脚处增加一个磁珠或小电感做滤波把模拟电源和数字电源分开。注意磁珠的额定电流要高于芯片实际电流否则压降过大反而更糟糕。4.4 常见问题速查表我把这几年被问得最多的几个硬件问题整理成一张表方便你现场排查现象优先检查项原因方向读不到PHY IDREGOFF电平、PHY地址、MDIO上拉芯片未工作或地址不匹配LED常亮但Ping不通TX/RX差分线是否交叉、变压器中心抽头数据通路问题10M正常100M丢包REF_CLK信号质量、差分走线阻抗高速信号质量差偶尔掉线重连电源纹波、虚焊、RJ45座接触不良供电或焊接问题芯片异常发烫VDDCR是否短路、RBIAS电阻是否贴错电源故障还有个小细节有些板子在GD32或国产替代MCU上跑以太网时硬件其实没问题但代码里PHY的寄存器地址偏移和LAN8720A不一致导致读不到ID。这不属于原理图问题但排查时要留个心眼别把软件问题当成硬件改一版板子。5. 设计优化与扩展方向从能用做到好用5.1 增强ESD防护与浪涌抑制消费级产品可以不加额外防护但如果你想做工业级或者过认证以太网口的防护设计必须重视。PHY芯片的差分引脚耐压很有限直接暴露在网线一端很容易被静电打坏。最基本的做法是在变压器次级侧线路侧的差分线上加TVS管选型时注意结电容要小于5pF否则会影响信号完整性。如果是做电力行业或户外设备还要考虑雷击浪涌这时候需要加气体放电管或者更高级别的浪涌保护方案变压器也要选带屏蔽的型号。PCB Layout上RJ45金属外壳的接地焊盘要直接连接到保护地不要和数字地大面积直接相连而是通过高压电容桥接。这样静电泄放路径短不易串进系统电源地。5.2 低功耗与复位时序优化如果你的产品需要做低功耗模式LAN8720A的REGOFF引脚就派上用场了。将REGOFF拉高可以关断PHY内部大部分电路电流降到微安级。但注意从REGOFF拉低恢复到正常工作需要重新初始化PHY寄存器软件上要处理这个流程。复位时序也值得专门提一下。LAN8720A的复位信号低电平持续时间建议大于2ms如果你用MCU的GPIO控制复位引脚上电后要确保在初始化代码里延时等待复位完成。有些朋友用简单的RC复位电路结果复位时间不够芯片偶尔起不来现象就是第一次上电能通断电重启后不通了非常诡异。5.3 方案复用与进阶换PHY芯片和扩展多网口LAN8720A不是万能的如果你的产品后续要升级到千兆以太网那应该选择RTL8211F或YT8531这类千兆PHY它们工作在RGMII接口模式和现在的手工完全不一样。但在100M这个段位LAN8720A的生态和资料优势在很长时间内还是很难被替代的。如果你自己做核心板可以考虑在LAN8720A基础上把RJ45做成独立小板通过排针引出RMII信号、电源和复位、中断信号。这样在做不同项目时可以直接复用这个小板也可以在一块主板上挂多个PHY芯片来实现多网口。要注意的是多个PHY挂在同一条MDIO总线上时每颗PHY的PHYAD必须不同这是绕不开的前提。6. 从原理图到量产一些没写在数据手册里的习惯最后分享几个我自己的设计习惯。画原理图时所有LAN8720A相关信号都加网络标签并且统一带ETH_前缀比如ETH_RMII_TXD0、ETH_MDC、ETH_MDIO。PCB布线阶段用颜色区分网络类型信号线一种颜色、电源一种、地一种这样检查时比对着密密麻麻的飞线高效得多。还有制板回来后不要急着上电先用万用表量一遍3.3V和GND之间的阻抗确认没有短路。我第一次画以太网板子时就是没量直接上电结果发现VDDCR电容焊反芯片烧了一块板子就这么报废了。成本不是最大的问题问题是耽误了整整一周的开发时间。给板子设计一个好的PHY复位电路也特别值。我后来都在复位引脚加了一个0.1uF的电容到地同时串联一个1kΩ电阻到MCU的GPIO这样既能提供上电自动复位又允许软件随时单独复位PHY调试时可方便了。如果条件允许在出板前打样一版小板验证一下网络变压器和RJ45的接法是否OK这个成本很低但能避免很多量产后的返工。我在实际项目中就通过这种方式提前发现了某个一体式RJ45的连接器内部引脚顺序和预期不一致的问题量产后才改的话代价就大了去了。
返回列表