尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

STM32+独立PHY+网络变压器,嵌入式以太网硬件设计全攻略

STM32+独立PHY+网络变压器,嵌入式以太网硬件设计全攻略 做嵌入式联网功能十有八九绕不开以太网。MCU选型时很多人会优先挑自带MAC的型号但关键是芯片内部只有MAC还不够物理层信号收发还得靠外部PHY芯片和网络变压器。我这次用的两颗料一颗是PHY芯片R7KA8D2KFLCAC一颗是网络变压器XP1001000-05R搭配STM32这类自带MAC的MCU就能把完整的10/100BASE-TX以太网口做出来。整个项目从原理图设计、PCB布局到驱动移植踩了不少坑这里把设计思路和调试过程完整记录下来给准备自己做以太网接口的朋友一个可直接参考的方案。这套方案之所以值得写是因为它覆盖了以太网硬件设计的全部关键环节信号链路的搭建、变压器选型与电路接法、PHY芯片的寄存器配置、PCB差分走线以及最后的联调排错。不管你是要在产品上加一个网口做远程升级还是做工业数据采集、网关设备这套思路都能直接用。1. 项目整体设计与方案选型思路1.1 为什么选独立PHY芯片加网络变压器很多MCU内部集成了以太网MAC控制器比如STM32F407、F429NXP的i.MX RT系列等。但MAC只是数据链路层的东西它负责组帧、解析、DMA搬运真正要把电信号发到网线上还需要PHY芯片把数字信号调制成模拟差分信号再通过网络变压器耦合到RJ45接口。默认情况下MCU厂商的评估板都会推荐配套的PHY方案但实际项目中PHY的选型自由度很大。用独立PHY的好处主要有三点不受MCU型号绑定的限制。同一颗MCU今天用这个PHY明天换另一颗PHY只要接口兼容驱动改一改就行。可以选功耗更低、温度范围更宽的工业级PHY。便于后期降成本。量产时如果需求变化只替换PHY和变压器即可主板改动十分有限。这次选用的R7KA8D2KFLCAC是支持10/100BASE-TX标准的以太网PHY收发器内部集成了物理编码子层和物理介质连接层支持MII和RMII两种MAC接口配套的网络变压器XP1001000-05R则负责隔离与阻抗匹配。这个组合在工业级应用中是比较常见且成熟的搭配。1.2 信号链路构成的整体框图整个以太网数据通路可以这样理解MAC在MCU内部处理后发出MII/RMII信号经过PHY芯片编码、数模转换后变成两对差分信号发送对和接收对再进入网络变压器做电气隔离和共模抑制最后到达RJ45插座通过网线连接对端设备。数据进来的时候反向运行网线差分信号经过变压器耦合到PHYPHY解码后通过MII/RMII接口返回给MAC。XP1001000-05R就是变压器这一环它的存在让板卡与外部网线之间没有直接的电气连接从而隔离了地环路减少共模干扰。我在设计时把MII/RMII接口模式通过PHY的strap引脚在硬件上固定下来省去了软件每次启动重新检测的麻烦。时序要求上RMII需要50MHz参考时钟这个时钟可以由外部晶振、MAC或PHY提供设计时要提前确认主从关系。2. 核心器件深度解析与选型要点2.1 XP1001000-05R网络变压器的角色与参数很多第一次做以太网硬件的人会忽略变压器的重要性以为它就是一个普通的耦合电感随便买一个绕线电感焊上去就能工作。这是个致命误区网络变压器背后有严格的设计规范。XP1001000-05R这类器件标准称呼是10/100BASE-T单口网络变压器内部包含了两个方向的隔离变压器和必要的共模抑制电路。变压器本体实现信号耦合和电气隔离而部分型号还会集成Bob Smith端接电阻网络的位置和走线建议。从参数角度看10BASE-T和100BASE-TX的物理信号频率特性完全不同。10BASE-T用的是曼彻斯特编码信号带宽在10MHz左右100BASE-TX用的是MLT-3编码基波频率最高到31.25MHz还要考虑扩展频谱后的能量分布。因此一个合格的网络变压器需要保证在0.1MHz到100MHz频率范围内插入损耗尽量低、回波损耗尽量小、共模抑制能力足够强。选型时的几个核心指标匝数比10/100BASE-TX的发送和接收对通常都是1:1因为PHY芯片内部已经把阻抗匹配和电平转换处理好了。隔离耐压常见有1500Vrms和2250Vrms两种工业产品至少要选1500Vrms以上有安规要求如需要过认证时直接选2250Vrms会更安全。工作温度消费级是0°C到70°C工业级是-40°C到85°C。如果你做野外设备、车载设备不要考虑消费级。封装形式有贴片式、插针式、带内部屏蔽等。XP1001000-05R作为贴片变压器体积小适合批量生产但PCB布局时要注意变压器下方不得随意走线。补充一句网络变压器内部有些会集成自耦变压器或共模电感这类器件的共模抑制比在100MHz时通常要求不低于-30dB。工程师在画图时不能只看封装和引脚数还得对照数据手册确认内部电路结构。2.2 R7KA8D2KFLCAC PHY芯片的功能与工作模式R7KA8D2KFLCAC作为PHY收发器负责将MAC送来的数据流转换成适合网线传输的物理信号。它的内部功能块可以拆成几个部分发送路径、接收路径、时钟恢复与管理、MDIO管理接口、状态寄存器组。PHY芯片和MAC之间的接口模式是首先需要确定的。我用的是RMII模式因为RMII只需要6根信号线TXD[1:0]、RXD[1:0]、TX_EN、CRS_DV加上REF_CLK相比MII接口的16根信号线大幅减少了IO占用和PCB布线压力。但代价是RMII需要50MHz的参考时钟且MAC和PHY两侧要么共用一个时钟源要么明确谁给谁提供时钟否则收发数据会不稳定。还有一个非常重要的细节PHY芯片的硬件配置引脚。PHY在上电复位时会采样一些引脚的电平状态从而决定工作模式、接口类型、自协商开关、LED配置等。R7KA8D2KFLCAC的这类strap引脚需要在原理图阶段就通过上下拉电阻固定好电平。如果在板上调试时发现PHY的行为不对首先要查这些strap引脚的上拉/下拉是否正确——这是新手最常踩的坑之一。PHY的工作模式大致有三种单10M模式、单100M模式、10/100自适应模式。自适应模式Auto-Negotiation是最常用的。PHY在上电后通过链路脉冲与对端设备协商速率和双工模式协商结果会写入状态寄存器软件可以通过MDIO读取。双工模式的选择也很关键现在的交换机基本都支持全双工而老式HUB只支持半双工。自协商能自动匹配但如果你对链路两端的设备能力很明确也可以在驱动里强制设置成100M全双工跳过协商过程缩短链路建立时间。工业现场有时会特意关闭自协商来避免协商失败和莫名其妙的链路抖动。3. 硬件电路设计与PCB布局实操3.1 原理图连接PHY、变压器、RJ45之间的电路细节原理图设计是整个项目的基础。R7KA8D2KFLCAC与XP1001000-05R之间的连接并不复杂但每一个端接元件都有讲究。从PHY发出的差分信号经过两颗串联电阻通常为50Ω左右具体以PHY数据手册为准到变压器的初级侧。变压器次级侧到RJ45连接器之间需要根据变压器型号决定是否加共模电感。很多变压器芯片内部已经集成了共模电感外部就不用再加但需要确认数据手册上的内部电路图。对于RJ45侧的Bob Smith端接这组电阻典型值为75Ω和高压电容常见2kV/1000pF左右用于提供共模噪声的泄放路径降低EMI。如果RJ45连接器自带变压器和端接网络那么外部电路会简化很多但代价是成本更高、体积更大。我这次用的是分离方案把变压器独立出来这样在布局上更灵活。接地处理上变压器初级地PHY侧和次级地RJ45侧必须分开。次级地通常叫作“ chassis ground ”或“PGND”通过一个高压电容通常是2kV/1nF到4.7nF与主板地相连形成一个高频噪声的泄放通道同时直流上是隔离的。不要直接在变压器下方把两个地平面连起来那样会破坏隔离效果。PHY芯片的电源去耦也要做足。R7KA8D2KFLCAC一般需要至少两路电源数字核心电源比如1.2V和IO电源比如3.3V取决于MII/RMII的电平标准。每路电源引脚旁边都放一个0.1µF陶瓷电容这是基础配置。更严格的布局要求是在整个PHY芯片电源域的入口位置再放一个10µF或22µF的大容量电容用于吸收瞬态电流变化。3.2 PCB布局与差分走线的关键点以太网是高速信号布局布线直接影响稳定性和EMC表现。我总结了几个必须遵守的规则变压器位置优先确定。PHY芯片到变压器之间的距离越短越好通常控制在1英寸以内。差分对走线TXP/TXN和RXP/RXN分别走一对差分线。差分对内部要保持等长、等距距离尽量靠近减少共模辐射。差分对之间要保持间距一般要求3倍线宽以上减少串扰。避免在变压器下方铺设完整的参考地平面。很多布局推荐在变压器摆放区域把内层地平面挖空目的是防止次级侧的噪声通过地平面耦合到初级侧。RJ45连接器的金属外壳接PGND并且PGND平面只在RJ45下方保留一小块不要扩展到大面积PCB区域。具体走线时我觉得最值得注意的还是差分线的阻抗控制。单端50Ω差分100Ω是比较标准的。两层板做不了精确阻抗但可以尽量参考这个线宽经验值1.6mm板厚、FR4板材、差分线宽8mil、线距8mil时差分阻抗大约在90到100Ω之间。如果是四层板或者六层板用叠构工具计算更准确。还有一个经常被忽略的坑是晶体振荡器摆放。PHY芯片通常需要一个25MHz晶振RMII模式下也可以由外部提供50MHz的REF_CLK但内部仍然常用25MHz晶振作为物理层参考。晶振要靠近PHY的XTAL引脚走线尽量短两侧包地。晶振下方不要有其他高速信号穿越否则容易引入干扰导致PHY工作异常。3.3 电源、复位与LED指示电路电源方面除了去耦电容还要注意上电时序。如果MAC和PHY用同一路电源但各自有LDO要考虑电平上电顺序是否会导致IO口倒灌电流。比较稳妥的方案是MAC和PHY的IO供电使用同一路电源通过磁珠隔离但电压相同。这样MII/RMII信号线之间就不会出现电平不一致的情况。复位电路上PHY的复位引脚通常要求低电平有效。我用的是RC延时复位同时可以通过GPIO控制。具体做法是RC电路产生的复位信号由MCU的GPIO做第二次控制这样软件可以在任何时刻强制复位PHY重新初始化。这个功能在调试时特别重要因为PHY一旦进入异常状态复位重来比断电重启方便得多。LED指示电路相对简单但要确认LED的驱动极性。有些PHY的LED引脚是内部集成了限流电阻的可以直接驱动LED有些则是开漏输出需要外部上拉电阻。这个细节要查数据手册不能想当然。我遇到过板上LED亮度不一致的情况就是没有注意各LED引脚灌电流能力不同导致的。4. 驱动初始化与网络联调过程4.1 MDIO/MDC总线的寄存器读写机制PHY芯片的各种状态都反映在寄存器里通过MDIOManagement Data Input/Output接口访问。MDC是时钟MDIO是双向数据线。每次读写操作的过程是MAC先发送32位前导码然后发送起始码、操作码、PHY地址、寄存器地址最后读写16位数据。我这次在主控上直接用GPIO模拟MDIO时序因为项目里PHY的寄存器读写频率很低不需要专门的总线外设。GPIO模拟的好处是灵活性高不受主控型号限制。一次完整的MDIO读操作时序大致如下拉高MDC产生时钟MDIO按位输出前导码通常是连续32个“1”。发送起始码“01”。发送操作码“10”表示读写是“01”。发送5位PHY地址和5位寄存器地址。发送2位转换周期读操作时在此期间MDIO要从输出模式切换为输入模式。读取16位数据高位在前。写操作类似最后直接发送16位数据。时序上需要注意MDIO数据在MDC上升沿采样输出数据在MDC下降沿后改变。用GPIO模拟时必须在翻转MDC前后保证MDIO数据的建立时间和保持时间。这个细节我调试时卡了很久一开始读取回来的寄存器数据全是对的但写进去不生效最后发现就是建立时间不够。4.2 PHY初始化流程复位、识别、协商PHY初始化看起来简单但顺序错了就会出问题。我建议按以下顺序操作通过GPIO或寄存器复位PHY。如果是寄存器软复位写寄存器0的bit15为1然后轮询等待该位自动清零。读取寄存器0和寄存器1也就是PHY标识符确认MDIO通信正常同时核对读回的值与数据手册一致。这里可以直接验证硬件焊接是否正常。根据项目需求配置基本控制寄存器是否开启自协商、强制速率和双工模式、是否允许交叉检测等。设置LED工作模式让链路状态和活动状态直接显示在板卡上方便现场排障。启动协商或直接强制模式。启动自协商后需要周期性读取状态寄存器判断协商流程是否完成。R7KA8D2KFLCAC的基本控制寄存器地址0和状态寄存器地址1遵循标准的IEEE 802.3定义。控制寄存器的bit12是自协商使能bit13是复位bit8是全双工模式bit6是速率选择0是10M1是100M。状态寄存器的bit5是自协商完成标志bit2是链路状态。需要注意链路状态寄存器是锁存的读完会自动清零下一次读取前需要重新触发这在编写状态查询逻辑时容易踩坑。RMII模式下的时钟配置也值得多说一句。如果RMII的50MHz时钟由PHY输出给MAC那么PHY的REF_CLK引脚需要选择正确的时钟源模式一般通过strap引脚配置。如果50MHz时钟来自外部或MAC那么PHY需要配置成从模式。这两种模式配置错误链路永远起不来。4.3 打通Ping从寄存器到协议栈的排障路径在驱动能正确初始化PHY并建立链路后下一步就是在主控上跑协议栈。我这边使用的是开源的lwIP协议栈和MAC驱动配合的方式是MAC驱动负责收发包lwIP负责处理IP层以上的协议。真正开始联调时我建议先把链路状态确认清楚。PHY状态寄存器显示link up只是第一步接下来可以看MAC侧的中断状态寄存器确认是否收到有效的网络事件。然后用wireshark抓包工具连接到交换机的镜像端口先看板卡是否发出ARP广播再看是否收到回应。如果PHY状态正常、MAC收发包都没问题但Ping不通问题多半出在MAC驱动与lwIP接口的数据结构上。常见原因包括DMA描述符配置有误、缓冲区地址没有对齐、接收中断没有正确清除导致丢帧。我在调试中遇到过这样一个情况Ping大包能通小包不通。查了一下午才发现是MAC接收过滤设置的帧长度阈值不对导致小于60字节的帧被当成错误包丢弃了。这个问题如果不用网络分析仪只看现象是很难定位的。所以我的建议是联调时先把测试环境固定下来用一个已知正常的交换机一台固定IP的电脑避免环境变量干扰判断。5. 常见问题与实战排查技巧5.1 以太网联调中的高频故障排查表为了让你在遇到问题时能快速定位方向我把这次项目中碰到过的高频问题整理成了表格。这里的现象和排查步骤都是实际验证过的不是从书本上抄来的。故障现象可能原因排查方法链路始终起不来link灯不亮PHY strap配置错误、变压器引脚接反、晶振不起振、MDI差分线布线异常用示波器测试晶振引脚是否有波形检查MDI差分线网络标号核对PHY strap电阻阻值能协商到100M但ping不通MAC侧RMII时钟源选择不一致、TX/RX时钟相位错误用逻辑分析仪抓RMII信号看TX_EN和TXD数据是否对齐时钟上升沿链路能up但反复跳变变压器次级地PGND设计不当、RJ45外壳接地缺失检查变压器下方地平面是否分割干净RJ45外壳是否接入PGND吞吐量很低丢包严重差分阻抗不匹配、DMA描述符环形队列设置过小用示波器观察眼图检查MAC DMA描述符数量和轮询机制只有10M能通100M不通变压器带宽不足、PHY到变压器之间串联电阻过大用网络分析仪或示波器查看100M信号质量更换变压器验证MDIO读正常写无效时序建立保持时间不够、总线被其他设备占用用逻辑分析仪对比数据手册时序参数确认PHY地址没有冲突排查链路问题有一个通用的原则从物理层往上逐层检查。先用示波器看晶振和时钟再用万用表量电源和变压器各引脚电平然后看PHY的link状态寄存器最后才是MAC驱动和协议栈。这个顺序能避免大多数低级失误引发的时间浪费。5.2 关于变压器内部接法的一个容易混淆的点部分网络变压器的次级侧中心抽头有一个引脚这个引脚要么悬空要么通过电容接地具体取决于PHY芯片的片内端接策略。有些PHY在片内已经把中心抽头接到电源或地这时变压器次级中心抽头就不要再外接其他网络否则会引入额外的直流偏置。我在设计初期也在这个地方犹豫过。查了R7KA8D2KFLCAC的数据手册后确认它的MDI引脚内部有偏置电路于是变压器中心抽头只做了交流接地处理也就是通过一个小电容接到PGND。这个处理方式在后续的EMC测试中表现也不错辐射干扰明显低于最初把中心抽头直接悬空的版本。如果你手头PHY芯片的数据手册没有明确说明中心抽头接法最简单的办法是参考这个PHY型号对应的参考设计。大多数芯片厂商的EVB原理图都能在网上找到照着抄是最稳妥的不要自己脑补电路。5.3 EMC与信号质量相关的几个经验以太网口是板卡上最容易向外辐射干扰的部位也是ESD静电放电试验最容易打坏的地方。RJ45连接器到变压器这段走线如果太长或者没有做好防护整套设备过EMC测试时会非常痛苦。我做过几个不同项目的对比总结出几条对EMC有明显改善的措施RJ45的金属外壳要直接连接到PGND而且连接阻抗越低越好。如果结构件允许可以加导电泡棉让RJ45外壳与机箱金属面板充分接触。变压器次级地和初级地之间用高压电容连接容值从100pF到4.7nF之间选择。太小了高频泄放效果差太大了隔离度下降。一般从1nF开始调试比较合理。信号线上的共模电感可以根据实际情况决定是否增加。有些变压器内置了共模电感再外置反而会增加插入损耗。差分线两边的过孔和换层要尽量减少每一个过孔都会引入阻抗不连续点。在测试时我习惯先用示波器观察PHY输出端的差分信号质量。理想情况下100BASE-TX的差分信号幅度在±1V左右过冲和振铃都不应该太大。如果波形失真很明显可以先排查串阻和变压器是否匹配。5.4 软件调试时一个容易被忽略的驱动细节PHY芯片的链路中断处理是驱动里容易出bug的地方。有些PHY的中断输出是电平触发的有些是边沿触发的。如果在初始化时没有正确配置中断触发方式嵌入式系统的中断服务程序可能会因为一次链路事件被反复触发导致系统忙死在中断里。我这次的做法是在初始化阶段先屏蔽PHY的所有中断等状态轮询机制跑稳定后再打开需要的中断源。同时在中断服务程序中读取中断状态寄存器确认事件来源后立即清除避免中断标志残留。还有一个小技巧在MAC驱动中我在接收错误中断中增加了错误计数。当错误计数连续超过阈值时自动做一次MAC软复位并重新初始化DMA描述符。这个自恢复机制在工业现场还是挺有用的能减少因为瞬时干扰造成的网络假死概率。6. 项目总结与个人体会动手做这个项目的过程中我最大的体会是以太网硬件设计的技术门槛不在原理图有多复杂而在于每个细节是否都想清楚了。PHY芯片选型、变压器匹配、差分走线、时钟配置、MDIO时序这五个环节一环扣一环任何一个位置出问题表现出来都是“网口不通”这个统一的现象但排查路径却天差地别。建议你在实际设计前先把R7KA8D2KFLCAC和XP1001000-05R的数据手册完整看一遍特别是引脚定义、strap配置、内部电路结构这几个章节。真正动焊之前在纸上把信号链路画一遍标注好每一段的电平标准、信号类型、阻抗要求。这一步花的时间会在后面的调试中十倍百倍地省回来。如果手头有现成的MCU评估板比如STM32F4系列的官方板可以参考它上面的PHY和变压器电路。不同PHY的电路细节可能不同但设计思路是共通的。把参考设计的原理图和PCB吃透再对照自己的板子做改动成功率会高很多。最后一个建议做以太网接口的PCB时第一次打样不要追求一次成功预留足够的测试点特别是MDIO、MDC、RMII的信号线、PHY的电源和复位引脚都要留出能用示波器探头直接触碰的位置。这些测试点在硬件调试阶段能帮你快速定位问题等产品成熟后再在下一个版本中去掉。
返回列表