
最近在调试一块带网口的主控板MCU 侧自带 MAC 控制器物理层收发器需要单独外挂。最开始我想沿用开发板上常见的 LAN8720但仔细对比一圈之后实际项目里改用了 RTL8201F。如果你正在做嵌入式硬件设计打算给 STM32 或其它带 MAC 的 MCU 增加 10/100M 百兆以太网接口这篇内容基本可以当成一份带避坑注释的参考笔记来用。文章会覆盖选型思路、原理图里各个关键模块的设计细节、变压器和 RJ45 的连接方法最后把我两次打板过程中实际踩中的 5 个隐蔽问题完整拆开讲每个问题都给出排查链路的全过程。1. 选型阶段RTL8201F 和 LAN8720、DP83848 怎么选1.1 三款常见百兆 PHY 的核心差异做以太网硬件设计第一步不是看原理图而是做 PHY 选型。市面上 10/100M 的 PHY 非常多我拿三款最具代表性的做对比RTL8201F、LAN8720A、DP83848。它们的核心差异如下表。对比项RTL8201FLAN8720ADP83848支持的 MAC 接口MII / RMII仅 RMIIMII / RMII供电方案3.3V 单电源3.3V 输入内置 1.2V 稳压3.3V 单电源封装形式LQFP48QFN24LQFP48 / QFP晶振方案25MHz 无源晶振50MHz 无源晶振或由外部提供 50MHz 参考时钟25MHz 无源晶振Auto-Negotiation支持支持支持Auto-MDIX支持支持部分型号支持参考设计资料老牌方案资料丰富模块级资料多但寄存器手册较简略工业项目资料全面手册规范大致成本低较低偏高如果你只是画个 PCB 做验证这三款都能跑通但设计时的“顺手程度”差别很大。RTL8201F 是 48 脚 LQFP 封装引脚外露手工焊接和飞线调试都方便LAN8720 是 QFN24体积小但 QFN 引脚在底部手工焊接难度高而且它的 RMII 参考时钟方案对初学者来说比较容易踩坑。DP83848 当然好手册完整、工业级可靠性高但价格通常贵一倍以上对成本敏感的消费类或创客项目不太友好。1.2 我为什么最终选定 RTL8201F实际原因有以下几条。第一RTL8201F 支持 MII 和 RMII 两种接口模式给了 PCB 布线阶段很大的调整空间。RMII 只有 2 根数据线MII 有 4 根数据线我可以根据主控引脚占用情况临时切换不会推倒重来。第二3.3V 单电源设计非常省事。很多 MCU 系统本身就是 3.3V 主供电不需要额外增加电压转换电路RTL8201F 的 IO 引脚也可以直接和 3.3V 的 MAC 互连不需要电平转换芯片。第三RTL8201F 支持 Auto-MDIX 自动交叉功能。使用普通交叉网线或者直通网线都可以自适应调试阶段省掉了很多“网线接反了”的低级麻烦。第四它的参考设计和寄存器表格都很齐全网上也容易找到前人的踩坑记录遇到问题时可以快速搜索到有效信息。1.3 什么情况下不建议用 RTL8201F选型不是越便宜越好。如果你的应用需要千兆以太网应该选 RTL8211 系列或者更高端的 PHYRTL8201F 只支持 10/100M速率上就不满足。如果产品需要过严格的工业级认证而且工作环境温度变化剧烈要仔细确认 RTL8201F 的温度等级是否符合要求。还有一点如果 PCB 面积非常紧张或者需要极简设计LQFP48 的封装面积确实比 LAN8720 的 QFN24 要大不少这时候选 RTL8201F 就不太合适。2. 原理图硬件设计供电、时钟、复位这三块不能救2.1 供电和去耦AVDD、DVDD 不能混为一谈RTL8201F 内部同时存在数字逻辑电路和模拟前端电路外部供电都是 3.3V但原理图设计上会把 AVDD 和 DVDD 引脚区分开。不要图省事把 AVDD 和 DVDD 直接就近连到一个电源网络就算完事这样模拟部分容易受到数字开关噪声干扰严重时会出现协商不稳定、丢包率偏高的问题。我实际使用的做法是在 AVDD 引脚旁边放一个 10μF 钽电容加一个 0.1μF 陶瓷电容DVDD 引脚旁边放一个 10μF 陶瓷电容加一个 0.1μF 陶瓷电容。所有去耦电容的地端直接打过孔到主地平面电容本体尽量贴近芯片的电源引脚不要拉长走线。这里有一个常见的认知误区很多人以为 AVDD 和 DVDD 要分地于是把 PCB 的地平面割成模拟地和数字地两块。其实百兆以太网 PHY 这样的芯片频率只有 25MHz 或 50MHz正常铺一个完整地平面就足够了割地反而容易造成回流路径不连续引入更大的噪声。如果非要优化把 AVDD 的滤波电容位置处理好比分割地平面有效得多。2.2 25MHz 晶振电路不起振的坑都是从这里来的RTL8201F 的时钟基准是一颗 25MHz 无源晶振连接在 XTAL1 和 XTAL2 两个引脚之间。原理图里每个晶振引脚对地接一个负载电容典型值是 12pF 到 22pF具体要根据晶振厂家的负载电容参数计算。负载电容不匹配的典型后果不是完全不起振而是振荡幅度偏低、起振时间变长或者频率偏移导致 PHY 和链路对端协商出问题。画晶振电路时有几个额外细节晶振两端并联一个 1MΩ 反馈电阻确保放大器工作在合适的工作点。部分 PHY 芯片内部已经集成这个电阻需要查手册确认不确定就外部加上不会有什么坏处。晶振走线要短并且尽量远离 TX 差分线、电源走线和其它高频信号。晶振下方最好不要铺地铜避免寄生电容过大导致不起振。晶振外壳如果有接地焊盘要良好接地否则可能辐射干扰。2.3 复位电路RC 复位和 GPIO 复位要并存RTL8201F 的复位引脚是低电平有效要求电源稳定后再维持一段时间的低电平才能可靠复位。最简单的做法是 RC 复位用一个 10kΩ 上拉电阻和一个 1μF 电容到地上电时电容充电产生低脉冲。这种做法虽然能工作但调试时想软复位 PHY 就很麻烦。更推荐的做法是把复位引脚直接接到 MCU 的一个 GPIO由软件控制复位时序。如果 GPIO 资源紧张至少要预留一个 0Ω 电阻位方便后续飞线。如果使用 Watchdog 或 MCU 复位建议同时在复位引脚上挂一个小 RC 网络避免 PHY 在 MCU 复位过程中进入不确定状态。3. MAC 接口连线MII 和 RMII 的信号与时钟方向是重点3.1 模式配置引脚不同模式的接线差异RTL8201F 通过模式配置引脚选择工作在 MII 还是 RMII 模式通常这几个引脚在芯片内部有默认上下拉外部也可以通过电阻强行设定。画原理图时不要只看功能名要看数据手册里模式配置的完整表格把 MODE 相关引脚按电平要求接好。我见过有人把 MODE 引脚直接悬空结果芯片默认进入了一种非预期模式调试时浪费了整整一天。建议在原理图中把这些模式配置引脚引出测试点至少标注上默认电平和期望模式。一旦发现 PHY 工作异常先用万用表量测试点电压是不是和目标模式一致。3.2 MII 模式下的连接细节MII 接口的数据线是 4 位TXD[3:0] 和 RXD[3:0]再加上 TX_EN、TX_CLK、RX_DV、RX_CLK。RTL8201F 作为 PHY需要给 MAC 提供 TX_CLK 和 RX_CLK 时钟也就是说这两个时钟是 PHY 输出的MAC 侧是时钟从模式。原理图连线时最简单的做法就是把同名信号一对一连到 MAC但要注意以下几点TX_CLK 和 RX_CLK 都是 25MHz与 100M 速率对应。CRS 和 COL 信号在某些 MAC 上不需要可以悬空但需要参考 MCU 数据手册确认。MII 接口的信号线数量较多布线时要保证所有信号线的长度尽量一致至少不能出现一根走线特别长、其它特别短的情况否则高速信号时序容易出问题。3.3 RMII 模式下的连接细节RMII 接口只需要 2 根数据线TXD[1:0] 和 RXD[1:0]控制信号有 TX_EN 和 CRS_DV。RMII 的时钟频率是 50MHz这个 50MHz 参考时钟是整个接口设计里最容易出错的地方。50MHz 参考时钟通常有两种提供方式第一种是外部晶振或时钟源同时给 PHY 和 MAC 供时钟保证同源第二种是 PHY 内部通过倍频或分频后从 REF_CLK 引脚输出 50MHz提供给 MAC。RTL8201F 支持哪种方式、默认配置是哪种一定要查清楚。如果 PHY 输出了 50MHz而 MAC 也以为自己要输出 50MHz两边就会互相矛盾表现为 CLK 引脚上有波形但数据收发完全不通。RMII 模式下CRS_DV 信号是载波侦听和数据有效合并在一起的MAC 收到高电平就知道总线上有数据活动。原理图连线和 MII 一样同名信号直连即可但 REF_CLK 的网络名要单独检查和确认方向。3.4 MDIO/MDC 管理接口与 PHY 地址设置MDIO 和 MDC 是 MAC 和 PHY 之间的管理接口用来读写 PHY 寄存器。MDC 是时钟由 MAC 输出MDIO 是双向数据线。原理图上 MDIO 通常需要接一个 1.5kΩ 到 10kΩ 的上拉电阻具体数值参考 MAC 和 PHY 手册建议用 4.7kΩ。PHY 地址由 I/O 引脚的电平决定RTL8201F 通常通过 PHYAD 引脚配置。如果你的以太网接口有好几路每片 PHY 的地址必须不同否则 MDIO 总线上多片 PHY 会冲突。即便只有一片 PHY也建议把地址引脚用电阻明确拉到高或低不要悬空。MDIO 总线的走线长度不要太长如果走线过长上拉电阻要适当减小避免信号边沿变缓。4. 变压器和 RJ45容易被忽略的信号链细节4.1 为什么 PHY 和 RJ45 之间非要加网络变压器很多人第一次画以太网电路时会疑惑RTL8201F 的 MDI 引脚和 RJ45 之间为什么要放一个变压器直接连接不行吗答案是不行。网络变压器承担三个作用耦合信号直流隔离让 PHY 和网线之间没有直流电流通路避免电位差损坏芯片。提供共模抑制滤除网线上的共模干扰。配合终端电阻完成阻抗匹配保证信号完整性。没有变压器的以太网只适合用很短的线缆做实验而且非常容易损坏设备。正式项目一定要加变压器这个成本不能省。4.2 变压器选型和接线百兆以太网变压器通常是 1:1 变比常见型号有 HR601680、HanRun HR911105A 等有些厂商会把变压器和 RJ45 集成到一起做成带变压器的网口座比如 HR911105A。集成网口座的优点是原理图和 PCB 都省事缺点是散热和维修性稍差。如果使用分立式变压器要确认它在 10/100M 下工作正常不要买千兆型号因为千兆变压器内部走线设计不同直接替换可能出兼容性问题。参考 RTL8201F 数据手册里的典型应用电路MDI 引脚到变压器之间通常要串联小电阻再并联终端电阻具体阻值以手册为准。4.3 MDI 引脚的极性和交叉关系RTL8201F 的 MDI 信号分成两组差分对TX / TX- 和 RX / RX-。在 10/100M 以太网里PHY 的 TX 需要和远端的 RX 对接。由于 RTL8201F 支持 Auto-MDIXPHY 可以自动检测网线是直通还是交叉并根据检测结果在内部自动切换收发方向所以外部不再需要手动区分网线类型。不过这带来了一个新的隐患如果原理图上把 TX 和 RX 接反Auto-MDIX 能否自动纠正取决于芯片的能力范围。实际测试中大多数支持 Auto-MDIX 的芯片只能纠正“TX 和 RX 整组互换”不能纠正“TX 和 TX- 反接”这种极性错误。所以画原理图时仍然要按手册仔细接对每根信号线不能心存侥幸。5. 避坑指南两版打板实测踩出来的 5 个问题5.1 坑一晶振不起振排查链路比换器件更关键现象是 PHY 的供电和复位都正常但是 LINK 灯不亮示波器点在 XTAL1 引脚上没有任何波形。我第一反应是晶振坏了换了一颗新晶振依然没有波形。接着我开始怀疑负载电容值不对把 22pF 电容换成 12pF还是没有波形。后来我重新翻 RTL8201F 的手册发现 XTAL1 和 XTAL2 这两个引脚在 PCB 布局时对地电容比较敏感而我的 PCB 上有一段较长的走线连接到晶振导致寄生电容偏大等效负载电容超过晶振的设计范围振荡条件无法满足。解决办法是把晶振尽量靠近 PHY 引脚缩短走线并重新计算负载电容。改版之后晶振第一次上电就正常起振。这个坑给我的教训是晶振不起振不要一上来就换晶振先检查 PCB 布局和负载电容是否匹配。用示波器探头测 XTAL1 时探头本身的电容也会影响振荡建议用 x10 档位测量。5.2 坑二PHY 能协商成功但 ping 不通对端现象是网线插上后 LINK 灯正常亮起说明物理链路协商成功但 ping 网关一直超时抓包软件看不到任何收包。我检查了 MAC 侧配置、IP 地址、网络参数全部正常。排查链路从 PHY 内部寄存器开始。我用 MDIO 工具读出 RTL8201F 的基本状态寄存器发现速度协商和双工模式都正确链路状态也正常。接下来怀疑 MDI 变压器一侧的信号极性不对于是把示波器探头接到变压器次级观察到的差分波形幅度正常但是 TX 和 RX 的极性相对于期望方向是反的。问题根因是我在原理图符号库中建 MDI 连接器时把 TX 和 TX- 的网络名标反了。由于 Auto-MDIX 能够处理好 TX/RX 整组互换不能处理好差分极性错误所以链路协商能成功但数据完全不通。修正网络名重新打样后问题消失。5.3 坑三RMII 模式下 REF_CLK 时钟方向接反另一块板子上我改用 RMII 模式使用的 MAC 要求接收外部 50MHz 参考时钟。我看 RTL8201F 手册时发现它也能输出 50MHz 参考时钟就想着直接让 PHY 输出给 MAC省掉一个外部时钟源。结果上电后 REF_CLK 引脚有波形MAC 也收到了时钟但以太网始终无法通信。排查后发现 RTL8201F 的 REF_CLK 输出使能是由一个配置引脚控制的默认状态是输入模式。我用的 MAC 无法主动识别这个引脚的电平状态导致时钟方向虽然对了但 PHY 并没有实际驱动该引脚。解决方法是把 REF_CLK 方向配置引脚按手册要求拉到正确电平并且在原理图中加一个跳线电阻方便后续切换时钟来源。如果不想折腾直接用一个 50MHz 有源晶振同时给 PHY 和 MAC 供时钟是最稳妥的方案。5.4 坑四LED 指示灯驱动电流过大PHY 发热RTL8201F 提供 LED 输出引脚用来指示 Link、Active 等状态。我最初参考一份网上流传的原理图把 LED 直接串了一个 1kΩ 电阻接到 3.3V结果 LED 亮度正常但芯片工作一段时间后温度明显升高。我用万用表量 LED 引脚电压发现它内部其实是开漏结构外部上拉后电流达到十几毫安超过了手册推荐的驱动能力。正确的做法是查 RTL8201F 数据手册的 LED 输出最大灌电流参数串电阻把电流限制在 3mA 到 5mA 左右。我最终把 1kΩ 电阻调整为 5.1kΩLED 亮度虽然略有降低但完全可识别PHY 温度恢复正常。画原理图时LED 电阻不要照抄网上的原理图要根据芯片手册的实际参数计算。5.5 坑五地平面被 PCB 走线切断导致丢包率异常这块问题是最难定位的。板子能正常 ping 通网络功能看起来正常但长时间大流量传输时丢包率高达百分之几用 iperf 测吞吐量只有理论值的一半左右。一开始怀疑是 PHY 芯片本身工作不稳定后来用示波器抓 PHY 的电源引脚看到 3.3V 上有明显的高频纹波而且纹波出现时间和网络流量同步。最终在 PCB 上发现由于布线空间紧张我在 PHY 下方的地平面走过了一组电源线把完整地平面切出一个狭长的缝隙。以太网差分信号和晶振信号的回流电流没法直接通过被迫走了一条很长的路径形成了回环天线产生共模噪声干扰了 PHY 的模拟前端。解决办法是调整布线所有信号走线优先放在 PHY 上方不允许在 PHY 下方的地平面穿过其它信号。改版后同样的硬件配置iperf 吞吐率达到 90Mbps 以上丢包率降到零。这个坑说明原理图看起来完全正确并不能保证功能正常PCB 布局布线对 PHY 类模拟数字混合芯片的影响非常大。6. 上电调试顺序从供电到整机吞吐测试6.1 先量供电和时钟不要急着连网线拿到一块新板子上电后第一件事不是插网线而是先量三个关键点3.3V 电源电压是否正常、地平面是否存在短路、各路去耦电容两端是否都有电压。确认供电没问题后用示波器点 XTAL1 引脚看 25MHz 波形是否稳定。稳定波形是指频率准确、幅值足够且无明显毛刺。如果这两项都通过再继续往下走。6.2 检查复位时序复位引脚在电源稳定后应该从低电平变高电平。用示波器单次触发抓这个上升沿可以看到复位脉冲宽度是否符合 RTL8201F 的手册要求。如果复位时间太短PHY 可能没有完成初始化表现为寄存器访问异常或者 LINK 灯状态不对。建议在调试早期就把复位时序抓下来存档后面出问题时可以回头对照。6.3 通过 MDIO 读取 PHY ID配置好 MAC 的 MDIO/MDC 引脚后尝试读取 RTL8201F 的 PHY ID 寄存器。读出的值应该和芯片手册一致如果读到全 F 或全 0说明 MDIO 访问有问题常见原因有引脚连线错误、上拉电阻缺失、PHY 地址配置错误或者 PHY 始终处于复位状态。这一步能确认芯片本身和 MAC 的管理通路是否正常。6.4 使用 PHY 内部回环模式验证数据通路RTL8201F 支持内部回环模式配置对应寄存器后MAC 发出的数据会从 PHY 内部直接环回不需要外部网线设备。此时可以先用简单的方式验证 MAC 的发送和接收链路是否正常。回环测试通过后再接外部网络设备这样可以把问题范围缩小到 PHY 之后的部分而不是一上来就怀疑 MAC 和 PHY 之间的硬件连接。6.5 接设备联调ping 和 iperf 都要测回环测试通过后把板子连到交换机或电脑先看 LINK 灯是否亮起。LINK 亮起后再试 ping。ping 通了不代表网络就是稳定的要用 iperf 或者类似工具做满双工吞吐量测试观察有没有丢包、时延抖动。我个人的经验是很多 PHY 相关的隐蔽问题只有在持续大流量下才会暴露单纯 ping 很难发现问题。6.6 实测中最耗时的定位方式在所有调试步骤里最耗时的不是硬件连接问题而是 MAC 侧驱动配置和 PHY 寄存器配置不匹配的问题。比如 MAC 配置成全双工而 PHY 协商结果是半双工或者 MAC 配置了巨型帧PHY 不支持或者时钟极性不匹配等一系列组合问题。这类问题通常不在原理图上而要靠软件侧认真读寄存器逐个字段对照才能找到匹配参数。7. 原理图检查清单交板前逐项过一遍画完原理图、发出去打板之前我会拿着下面这份清单逐项检查。这不是官方文档里的东西是我自己踩坑踩出来的习惯。即便项目赶进度这个检查也值得花十分钟做一下。供电AVDD 和 DVDD 是否都有去耦电容电容是否靠近引脚电源网络是否有 0Ω 电阻或磁珠便于调试时断开分区测量。时钟25MHz 晶振附近是否有负载电容晶振走线是否尽量短是否避免了和差分信号平行走线。复位复位引脚是否有可靠的上电复位时序是否有 GPIO 控制手段是否有测试点。MAC 接口MII/RMII 模式选择引脚是否按手册配置引脚是否没有悬空时钟方向是否正确。MDIOMDC 和 MDIO 是否连接正确MDIO 上拉电阻是否加上PHY 地址是否明确设置。变压器和 RJ45MDI 信号与变压器连接是否同名对应差分极性是否检查过中心抽头是否按参考设计接上拉电阻。LED每个 LED 是否按引脚输出电流能力计算了限流电阻是否确认了 LED 极性。测试点关键信号时钟、复位、MDIO、MDC、模式配置是否预留了测试点或 0Ω 电阻位。8. 关于 RTL8201F 的更进一步参考方向如果你的项目需要更底层的调试能力建议把 MDIO 读写做成一个小工具函数方便直接在代码里读写 RTL8201F 寄存器。这样在做协议分析时可以快速确认协商状态、链路状态、中断标志比反复插拔网线要高效得多。寄存器读写本身不复杂MDC 时钟频率一般在 2.5MHz 左右GPIO 模拟都完全够用不需要专门的 SPI/I2C 接口。另一个值得注意的方向是功耗控制。RTL8201F 支持一些低功耗模式和电源管理功能如果你的产品需要做低功耗可以通过 MDIO 关闭不用的功能但要注意恢复链路时的唤醒时间。具体寄存器的操作方式建议以最新版数据手册为准因为不同批次或版本可能在寄存器细节上有差异。我看过很多开发板上的参考原理图大多数能跑通但细节上存在经不起推敲的地方。如果你想在自己的项目里稳定复用这个 PHY建议以原厂数据手册中的“典型应用电路”为基准再结合网上的经验做局部调整。核心思路始终是功能能否跑通看的是大框架稳定性靠的是电源、时钟、地、信号完整性这些基础细节。用 RTL8201F 做百兆以太网是个相对成熟的选择原理图和 PCB 都不复杂但每一步都值得认真对待。