
给嵌入式主板加以太网接口这件事说简单也简单说麻烦也麻烦。很多人习惯挑一个带网络变压器的RJ45座子焊上就能通但我最近基于R7KA8D2KFLCAC这块 MCU 给一块工业控制板补上10/100BASE-TX以太网接口时特意用了独立的XP100200S-05RSMD网络变压器而不是一体化RJ45。原因后面会细讲但这直接意味着我必须把 MAC、PHY、网络变压器、RJ45 这一整条信号链路都吃透否则遇到“Link灯亮却 ping 不通”这种典型问题很容易被各种软硬件环节绕晕。这篇文章就是想把这套方案的选型逻辑、原理图接线、PCB布局、固件初始化和调试过程尽量完整地整理出来。方案核心两颗器件一颗是负责协议处理的内置以太网 MAC 的 MCU一颗是负责信号隔离和共模抑制的网络变压器中间还需要一颗 PHY 芯片把 MAC 的数字信号转成双绞线上的模拟差分信号。如果你手上也是一颗内置 MAC 的 MCU想外接 PHY 和网络变压器做联网功能这篇文章的接法和排查思路可以直接套。1. 先搞清这颗磁性变压器在以太网链路里的位置1.1 嵌入式10/100BASE-TX网络的完整组成很多人画以太网原理图只画到“MCU 拉信号 - RJ45”并指望这样能通。在实验室里短网线、近距离、无干扰的情况下某些集成 PHY 的 MCU 确实可能“别别扭扭”地跑起来但作为正式产品设计还是不要冒险。10/100BASE-TX 的完整链路至少分四段MACR7KA8D2KFLCAC 内置负责组帧、地址过滤、DMA 收发和状态统计PHY外部芯片负责自动协商、MLT-3 编解码、时钟恢复以及和双绞线之间的模拟收发磁性变压器也就是 XP100200S-05R 这类网络变压器负责隔离、共模抑制、阻抗匹配连接器与线缆RJ45 和双绞线。这里有个很重要的点必须说清楚标题虽然只写了 MCU 加磁性变压器但实际硬件链路里一定还夹着一颗 PHY。MAC 输出的 RMII/MII 数字信号不是直接能上双绞线的PHY 才负责把数字码流变成适合线缆传输的差分模拟信号。反过来PHY 的模拟前端也不能直接面对外部网线因为设备之间会有地电位差、线缆上会感生共模噪声甚至可能有雷击浪涌这些都要靠磁性变压器挡住。为什么不干脆用带变压器的 RJ45 座子一体化的好处是省事像 HR911105A 这种连接器焊上就能用。但在量产和 EMC 可靠性要求高的场景我更愿意选独立磁性模块理由很实际布局灵活变压器可以紧挨着 PHY 摆次级出来就是 RJ45传输线路径很短控制阻抗容易可替换性磁性模块型号多同封装不同品牌的 pin to pin 替换容易采购风险低屏蔽地好处理RJ45 金属壳接机壳地变压器次级中心抽头接终端网络独立器件能让两类“地”在 PCB 上清晰分开。当然独立方案的外围电路要自己画中心抽头怎么接也有讲究。后面几章会逐个拆开讲。1.2 IEEE 802.3u 快速以太网的信号特点10/100BASE-TX 快速以太网基于 IEEE 802.3u使用两对双绞线一对发送、一对接收速率 100Mbps。信号不是单端对地电压而是差分的发送幅度一般峰峰到 2V 左右线对特征阻抗 100Ω。100m 的双绞线本身有衰减还会有外部电磁干扰所以这套链路的所有设计本质上都是围绕“保证差分信号在 100Ω 平衡线对上安全、稳定、不干扰别人也不被别人干扰地传输”。2. XP100200S-05R 到底做了什么磁性模块的工作原理解剖2.1 100BASE-TX 差分信号与变压器耦合原理看磁性变压器原理之前先弄清楚“差分”这件事。在 TX 对线上PHY 在两根线上同时输出极性相反的信号一头拉高、一头拉低这样两根线之间的电压就是单根线对地电压的两倍。接收端检测的是两根线的差值而不是某一根线对地的电压因此外界在两根线上感应的相同方向共模噪声理论上会被差分接收“抵消”。变压器在交流信号面前是通路在直流信号面前是断路。PHY 的模拟输出经过变压器初级磁芯将交流能量耦合到次级再送进 RJ45 引脚直流分量被挡住PHY 侧的地和远端设备的地之间就隔开了。这就是“隔离”的本质。两个设备如果地电位差几十伏没有变压器隔离环流可能直接灌坏 PHY有了变压器直流环路被切断问题一次性解决。2.2 共模抑制、隔离耐压与阻抗匹配XP100200S-05R 这类网络变压器内部通常不是一个裸变压器而是“脉冲变压器 共模扼流圈”的组合封装。共模扼流圈对差模信号呈低阻抗正常信号能过对共模信号呈高阻抗户外网线感应的电磁干扰被挡在外面这比只靠接收端差分“硬扛”要可靠得多。阻抗匹配也是磁性变压器的重要任务。PHY 芯片的模拟接口、网络变压器、双绞线三者的阻抗如果明显偏离 100Ω信号反射就会增加眼图质量下降。磁性模块本身的绕组设计和引脚排列都是奔着 100Ω 平衡系统去的所以“PHY 差分对 - 变压器 - RJ45”这一段走线也必须维护 100Ω 差分阻抗不能在这里把匹配破坏掉。2.3 选这些“05R”模块时重点看哪些参数拿到 XP100200S-05R 的数据手册我首先看四个东西匝数比10/100BASE-TX 常见的是 1CT:1CT也有按 PHY 增益要求对应的特殊比值必须和 PHY 参考设计核对插入损耗和回波损耗体现信号穿透变压器的效率和阻抗匹配质量共模抑制比越高抗共模能力越强隔离耐压常见 1500Vrms更严格场合要求更高。选型建议不要只看型号相似就直接用。同一个品牌下不同后缀的绕组比和中心抽头引出脚位可能有差异。拿到样品先用万用表蜂鸣档测一遍绕组导通再用 LCR 表粗测电感量至少确认初级、次级没有接反。这里多说一句判断变压器同名端可以用“直流脉冲法”在初级一端瞬间接 3V 电池次级接示波器看次级感应脉冲极性如果两次测试初级的同名端都接电池正极次级示波器探头的同名端接法也要保持一致。这个步骤在打样阶段做一次能省后面不少排查时间。3. 把 R7KA8D2KFLCAC 的 MAC 接到外部 PHY整体硬件设计3.1 MCU 侧能提供哪些接口R7KA8D2KFLCAC 属于 RA8D2 系列基于 ARM Cortex-M85 内核内部集成了完整的以太网 MAC 控制器并且把 MII 和 RMII 两组数据接口都引出来了。MII 接口需要 16 根信号线数据宽度 8 位时钟 25MHzRMII 接口把数据线压到 2 位时钟升到 50MHz信号线总数在 9 根左右。对 10/100BASE-TX 来说RMII 更划算能省下宝贵的 MCU 引脚给其他外设。所以我在这块板上用的是 RMII 模式。RMII 的信号组大致包括TXD0/TXD1、RXD0/RXD1、TX_EN、CRS_DV、MDC、MDIO、REF_CLK。其中 REF_CLK 是 RMII 的核心必须是一个精确的 50MHz 参考时钟MAC 和 PHY 都靠它来同步收发MDC/MDIO 是管理和配置 PHY 寄存器的慢速串行接口速率一般在 2.5MHz 以下对 PCB 走线要求不高。3.2 PHY 芯片选型与关键连接PHY 我选了 LAN8720A它支持 RMII、单 3.3V 供电、内部集成 1.2V LDO外围非常简洁市场上用得也多参考资料好找。如果选 KSZ8081 也可以只是中心抽头偏置和 PHY 内部终端电阻的连接方式略有不同原理图不能直接照搬。这里强调一句PHY 选型定下来之后磁性变压器的中心抽头接法要以该 PHY 的参考设计为准不能“用同一张图走天下”。MCU 与 PHY 的 RMII 连接关系整理成表格如下信号MCU 侧PHY 侧说明复位GPIOnRST控制 PHY 复位时序RMII 参考时钟50MHz REF_CLKXTAL1/REF_CLKRMII 总线基准发送数据RMII_TXD0/TXD1TXD0/TXD12 位并行发送使能RMII_TX_ENTX_EN高有效接收数据RMII_RXD0/RXD1RXD0/RXD12 位并行载波/数据有效RMII_CRS_DVCRS_DV指示接收状态管理接口MDC/MDIOMDC/MDIO读写 PHY 寄存器3.3 时钟、电源与复位时序设计RMII 时钟有多种接法。第一种是 50MHz 有源晶振直接接到 PHY 的时钟输入同时由 PHY 输出同频 REF_CLK 给 MCU第二种是 MCU 内部产生 50MHz 时钟输出给 PHY第三种是 MCU 和 PHY 各吃一个外部 50MHz 晶振。我习惯用第一种因为它让两端时钟相位关系更可控也避免了 MCU 时钟树配置出错导致 PHY 没有参考时基。PHY 复位时序值得一提。很多“起不来”的问题不是电路画错而是上电后立刻访问 PHY 寄存器此时 PHY 还没稳定。稳妥的做法是MCU 上电后把 nRST 拉低至少 10ms再释放释放后再等几十毫秒才开始通过 MDIO 读 PHY ID。nRST 上最好加上拉电阻并并联一个小电容做滤波防止上电瞬间的复位毛刺。4. 原理图级接线从 PHY 引脚到 RJ45 的连接映射4.1 差分信号线的引脚映射10/100BASE-TX 的 RJ45 引脚分配是固定的1、2 是发送差分对3、6 是接收差分对。PHY 侧也有对应的 TX/TX- 和 RX/RX- 四根线。XP100200S-05R 内部通常有两组独立的变压器通道一组串在 TX 通路一组串在 RX 通路。接法逻辑如下变压器一侧PHY 引脚变压器另一侧RJ45 引脚第一组初级PHY_TX第一组次级1第一组初级PHY_TX-第一组次级2第二组初级PHY_RX第二组次级3第二组初级PHY_RX-第二组次级6这里特别提醒具体的器件封装引脚编号每家磁性模块厂商都不一样。有的把初级中心抽头放在 1 脚有的放在 8 脚次级同名端位置也不同。原理图里不能想当然必须打开 XP100200S-05R 数据手册里“Schematic”那一页对着引脚序号逐个连。另外“正向”很重要如果相位接反差分会变成“差减”信号等于被抵消Link 灯大概率不亮。4.2 中心抽头为什么是重点新手在磁性变压器上翻车十有八九是中心抽头接错。变压器初级和次级都有中心抽头它不是一个“没用的中间点”。初级中心抽头通常给 PHY 的模拟前端提供直流偏置回路次级中心抽头则配合终端电阻网络给共模电流提供泄放路径同时决定线缆侧共模电压电平。不同 PHY 的偏置差异是真实存在的。比如某些 PHY 要求 TX 中心抽头接 3.3VRX 中心抽头接地另一些 PHY 则把 RX 中心抽头通过阻容网络接到某个偏置电压。LAN8720A 和 KSZ8081 的典型参考设计就不同。所以原理图阶段的关键动作是打开 PHY 数据手册的典型应用电路看它的 TXCT 和 RCT 分别接去哪里再对应到 XP100200S-05R 数据手册的引脚图。初级中心抽头随便悬空或接错轻则信号幅度异常重则 PHY 内部偏置被破坏Link 灯亮不了。次级中心抽头的经典接法是通过一颗电阻常见 50Ω 或 75Ω接到机壳地同时并在 RC 到信号地之间具体阻值要看 PHY 参考设计和磁性元件手册的推荐值。这里要注意不是所有方案都需要在次级中心抽头到机壳地之间放电容有些 PHY 的参考设计是直接串电容后接隔离地照抄最容易出事。4.3 ESD 与 EMC 防护电路RJ45 面对的是外部网线静电放电、浪涌、线缆感应过压都是常态。建议在 RJ45 的 1/2/3/6 四根线上各加一颗低结电容 TVS 管结电容最好控制在几 pF 以内否则会拖累信号边沿。TVS 要放在变压器次级、靠近 RJ45 的位置泄放路径越短越好。RJ45 的金属屏蔽壳一般接机壳地。机壳地和主板信号地之间可以用一颗 1MΩ 电阻并联 1000pF/2kV 电容来桥接。电阻负责阻隔直流地环路电容负责给高频噪声提供低阻抗回路。这样处理之后雷击浪涌的大部分能量会通过 RJ45 外壳路径泄放而不是蹿进 PHY 和磁性变压器。5. PCB 布局与布线影响稳定性的细节5.1 元件顺序决定成败布局顺序可以总结成一条线MCU - PHY - 串联电阻/终端网络 - XP100200S-05R - RJ45。PHY 要尽量靠近 MCU 的 RMII 引脚把 50MHz 时钟和数据线走短XP100200S-05R 则尽量紧靠 RJ45次级走线控制在 5 到 8mm 以内。有的板子为了结构把变压器和 RJ45 拉得很远次级差分线走了两三厘米共模回路面积变大EMC 测试时很难解释。磁性元件下方不要铺大片的信号地铜更不要让其他高速走线从下面穿过。很多设计指导会建议“变压器下方净空”原因是这个区域是初级侧和次级侧的交界信号回流路径容易在这里打架。操作上可以把变压器下方的铜皮划成隔离地并让它和次级侧的地保持同一电位而不是混入主板的地平面。5.2 差分对布线等长、阻抗和参考平面100BASE-TX 的差分阻抗目标值是 100Ω。四层板上典型的差分线宽/线距取决于叠层。以常见叠层为例表层铜厚 1oz参考平面距离约 8mil 时微带走线线宽约 6mil、线距约 5mil再结合厂家的阻抗计算工具去微调。如果板厂能提供阻抗测试条建议在板边加一组 100Ω 差分阻抗测试条方便出厂前确认。差分对布线时以下几点要当成纪律来执行一对线尽量在同一层走完不要换层。必须换层时在换层过孔旁边放一对回流地孔TX 与 RX 两组差分对之间拉开距离至少 3 倍线宽以上避免相互串扰对内做到等长长度差控制在 5~10mil 以内而且不等长的纠正不能靠突然改变线距来完成不要走 90° 直角用圆弧或 45° 折线差分对周围不要并行长距离的时钟线、复位线或电源开关节点。5.3 隔离地与机壳地怎么切很多“能用但时不时掉包”的板子问题不出在信号走线而出在地的处理。稳妥做法是在 PCB 上划出一块独立的“隔离地”区域把 XP100200S-05R 的次级侧、共模终端、TVS、RJ45 金属外壳都放在这个区域里。隔离地和主板信号地之间用一颗 1MΩ 电阻并联 1000pF 电容单点连接。这样既切断了直流地环路又能让高频噪声通过电容低阻抗泄放。在打样时最容易犯的错是隔离地和信号地被在线路板上用零欧电阻连成完整地平面。这样看似“地更稳了”实际上把变压器初级的噪声也带进了线缆侧共模抑制前功尽弃。我倾向于把这层“隔离”看得比“连通”更重要非要连通时也要经过明确设计的那一个桥接点而不是满板都是孔。6. 固件驱动借助 FSP 与 lwIP 把网口点亮6.1 外设初始化要有顺序我用 RA8D2 系列开发时习惯基于 FSP 配置工具先生成以太网外设驱动再集成 lwIP 协议栈。无论有没有工具初始化顺序都不能乱。一轮完整初始化大致是这样使能 MAC/RMII 外设时钟确认时钟稳定把 RMII 相关引脚复用为以太网功能包括 MDC/MDIO配置 MAC 地址注意寄存器里字节顺序通过 GPIO 拉低 PHY 的 nRST保持 10ms 以上再释放等待几十毫秒通过 MDC/MDIO 读取 PHY ID确认通信正常写 PHY 控制寄存器开启自动协商等链接状态变为 up初始化 DMA 描述符把收发缓冲区按对齐要求配置好启动 MAC 接收挂中断开始向协议栈递交数据。如果 FSP 自动生成了一部分仍然要检查 PHY 地址是否和硬件一致。LAN8720A 默认地址通常是 0但 ETHAD 引脚上下拉不同会改变地址。MDIO 读回来全是 0xFF 或 0x00十有八九是地址不对而不是总线坏了。6.2 lwIP 协议栈移植最容易忽略的细节lwIP 不是一个“加上就能用”的黑盒。底层接口里最关键的两个函数是 netif 的 linkoutput 和接收回调。协议栈要把数据发出去会调用底层发送函数底层必须把 pbuf 链拆开、整理进 DMA 描述符指定的缓冲区接收中断到来时底层要把收好的 pbuf 递交给 netif-input由协议栈继续处理。几个实际经验供参考收发描述符数量不要省。TX 和 RX 各 16 个算起步如果缓冲偏少多连接情况下会出现莫名其妙的丢包注意内存对齐。DMA 描述符和缓冲区如果不对齐部分 MCU 会直接卡死在 DMA 传输上PHY 状态变化要注册回调。链路没 up 时DHCP 发再多次也是白等应该等 link up 后再启动 DHCP调试初期先用静态 IP排除 DHCP 服务器的干扰因素等 ping 通后再切换到 DHCP 测试。6.3 最小验证Ping、DHCP 与带宽测试板卡上电后先看 PHY 的 Link/ACT 灯是否常亮。灯亮说明物理层通了再进入软件验证。最简单的一步是用 PC 和板卡直连配置同网段静态 IP互 ping 大包。小包 100 次通过不代表稳定我习惯直接 ping 1472 字节的大包再测 500 次观察有没有丢包和延迟抖动的尖峰。通了之后再接交换机测试 DHCP 获取地址。如果 DHCP 拿到地址很快说明 ARP、UDP 和链路层都已经正常。吞吐量可以用 iPerf 3 测也可以直接在板子上开一个 HTTP 文件下载任务看速度。如果在高吞吐时出现丢包问题多半回到第 5 章的布线和地处理而不是协议栈配错。7. 调试实录常见故障与排查路径7.1 “Link灯不亮”的定向排查Link 灯不亮说明 PHY 根本没有和对端协商成功。先别急着怀疑变压器按顺序查PHY 供电3.3V 是否稳定纹波是不是太大复位时序示波器观察 nRST 上升沿确认不是上电瞬间一直被拉低RMII 时钟REF_CLK 有没有真实的 50MHz相位是否稳定PHY 寄存器用 MDIO 读 PHY ID确认管理接口通自动协商寄存器读 PHY 控制寄存器看看 AN 是否使能对端是否支持 100BASE-TX换线缆、换对端设备排除网线和交换机端口问题。如果灯亮但协商速度只有 10M检查 PHY 模式配置是不是被复位电阻或配置引脚强行拉到了 10M 模式。这类引脚在原理图阶段容易忽略。7.2 “Link灯亮但 ping 不通”的定向排查物理层 up 了不代表 MAC 侧和协议栈已经准备好。遇到过几个高频原因MAC 地址没有正确写入或者过滤功能把收到的帧全丢了RMII 总线时序不对CRS_DV 采样相位有问题lwIP 底层接收中断处理后没有向上递交软件层“看起来通了实际收不到包”。排查链路时建议先在板子上做自回环测试验证 MCU-PHY 的发送路径和接收路径。然后把板卡和 PC 直连PC 上开 Wireshark。如果板卡启动了应该能看到 ARP 请求。有 ARP 请求而 PC 不应答多半是 IP 网段不一致或 PC 防火墙拦截如果 PC 端完全看不到任何帧问题就在硬件链路或 MAC 配置上切回示波器看 RMII 的 RXD0/RXD1 和 CRS_DV 是否有活动。7.3 掉包、CRC 错帧与长线稳定性能 ping 通却在大流量下掉包这通常不是协议栈问题而是信号完整性问题。用示波器观察 RX 差分对的眼图如果眼图很乱、过冲大、眼口闭合明显基本可以锁定到差分阻抗不匹配、中心抽头终端网络不对或隔离地处理不当。有一个容易被忽视的坑次级中心抽头到机壳地的电阻值选错。比如参考设计推荐 50Ω实际焊了 68Ω共模噪声泄放效果变差短网线看不出问题长网线或者现场有变频器干扰时CRC 错包率立刻飙升。还有一个常见问题是变压器下方被其他信号线穿过隔离地完整性被破坏。这两类问题很难用原理图评审发现必须靠 PCB 审查加实际现场测试。长期稳定性验证也非常重要。网络功能初步跑通后建议让板卡连续跑 24 小时 UDP 大流量统计收包总数和 CRC 错误数再用一个能产生电源噪声的负载或者条件允许的话用静电枪打一下网口外壳。磁性元件和地分割设计是否达标最终是在“长时间 干扰”环境里见分晓的。把这些验证记录写进硬件评审报告比事后反复改版高效得多。最后再分享一个我自己的实操习惯第一次打样时不要急着把 PHY 磁性变压器 RJ45 直接堆在正式主板上可以把这半边电路先做成一块 10cm 见方的小模块通过排针引出 RMII 信号。这样既能在不同 MCU 板之间复用同一套 PHY 方案也能在调试时快速区分到底是 MAC 侧配置问题还是 PHY/磁性/RJ45 这半边电路的问题。等小模块验透了再移植回正式板卡的位置整体节奏会稳很多。