☰
STM32F407+LAN8720A以太网PHY硬件设计:原理图到PCB布局全解析
2026/10/6 11:13:26 网站建设 项目流程

去年给一位客户做STM32F407控制板,原理图和PCB改了三轮,前两版都卡在同一个地方——以太网PHY电路。第一版打样回来,网口灯完全不亮,量了一圈才发现LAN8720A的时钟配置方向搞反了;第二版Link灯倒是亮了,但ping包丢得厉害,最后定位到差分对走线和参考平面问题。第三版稳定量产之后,我把这过程中反复翻车又反复验证的经验整理成了这篇文章,重点讲清楚LAN8720A这颗PHY在F407平台上从原理图设计到布局优化再到上电调试的完整链路。

这篇文章适合正在画F407网口电路、或者板子回来网口不通正在排查的硬件工程师看。内容不绕弯子,从选型理由、时钟复位电源三个命门、最小系统逐信号拆解、网络变压器端接、PCB布局约束,到最后的调试排查链路,每一步都按实际项目里会遇到的顺序展开。你可以把这篇文章当成一份“照着画就能少踩坑”的LAN8720A工程笔记。

1. 为什么这块板子的网口选了LAN8720A:RMII选型与硬件架构

1.1 先想清楚一件事:F407到底缺什么

STM32F407内部集成了以太网MAC控制器,但MAC只是“数据链路层”的大脑,它不负责把数字信号变成差分模拟信号往网线上送。要让网口真正工作,必须外挂一颗PHY芯片,MAC通过MII或RMII接口和PHY对接,PHY负责编码、收发模拟差分信号、自动协商等脏活累活。

所以第一步不是打开EDA工具画图,而是选一颗合适的外部PHY。这里最经典的搭配就是F407加LAN8720A,ST自家的评估板和大量第三方开发板都用这个组合,配套的HAL库驱动、LwIP例程也最全,出了问题查资料的成本最低。

1.2 为什么是RMII而不是MII

F407的MAC接口支持MII和RMII两种方式,区别很直接:

  • MII需要16根数据/控制信号,接口时钟25MHz;
  • RMII把数据线从8位砍到2位,总共只需7根信号,接口时钟固定50MHz。

对于10/100M以太网,RMII用两倍时钟换来了接口引脚减半,这在F407这种IO紧张的芯片上意义很大。尤其是当板子上还要接LCD、SD卡、CAN、串口时,省下的9个引脚足够多挂一路外设了。所以只要不是特别在意MII的某些特性,F407方案基本都走RMII。

RMII模式下F407和PHY之间需要连接如下7根信号:

  • TXD0、TXD1:发送数据线;
  • TX_EN:发送使能;
  • RXD0、RXD1:接收数据线;
  • CRS_DV:载波侦听/数据有效,这是RMII复用的关键信号;
  • REF_CLK:50MHz参考时钟,由PHY或MAC侧提供。

1.3 和DP83848、YT8512H放在一起看,LAN8720A赢在哪

画图前我其实对比过三颗常用PHY:TI的DP83848、国产的YT8512H,以及Microchip(原SMSC)的LAN8720A。它们在F407平台都能用,但各有脾气:

对比项LAN8720ADP83848YT8512H
封装QFN24,小LQFP48,大QFN32,中等
接口模式仅RMIIMII/RMII可选RMII为主
时钟方案25MHz晶振,内部PLL倍频出50MHz通常需要25MHz或50MHz时钟类似LAN8720A
内置LDO有,VDDCR 1.2V内部生成部分版本无,需外部供电有
资料丰富度ST例程多,社区量大老牌,但封装大国产,资料相对少
价格便宜且稳定偏贵最便宜

DP83848性能没问题,但LQFP48封装占了太多面积,而且MII模式在F407这种场景下接口信号多到没必要。YT8512H价格低,板子上用也行,但资料和调试经验明显少一截,遇到问题只能自己啃手册。LAN8720A的QFN24封装非常小,板上空间省,内置1.2V稳压器意味着3.3V单电源就能跑,Auto-MDIX自动翻转还能容忍网线做错或接错交叉线。综合算下来,LAN8720A是F407平台上“性价比和可靠性平衡得最好”的选择。

1.4 硬件分层:从MAC到RJ45的完整链路

原理图上看起来是F407直接连RJ45,实际上中间隔了四层:

  • 第一层:F407的MAC,运行LwIP或裸机协议栈;
  • 第二层:RMII接口总线,连到PHY;
  • 第三层:LAN8720A完成编解码、跳变、自动协商;
  • 第四层:网络变压器和RJ45,实现电平耦合与隔离。

LAN8720A虽然是PHY,但它的引脚分了三组:数字接口(RMII、SMI)、控制引脚(复位、时钟、PHY地址)、模拟差分引脚(TX_P/TX_N/RX_P/RX_N)。原理图画得好不好,就看这三组信号是否各归其位、有没有健壮的外部电路配合。

2. 时钟、复位、电源三件事:很多板子翻车就翻在这

2.1 时钟方案:50MHz REF_CLK到底从哪来

网上关于F407和LAN8720A的讨论里,出现频率最高的问题就是REF_CLK怎么接。这里有两个方案,很多人混淆,画错了板子回来就傻眼。

方案A:25MHz无源晶振接LAN8720A的XI/XO,LAN8720A内部PLL把25MHz倍频到50MHz,然后从REF_CLK引脚输出50MHz给F407。这是ST例程和大多数开发板采用的方案,也是我推荐的方案。

方案B:由F407的MCO1输出50MHz时钟,接到LAN8720A的REF_CLK/X1引脚,PHY工作在从模式,不接晶振。

区别必须讲清楚:方案B看着能省一颗晶振,但F407主频168MHz时,想从PLLQ分频得到精确50MHz并不容易。MCO1输出的时钟源自PLLQ,PLLQ还要兼顾USB的48MHz需求,两者很难同时满足。LAN8720A虽然允许外部直接注入50MHz,但设计者往往卡在时钟源分频配置上,板子回来之后PHY反复无法建立Link,最后还得回头改晶振方案,白白浪费一版PCB。

所以我的建议是:LAN8720A方案老老实实用25MHz无源晶振,把生成50MHz的活交给PHY内部PLL。这颗PLL本质上就是个锁相环,25MHz参考输入,内部倍频到50MHz作为RMII的基准时钟,只要晶振精度够、负载电容匹配,50MHz输出很稳。

晶振的负载电容一般选18pF到22pF,具体看晶体手册的CL值。有些同学为了省事不焊电容,结果实测REF_CLK频率漂移,网口丢包严重,这是典型的省小钱花大钱。

2.2 复位电路:别只放个上拉电阻就完事

LAN8720A的NRST引脚是低有效复位。网上很多参考电路就放一个10k上拉到3.3V,看起来能工作,但上电时序没保障:如果复位释放太快,PHY内部寄存器还没初始化完成,后续配置就可能失败。

我常用的结构是10k上拉电阻加1uF对地电容,形成RC延时复位。算一下时间常数:τ = R × C = 10kΩ × 1uF = 10ms,按5τ计算,复位释放大概在50ms左右,足够覆盖电源稳定时间。如果板上还有其他芯片需要复位,比如交换芯片或传感器,可以把这路RC复位后接一个非门或复位IC统一分配,保证时序一致。

另外要提醒一句:有些PHY对复位释放后到MDIO可访问的时间有要求,手册里通常会写一个最小值,比如“复位释放后至少等待xx毫秒再通过SMI访问”。这个等待要在软件里做,不要在硬件上死磕。

2.3 电源去耦:VDD、VDDIO、VDDCR各管一路

LAN8720A电源引脚有讲究,不是所有引脚都直接接3.3V就行。

  • VDD:主电源3.3V,PHY内部数字逻辑用电,旁边放10uF和0.1uF电容并联去耦;
  • VDDIO:IO口电源,决定RMII和MDIO引脚的电平,F407是3.3V系统,所以VDDIO也接3.3V,就近配0.1uF电容;
  • VDDCR:内部1.2V稳压器输出引脚,这个不是输入电源,而是内部LDO的输出,需要外部接低ESR电容,典型值2.2uF,而且电容必须尽可能靠近VDDCR引脚放置。

很多人第一次画LAN8720A会把VDDCR当成需要外接1.2V的电源引脚,直接给个固定电平,板子一上电PHY就发烫,量VDDCR发现不是内部正常输出的1.2V,而是被外部电源顶住了。这就是没看手册“VDDCR is an output”的代价。

电源设计我给一份可以直接抄的清单:

电源网络电压推荐电容组合备注
VDD3.3V10uF + 0.1uF就近PHY电源脚
VDDIO3.3V0.1uF靠近VDDIO引脚
VDDCR1.2V(输出)2.2uF,低ESR贴VDDCR引脚附近,钽电容或X5R陶瓷均可

如果板子上模拟、数字电源敏感,可以在3.3V进入PHY电源区前加一颗磁珠,600欧姆/100MHz规格就够。但注意VDDCR输出电容不要加磁珠,它是内部LDO的补偿电容,串了磁珠可能导致LDO不稳定,实测会频繁复位。

3. 逐信号走一遍LAN8720A最小系统原理图:该拉高拉高,该就近接地

3.1 RMII数据接口:TXD0/TXD1/TX_EN/RXD0/RXD1/CRS_DV

先看发送侧。F407的ETH_TXD0、ETH_TXD1连接到PHY的TXD0、TXD1,ETH_TX_EN连到PHY的TX_EN。这三根信号都是F407输出、PHY输入,直接用10k上拉或下拉的都不对,正常工作时由MAC驱动。

接收侧反过来,PHY的RXD0、RXD1、CRS_DV输出给F407的ETH_RXD0、ETH_RXD1、ETH_CRS_DV。这组信号在F407侧是输入,不需要上拉。

有个容易忽略的细节:CRS_DV在RMII模式下把载波侦听和数据有效合并到一根线上,没有CRS和RX_DV分离的信号,所以原理图库选封装时一定要确认用的PHY是RMII版本引脚排列,别把MII/RMII版本信号名搞混。

3.2 管理接口:MDIO、MDC、PHY地址和中断

MDIO是SMI管理接口的数据线,双向开漏,外部必须接上拉电阻,典型值4.7k到3.3V。MDC是管理时钟,由MAC侧输出,不需要上拉。这两根线是调试时最重要的窗口,所有PHY寄存器的读写都靠它,一旦MDIO上拉漏画或贴错阻值,F407读不到PHY ID,以太网驱动就永远初始化失败。

PHY地址配置是另一大坑。LAN8720A的SMI地址由PHYAD0引脚电平决定低位的0/1,前缀固定。把PHYAD0接到GND,PHY地址就是0x00;如果上拉到3.3V,地址就是0x01。ST官方驱动里默认PHY地址常写成0,所以大多数开发板都把PHYAD0下拉到地。如果板子上SMI总线上挂了多个PHY,那就要给不同PHY分配不同地址,PHYAD0是其中之一,设计多个PHY共存时先规划好地址分配表。

nINT中断引脚可以接F407的一个EXTI输入,用来快速感知PHY链路变化,但不是必须的。如果省掉这脚,软件也可以通过轮询寄存器状态来获得Link变化,代价是增加一点CPU开销。

3.3 LED指示:nLED0和nLED1不是摆设

LAN8720A有nLED0和nLED1两个指示引脚,默认映射是:

  • nLED0:链接/活动指示(Link/Activity);
  • nLED1:速率指示(Speed)。

设计原理图时建议各串一个限流电阻接LED到3.3V,电阻选1k到2.2k,根据LED亮度微调。这两个LED在上电调试阶段价值极大:

  • nLED0不亮,说明物理链路没建立,优先查变压器、差分线、对端设备;
  • nLED0亮但nLED1状态不对,比如协商到100M时速率灯不亮,PHY寄存器配置可能有误;
  • 插拔网线时nLED0闪烁,说明PHY正在重新协商。

所以不要为了省两个LED而把这组引脚悬空,它比串口打印更快反映物理层状态。

3.4 差分接口:TXP/TXN/RXP/RXN

连接网络变压器时,TXP/TXN是PHY发送差分对,RXP/RXN是接收差分对。这里注意,原理图封装里的TXP/TXN和RXP/RXN在PCB上必须严格按差分对布线,不能为了绕线随意交叉交换。虽然LAN8720A有Auto-MDIX,能自动适应直连线和交叉线,但那是针对“网线两端插错”的情况,不是让你在PCB上随便把差分对调换。

3.5 最小系统逐脚配置总表

下面这份表格是我每次画LAN8720A原理图都会对着核对一遍的清单,直接参考:

引脚分组引脚名方向接法
发送数据TXD0/TXD1输入接F407 ETH_TXD0/TXD1
发送使能TX_EN输入接F407 ETH_TX_EN
接收数据RXD0/RXD1输出接F407 ETH_RXD0/RXD1
载波/数据有效CRS_DV输出接F407 ETH_CRS_DV
参考时钟REF_CLK输出/输入晶振方案时输出50MHz给F407
管理数据MDIO双向4.7k上拉到3.3V,接F407
管理时钟MDC输入接F407,不上拉
PHY地址PHYAD0输入下拉到GND(地址0)或上拉(地址1)
中断nINT输出可接F407 EXTI,也可悬空
LEDnLED0/nLED1输出串1k~2.2k电阻接LED到3.3V
晶振XI/XO—25MHz晶振,18pF~22pF负载电容
复位nRST输入10k上拉 + 1uF对地电容到GND
电源VDD/VDDIO—3.3V,就近电容去耦
LDO输出VDDCR输出2.2uF低ESR电容到GND

4. 网络变压器和RJ45:差分对、中心抽头与Bob Smith端接

4.1 集成变压器RJ45还是分立变压器加网口

LAN8720A本身没有内置网络变压器,PHY出来的差分信号不能直接推给RJ45,必须经过隔离变压器。工程上有两条路:

  • 用带集成变压器的RJ45座,比如HR911105A这类型号,座子内部已经集成了变压器和共模电感,外围电路只需少量端接电阻电容,省地方也省事;
  • 用分立网络变压器(比如HX1188NL)加普通RJ45座,灵活性高,方便更换变压器型号,但占用PCB面积更大。

F407板子如果空间够,我倾向于分立方案;如果是小尺寸核心板,直接用集成变压器RJ45更省心。集成变压器有好有差,尽量选品牌货,杂牌变压器绕线工艺不到位,差分共模抑制不好,Link灯能亮但EMC测试过不了的情况我见过不止一次。

4.2 中心抽头接法:最容易画错的地方

网络变压器的初级和次级都有中心抽头,接法不能想当然。LAN8720A这类电压型驱动的PHY,变压器PHY侧中心抽头通常接VDDIO 3.3V,并就近放一个0.1uF高频电容到地,给共模电流提供返回路径。线路侧中心抽头则要接Bob Smith端接网络,不能直接空着或直接接地。

很多参考电路把线路侧中心抽头直接接地,插上网线Link灯也可能亮,但绕线电缆带来的共模噪声没有泄放路径,长期工作或过雷击浪涌时容易损坏PHY,EMC测试也会冒出莫名其妙的超标项。

4.3 Bob Smith端接:为什么需要那组电阻和电容

Bob Smith端接是标准的线路侧端接方案,一般用四个75欧姆电阻组成星形网络,接在RJ45的差分线对和中心抽头之间,然后再通过一个高压电容(1nF/2kV左右)接地。

原理不复杂:RJ45差分线在空闲或共模激励时,75欧姆电阻提供一个阻抗匹配路径,把共模信号引到“虚拟地”,再通过高压电容泄放到大地。这个电容还要承担隔离作用,所以耐压值必须够,2kV是常规选择。

具体参数以你选的RJ45座或变压器规格书推荐值为主,但结构基本就是:75Ω网络加高压电容到地。这一小堆元件别省略,也别把它们放得离RJ45座太远,否则端接效果打折。

4.4 静电和浪涌防护:TVS选型要小心寄生电容

网口会暴露在机壳外面,热插拔网线时容易引入静电放电,所以原理图上最好在变压器线路侧加TVS保护。常用型号有SRV05、LC03CI这类低电容TVS阵列。

这里有个矛盾点:TVS的寄生电容会影响差分信号质量。普通TVS电容可达几百皮法,放在百兆差分对上会导致信号边沿变差、误码率上升。选型时优先看“电容小于5pF”的型号,才适合以太网高速信号。如果板子防护等级要求不高,甚至可以不加TVS,纯靠网络变压器隔离。

4.5 共模电感是否需要

部分参考电路会在PHY和变压器之间串共模电感。LAN8720A应用笔记里并没有强制要求,但在有较强电磁干扰的工业环境中,加一对共模电感能明显改善EMI。占用一点空间和成本,效果值得。普通消费类板子可以不加,我自己的经验是:有过EMC整改需求的板子就加上,没把握的场合也加上,成本就几毛钱。

5. 原理图之外的布局约束:差分线、参考面与晶振位置

5.1 差分对才是真正的“原理图”

原理图画得再完美,PCB布局布线时把差分对走成两根平行直线然后被过孔、撕裂、跨分割打断,网口照样工作不稳定。原理图只能表达电气连接关系,而高速信号的物理实现全在PCB上,所以我把布局布线称为“第二张原理图”。

LAN8720A在百兆速率下,严格说差分对的等长要求没有千兆那么苛刻,但至少要做到:

  • TX差分对和RX差分对内等长,长度差最好控制在5mm以内;
  • 差分对之间拉开间距,避免串扰;
  • 全程优先走表层,不要频繁换层;
  • 差分对下方必须有连续参考平面,严禁跨地分割。

阻抗控制方面,四层板时把差分对设置为100欧姆差分阻抗,常规工艺下线宽和间距大概在0.15mm/0.15mm附近,但具体数值要结合叠层计算,别直接照抄网上的参数。

5.2 晶振位置:靠近XI/XO,其他信号绕道

25MHz晶振和两个负载电容是PHY时钟的来源,它们在PCB上的摆放位置直接影响REF_CLK的稳定度。我见过晶振放在板子另一侧,走线绕了大半个板子到PHY的情况,结果是PHY能Link但速率协商不稳定,10M能通100M就丢包。

正确的布局是:

  • 晶振和负载电容紧贴LAN8720A的XI/XO引脚,走线尽量短;
  • 晶振区域下方铺地,并在周围打一圈过孔形成“地围栏”;
  • 高速信号线、电源开关节点远离晶振区域,避免干扰;
  • REF_CLK到F407的走线保持短直,可加一小段地包边。

5.3 去耦电容的位置比容值更重要

原理图里电源电容画了一大堆,PCB上如果不能靠近对应引脚,效果等于没有。VDD、VDDIO、VDDCR三组电容都要放在各自引脚的正下方或紧邻位置,走线先到电容再到引脚,而不是从电源平面引出来绕一圈。这里有个实操技巧:做封装时把去耦电容放在IC引脚附近而不是库里的默认位置,强制自己在布局阶段就照顾到电源回流路径。

5.4 变压器区域的地平面处理

网络变压器底下要不要铺地、怎么铺,是个被反复讨论的问题。我的做法是:

  • 变压器下方的PCB内层地平面挖空一部分,避免变压器初级侧的噪声通过平面耦合到次级;
  • PHY侧和RJ45侧各自的地尽量保持单点连接或通过电容桥接;
  • 如果是集成变压器RJ45,座子下方地平面也建议局部挖空,同时注意外壳接地引脚单独处理,不要直接和数字地大面积粘连。

这个细节不影响“点亮”,但对EMC和静电测试影响很大。做认证的板子尤其要注意,原理图上看不出来的差别,最后都会在测试报告里暴露。

6. 打样回来之后的调试链路:从Link灯到SMI寄存器

6.1 先按顺序量,不要上来就跑PING

板子焊好之后,第一步不是烧LwIP例程,而是按下面的链路逐步确认:

  1. 量电源:3.3V在不在,VDDCR是不是1.2V,PHY芯片是否异常发热;
  2. 量复位:nRST是否已经释放为高电平;
  3. 量时钟:用示波器或频率计量REF_CLK,确认有50MHz输出;
  4. 插网线:看nLED0和nLED1状态,确认PHY自身能否建链;
  5. 读寄存器:通过MDIO读PHY ID寄存器,确认MCU和PHY之间的SMI通信正常;
  6. 跑PING:最后才做协议层测试。

这套顺序的逻辑很简单:每一层都是下一层的前提。电源都不正常,后面全白费;时钟不对,Link灯根本不会亮;SMI不通,软件连PHY在哪都不知道,还谈什么配置。

6.2 通过MDIO读PHY ID,验证SMI链路

SMI读写是排查LAN8720A问题的利器。F407的HAL库有现成的HAL_ETH_ReadPHYRegister函数,初始化时回读LAN8720A的PHY ID寄存器,期望值是寄存器2读到0x0007,寄存器3读到0xC0F1(PHY ID整体为0x0007C0F1)。

如果读不到或者读出来是全F:

  • 先查MDC/MDIO接线有没有焊错、虚焊;
  • 再查MDIO上拉电阻是否贴错;
  • 然后查PHY地址配置是否和代码一致;
  • 最后检查PHY是否处于复位状态。

以实际经验,读ID失败80%以上都是PHY地址没对上。

6.3 常见问题现象、根因和处理对照表

现象可能根因排查/处理
上电PHY发烫VDDCR被外部供电或短路断开VDDCR外部电路,确认它是1.2V输出
REF_CLK无信号晶振没起振、负载电容错、晶振引脚虚焊示波器量XI/XO和REF_CLK,换晶振排查
nLED0不亮变压器中心抽头接错、差分线断、对端设备未上电检查端接网络,换网线直连交换机
LED正常但PING不通SMI配置失败、PHY地址错、软件初始化时序不对读PHY ID,查看RMII信号是否全部正确连接
PING丢包严重差分线不等长、跨分割、晶振干扰、共地不良检查PCB布局,测试差分阻抗,优化参考平面
协商速率不稳REF_CLK频率不准量频率,检查晶振和负载电容

6.4 STM32CubeMX配置里需要注意的两个位置

CubeMX中主要涉及两处配置。

第一处是以太网外设:选择RMII接口,外部PHY地址填你在硬件上的设置(PHYAD0拉低填0、拉高填1)。第二处是时钟:如果走LAN8720A晶振方案,RMII的50MHz来自PHY,CubeMX里不需要额外配置MCO输出;如果用了MCO送时钟方案,才需要单独把MCO1引脚配置成对应频率输出。

另外,HAL库的以太网驱动里一般需要把PHY地址宏改成实际值,比如LAN8720A地址为0时,把ETH_PHY_ADDRESS或类似宏定义改成0。很多“灯亮但初始化失败”的问题就出在这里,代码里默认的PHY地址是其他值,和硬件对不上。

6.5 两块板子做背靠背测试时的经验

如果需要调试两块F407板子之间的以太网通信,可以直接把两套PHY加网络变压器背靠背连接,中间用短网线或RJ45座对接。注意至少一端要插到交换机/PC上确认协商结果,否则两边如果配置不对,都会陷入反复协商。PHY芯片背靠背测试是验证硬件和驱动的好方法,但别用它替代真实网络环境的稳定性测试。

最后再说一句实话

这块板子的第三版其实只改了两处:把REF_CLK相关时钟方案彻底固定为25MHz晶振输出,以及重排了网络变压器区域的布线和地平面。改动量不大,但网口从“偶尔能通”变成了“怎么插都稳”。回过头看,LAN8720A原理图并没有多复杂,复杂的是那些容易被当成“参考而已”的细节——时钟方向、中心抽头、地址电平、电容位置、差分参考面。把这些细节当回事,这块板子你就能一次点亮;不当回事,多半就在调试台上多熬几个通宵。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询