这几年2.5G网卡是真的火。运营商宽带提速、NAS玩家多盘位同步、旧电脑当软路由跑满千兆上限,这些场景一股脑涌上来之后,大家发现一件尴尬的事:千兆网卡的实测上限大概就110MB/s左右,而真万兆网卡加交换机一整套下来价格直接起飞,功耗和发热也不是普通家用机箱扛得住的。2.5G正好卡在中间,它不挑线材,普通质量过关的超五类网线就能稳定跑,速率是千兆的2.5倍,对绝大多数家用和中小工作室场景来说,性价比和易用性都是最平衡的选择。
我要拆解的这个项目,是立创开源硬件平台上基于Intel I226芯片设计的一张半高PCIe 2.5G网卡。它不是一张简简单单的原理图,而是完整开放的资料包:原理图、PCB工程文件、BOM表、甚至作者踩坑后补充的说明文档都在。我会从选型逻辑、PCIe链路设计、以太网口电路、PCB布局、驱动适配和故障排查这几个维度,把它从头到尾掰开揉碎讲清楚。
这篇文章适合谁看?如果你想自己动手画一张网卡来系统学习高速信号布线,或者已经在用I225/I226这类Intel网卡、想弄清楚它为什么偶尔掉线、为什么在Linux下比某些螃蟹卡稳定,又或者单纯想了解PCIe网卡是怎么从插槽取电、怎么和主板完成链路训练的,那这篇内容都能给你一些实战层面的参考。
1. 项目整体设计与选型思路
1.1 为什么还要自己画一张2.5G网卡
先说动机。市面上2.5G网卡从几十块的USB网卡到一百多块的PCIe卡多的是,自己画一张看起来像是脱裤子放屁。但我真把整块板子做下来之后发现,价值根本不在那张卡本身,而在于你被迫把一个PCIe设备的完整生命周期走了一遍。
PCIe x1链路怎么建链、LTSSM状态机在Detect和Polling阶段到底在做什么、AC耦合电容放哪、参考时钟怎么走、插槽供电和待机供电怎么区分、EEPROM怎么烧录,这些概念单独看书都非常抽象,你真做一块板子,全部落地到你自己的鼠标和烙铁下面。另外,立创开源平台这类项目的典型价值还在于迭代:拿到工程文件之后,改板型、换RJ45形态、加指示灯、或者干脆把I226换成同封装的I225-LM做对比实验,这些都是买成品卡完全没有的操作空间。
还有一个很实际的原因:很多旧机箱是半高设计,市面上半高PCIe 2.5G网卡的选项本来就少,而且成品卡大多不给完整的硬件设计资料。在开源工程基础上改一版适配自己机箱的挡板,再顺手解决掉商用卡常见的散热缩水问题,对喜欢折腾硬件的工程师来说属于刚需。
1.2 为什么选Intel I226而不是RTL8125BG
这个选型是整个项目的灵魂,我展开说。
市面上2.5G以太网控制器主流的就两家:Intel的I225/I226系列和瑞昱的RTL8125系列。价格上螃蟹卡明显便宜,芯片采购渠道也松,很多廉价2.5G网卡用的就是RTL8125BG。但Intel这边有两个别人很难替代的优势:驱动成熟度和满载稳定性。
Linux内核从5.x开始就有官方维护的igc驱动直接支持I225/I226,插上即用。Intel网卡在CPU占用率、中断处理、多队列支持这些指标上历来比瑞昱做得扎实。对NAS、PVE、软路由这种长时间满载跑的场景来说,优先级最高的不是便宜,而是链路稳。I226相比I225还修掉了一批硬件层面的errata——I225早期版本有个非常出名的毛病:高负载或者高温下链路会随机断开,必须重新插拔甚至重启才能恢复,这个问题在I226-V上做了硬件修正。这一点对“装在闷罐小机箱里跑几天不掉线”这种使用诉求非常关键。
当然,选Intel是有代价的。I226芯片价格高、货源比瑞昱紧张,BOM成本算下来一张卡比螃蟹方案贵30到50块很正常。另外Intel对板载EEPROM的要求更严格,出厂必须烧录正确的内容,包括MAC地址、板卡ID、电源配置这些,否则驱动会报错甚至拒绝加载。这个坑我会在后面的固件章节专门讲。
1.3 半高卡形态带来的硬约束
半高是很多新手拿到项目后容易忽略的点。普通全高挡板高度大约120mm,半高挡板只有79.2mm左右,是为1U工控机、迷你NAS机箱这些矮机身准备的。改成半高卡,意味着PCB上所有元器件的高度和布局密度都必须重新掂量。
约束来自两个地方。第一是挡板附近的连接器高度。RJ45如果选带变压器的一体式金属座,高度往往超过14mm,半高机箱根本盖不上盖板。所以这个项目大概率采用分离方案:RJ45纯插座加一个独立网络变压器,或者选特意做矮的一体式座子。第二是PCB面积压缩之后,电源、晶振、EEPROM、指示灯这些器件的摆放顺序会直接影响高速走线,PCIe差分对和以太网差分对的优先级必须排在最前面,其他所有元件都得给它们让路。
还有一个容易被低估的是散热。I226虽然整体功耗不高,满载时芯片表面温度也能到五六十度以上,小机箱里空气流通差,不加散热片的话长期跑容易触发PHY内部温度保护。半高卡能装散热片的空间有限,所以设计上通常会让发热源避开挡板和塑料件,同时把底部散热焊盘用密集过孔阵列连到PCB内层铜皮,靠整板铜皮帮忙导热。
2. 核心芯片与PCIe接口设计要点
2.1 I226芯片的关键参数与引脚分工
I226-V是一颗把MAC和PHY集成在一起的以太网控制器,外部配网络变压器和RJ45就能出网口。所谓集成PHY,意味着芯片内部已经把2.5G BASE-T的模拟收发、编解码这些脏活累活全干完了,硬件工程师不需要像传统的MAC加独立PHY方案那样,再去设计RGMII/MII总线和PHY侧一大堆偏置、滤波电路。这对新手非常友好,画板的难度一下子降了一截。
芯片供电分几路:一路低压核心供电(1V左右,具体以datasheet为准)、一路1.8V I/O、一路3.3V PHY模拟供电,另外PCIe SerDes部分对电源纹波也比较敏感。设计时一般直接从PCIe插槽的3.3V取电,核心低压那路用一颗小DC-DC降压出来,1.8V和3.3V则用LDO线性稳压器兜底。这里要提醒一句:I226对电源纹波有明确要求,如果核心供电在PCIe链路高速翻转时纹波偏大,轻则链路自动降速,重则直接训练失败认不到卡。
时钟方面,I226外部需要一颗25MHz晶体或者时钟源,作为以太网收发和内部逻辑的时基。晶体摆放位置要靠近芯片时钟引脚,走线短且周围不要有开关电源的走线穿过,否则时钟抖动人一多,紧接着倒霉的就是信号质量。
2.2 PCIe x1链路:从插槽到芯片的信号完整性
PCIe链路表面上看就是一对一对的差分线,但每一对线背后都有一套协议状态机在驱动。卡插进主板,经过PCIe枚举,系统才能给设备分配总线号、设备号、功能号和资源。而链路本身要先通过LTSSM状态机,从Detect阶段检测到对端设备,进入Polling阶段互换训练序列,再进入Configuration阶段协商链路宽度和速率,最后才能稳稳落到L0状态跑数据。
整个协商过程对硬件来说,核心就两件事:信号质量和参考时钟。信号质量上,PCIe x1的TX和RX差分对必须做100欧姆差分阻抗控制,线宽线距由PCB叠层的介质厚度和铜厚决定,走线尽量短,少打过孔,少换层。TX端还要串AC耦合电容,通常用0.1uF的0402或0603,放在靠近连接器一侧,用于隔离收发双方的直流电平。
参考时钟同样关键。PCIe插槽会提供100MHz的REFCLK差分信号,芯片通过它做链路训练的数据参考。REFCLK要走差分线并做阻抗匹配,而且要和TX/RX差分线一起做等长控制。我在开源项目的评论区见过不止一次“开机有时认不到卡,重启又好了”的求助,最后查下来基本都是REFCLK或者TX走线太长、等长没做好,导致链路训练在Configuration阶段超时。
2.3 为什么PCIe网卡还需要单独供电,这句话错在哪
“PCIe网卡为什么要单独供电”这个问题在搜索热词里出现频率不低,说明很多人装机时候被带偏过。事实上PCIe插槽本身是供电的,标准定义了12V和3.3V两路主供电,外加一路3.3V Aux待机辅助电源。插槽供电能力有上限,标准对3.3V总电流大约3A量级,12V大概5.5A量级,具体看主板设计。
一张2.5G网卡满打满算功耗也就两三瓦,插槽供电绰绰有余,完全不需要外接供电。所谓“网卡也要供电”的错觉,多半来自两类东西:一是多年以前的老式PCIe显卡和阵列卡动辄几十上百瓦才需要外接6pin或者8pin,二是某些USB网卡通过PCIe挡板走线借用外部供电,看起来像“网卡吃电”。
这张I226卡真正要留神的是待机供电。要做Wake-on-LAN(网络唤醒),就必须保证3.3V Aux这一路在系统关机后依然有电,所以原理图上Aux域的设计要单独画出来,不能被主3.3V简单并联了事,否则关机后网卡没电,唤醒功能自然就是摆设。
3. 以太网接口电路与变压器选型
3.1 从芯片到RJ45:网络变压器到底在干什么
I226的PHY引脚出来的是高速差分信号,但绝不能直接拉到RJ45上,中间必须经过网络变压器。这个不起眼的黑色小方块承担了三重任务:隔离、阻抗变换和共模噪声抑制。隔离是安规层面的事,室外线缆可能引入的电位差、雷击感应、静电浪涌,全靠变压器在电气上把外部和芯片隔开。阻抗变换是为了匹配100欧姆的双绞线特性阻抗。共模抑制则保证差模信号不受地电位差干扰。
变压器选型有两条路:分立变压器加独立RJ45座,或者带变压器的一体式RJ45座。一体式座子省事、体积小,但带屏蔽金属壳的高度普遍在20mm以上,半高卡经常放不下。分立方案的好处是变压器高度低,可以紧贴RJ45摆放,信号路径更可控,所以这张半高卡大概率选的是分离方案。
变压器规格要按2.5G BASE-T的要求选,频率响应范围要覆盖到125MHz的编码带宽。有人图便宜拿千兆时代的老货硬顶,短距离测试好像也能通,但信号上升沿变慢、眼图余量不足,一旦线缆长度上去或者干扰变大,马上就是高延迟和丢包。
3.2 网口信号布线:Bob Smith端接和屏蔽壳处理
网口这一侧的细节,说实话比PCIe还多。PHY差分对到变压器之间,靠近PHY的位置要按datasheet给出的参考电路加终端匹配电阻和偏置网络,这些阻值不要凭感觉改。变压器中心抽头的处理尤其关键:中线抽头要通过一个0.1uF电容接到地,有些设计还会接Bob Smith匹配网络,也就是一组RC到地,用来给线缆上的共模噪声提供低阻抗泄放路径。这个网络省掉以后,共模干扰会一路灌到变压器次级,表现出来就是射频干扰测试不过、特定环境下网口高速率跑不起来。
RJ45座子这边也有讲究。如果用的是带屏蔽金属壳的RJ45,屏蔽壳不能直接拿铜皮大面积接地,那样会把板卡地变成天线。规范做法是通过一个高压电容(常见2kV、1000pF到4700pF,具体按产品规格书)并联一个兆欧级电阻接到数字地,形成所谓的chassis ground处理,给ESD和浪涌一个泄放路径,同时避免形成地环路。
在开源项目评论区里,见过太多“照着工程打的板,插网线偶尔掉线”的案例,最后查下来几乎都是RJ45屏蔽壳直接接地或者干脆悬空,共模电流在整个板子上乱窜,把PHY信号彻底搞脏了。
3.3 静电防护与浪涌设计
网线是暴露在外的,人摸机箱、雷雨天气、网线过长引起的感应电都是真实威胁。规范做法是在RJ45内侧、也就是变压器靠座子的这一侧,并联TVS阵列。选TVS不能只看“是TVS就行”,三个参数必须盯住:钳位电压、结电容、浪涌能力。
钳位电压要足够低,能在静电打进来的一瞬间把能量泄放掉,但又不能低于正常信号幅度,否则会把正常信号也削掉。结电容是关键中的关键,2.5G信号带宽高,结电容一大直接成为信号通道上的低通滤波器,轻则余量下降重则协商不到2.5G。所以这颗TVS阵列一般选结电容几皮法以内的型号,封装上通常是一颗多引脚的SOT-23或者DFN阵列。如果后面想替代BOM里的型号,别只看封装一样就换,一定先对一下钳位电压和结电容。
4. PCB Layout实战要点
4.1 叠层、阻抗与板材选择
画这种高速网卡,最容易犯的错是把全部精力放到原理图,觉得封装对、连线对就万事大吉,结果打样回来不工作,问题基本全出在Layout上。
先定叠层。这个项目用不到多高端的板材,普通FR-4、1.6mm厚度、四层板就完全够用。四层板的分工很明确:顶层走高速信号和关键器件,底层走慢速信号和电源铺铜,中间两层分别做完整地平面和电源平面。为什么必须要完整地平面?因为PCIe和2.5G以太网都是差分信号,差分电流的回流路径依赖参考平面。有人贪便宜做双层板,除非走线极短并且是教科书式直线,否则阻抗根本控不住,链路训练直接失败。
阻抗控制的计算,老实说手算不如靠工具。立创EDA自带阻抗计算功能,也可以用SI9000这类工具,把线宽、线距、介质厚度、铜厚填进去,算出100欧姆差分阻抗需要的具体尺寸。常见四层1.6mm板子,顶层到参考层介质很薄,差分线一般线宽0.15mm、线距0.15mm上下数量级,具体一定按你自己的叠层实测来定,不同板厂压合参数有差异,一个稳妥做法是打样时直接让板厂出阻抗测试条。
4.2 差分对布线:等长、间距、换层的铁律
差分对的老生常谈,但真画起来很容易破功。无论是PCIe的TX/RX还是以太网PHY到变压器的差分对,都要遵守三条铁律:对内等长、对外保持间距、少换层。
对内等长,是为了保证两根线上携带的正负信号到达接收端时相位差最小。一般控制在一两毫米以内问题不大,实操时可以在拐弯处做蛇形补偿,但蛇形不要密密麻麻堆一片,否则会引入额外的差模串扰。对外间距,指的是差分对与其他信号线之间要保持足够的距离,至少3到5倍线宽,尤其是要避开时钟信号和DC-DC开关节点附近的走线。
换层是最大的坑。不到万不得已不要换层,因为换层意味着过孔,过孔会造成阻抗突变,还会破坏参考平面的连续性。如果一定要换层,过孔旁边必须加接地过孔,给回流电流提供完整的参考路径。我在复盘同类开源项目的过程中见过一个典型失败案例:作者为了两个网络变压器对称美观,把PCIe TX从顶层打过孔换到内层,换层附近没有地过孔,结果链路训练断断续续,最后把走线拉直、减少换层次数才救回来。
4.3 电源布局与去耦电容
电源布局的核心思想一句话:开关节点短、环路小、去耦电容贴着电源引脚放。
I226的datasheet通常会给一个推荐的电源拓扑和器件摆放示意图,强烈建议照着摆。降压DC-DC的电感靠近输出端,输出电容尽量靠近芯片电源脚;LDO输入输出各放一到几个陶瓷电容。去耦电容不是多多益善,而是要有针对性地放在电流突变点附近,I226的核心电压、PHY模拟电压这些位置,用0402或者0603的小电容多放几颗,实际效果远好于在远处放一颗大电容。
底部散热焊盘的处理同样关键。I226底部有裸露散热焊盘,正常回流焊时应该通过密集的过孔阵列连接到板内铜皮和地平面,把热量导到整块PCB上。如果过孔太少或者焊盘虚焊,热量散不出去,长期高负载下芯片结温升高,链路稳定性就会出问题,这正好呼应了I225时代“热了就断链”那个经典段子。
5. 固件、驱动与系统适配
5.1 EEPROM与MAC地址烧录
整板焊接完成之后,上机之前有个步骤一定不能跳:给EEPROM烧录配置。I226的板载非易失存储器里存了MAC地址、板卡ID、电源管理配置、LED行为配置等信息。如果板上没有EEPROM或者内容为空,Linux下igc驱动加载时会出现类似NVM缺失的报错,网卡设备压根不会出现在系统里,这是一道硬门槛。
这个项目用的EEPROM一般是一颗通过SMBus或者I2C接口连接的小容量存储器,几Kbit就够用了。烧录工具有两条路:一是用编程器配合Intel官方工具离线烧录,二是在Linux下用Intel的eeupdate这类工具在线烧。开源工程里一般会附上配置模板和烧录脚本,照着改MAC地址就行。前几位是厂商OUI,后几位自己编,但注意不要和局域网内其他设备冲突,不然ARP表会抽风。
关于MAC地址的一个小提醒:别贪图方便把每块板子烧成同一个地址。两张相同MAC的网卡同时在线,交换机的MAC表会频繁抖动,表现为间歇性掉线,排查起来非常妖。
5.2 Linux与Windows驱动适配
Linux这边很省心。内核从5.x开始就带igc驱动,I226-V基本是即插即用。系统起来后,先执行lspci确认设备被枚举到,能看到类似Intel Corporation Device 125c的输出,就说明PCIe链路训练和枚举都成功了,接下来配好IP就能跑。
Windows下一般装Intel官网驱动就行。这里有一个高频环境需要注意:如果你在PVE或者ESXi这类虚拟化平台上做PCIe直通,把网卡直通给虚拟机的时候,要留意主板ACS(Access Control Services)的支持情况。某些主板上不开启相关选项,直通会导致虚拟机启动时设备消失,这个在软路由和NAS直通折腾里面太常见了。
另外,如果系统内核版本太老,可能没有对应的igc驱动,需要手动编译。编译前确认内核头文件版本和当前内核一致,否则模块加载会报版本不匹配。
5.3 性能实测与发热控制
这个项目的说明文档里一般会附带测速截图。按我自己的经验,I226在大文件拷贝时能跑到280MB/s左右,近距离短网线测试跑满2.5G口基本没压力。CPU占用方面,Intel的网卡在全双工高负载时表现比RTL8125更好,队列管理和中断合并机制的优势很明显,对软路由这种转发场景体感差异尤其明显。
发热方面,裸片在散热焊盘处理不好的板子上满载跑到七八十度并不稀奇;做好散热焊盘且机箱通风正常的话,一般稳定在五六十度。如果你的网卡温度偏高,先别急着加风扇,按顺序检查两件事:一是散热焊盘有没有焊接好,QFN封装的底部焊盘虚焊排查起来很隐蔽;二是电源转换效率,DC-DC的开关频率和电感选型不对,转换效率会掉得很难看,多出来的损耗全变成热量。
6. 常见问题与排查技巧实录
6.1 PCIe枚举失败:系统认不到卡
这类问题排在所有求助案例的第一位。排查路径我建议按“供电、时钟、信号、枚举”的顺序来。
先量电压。卡插上后,量I226各路供电是否正常,重点看核心电压和3.3V。如果DC-DC没起振或者输出电压纹波大,芯片可能根本没工作。接着用示波器看25MHz晶体是否起振,波形正常的话时钟侧基本排除。
然后是PCIe链路训练。用协议分析仪去抓LTSSM报文对新手上手难度太高,更务实的办法是交叉测试:把卡换到另一台主板上,如果别人的机器能识别,说明卡本身基本正常,问题大概率在你自己的主板插槽或者BIOS设置;如果到哪都认不到,再回头看Layout和焊接,QFN底部焊盘虚焊是要重点怀疑的对象,热风枪加助焊剂重新流一遍焊锡往往能解决。
6.2 协商速率只有1G而不是2.5G
这个问题的原因大多数时候不在卡本身,而在线材和对端设备。2.5G对线材要求虽然不高,但至少得是质量合格的超五类线,那种细芯扁平网线或者老化线路很容易掉到1000M甚至100M。
排查时先换一根短线测试,排除线材因素之后再看对端。不少人家里设备还是千兆交换机,插上2.5G网卡自然协商到1000M,这不是卡的问题。最后才考虑卡自己的配置:EEPROM里能力位是否打开了2.5G支持,驱动里有没有被强行限制速率。Linux下可以用ethtool查询当前协商速率,不建议强制指定速率,自动协商的正常结果才是最优工作点。
6.3 掉线、丢包与“热了就断”
把网卡装进NAS或者小机箱,跑一阵子之后开始Ping丢包甚至完全断流,大概率是热问题。虽然I226比I225改善了很多,但散热焊盘处理不好、机箱通风糟糕的情况下,PHY内部信号质量还是会劣化。
处理优先级我建议是:先加强机箱散热,再给卡上加散热片,最后才是回炉改板子。如果你手上的开源工程是自己打样的,可以把底部散热焊盘的过孔阵列加密一版重新打样,这是治本的办法。
还有一个容易被忽略的点是EEE(节能以太网)。igc驱动默认可能开启EEE,在某些交换机兼容性不佳的环境里,表现为偶发的延迟升高和丢包。排查时用ethtool直接关掉EEE测试,如果问题消失,基本就能锁定是EEE的锅,长期使用建议写成配置文件固定关闭。
| 常见故障 | 优先排查项 | 次要排查项 |
|---|---|---|
| 认不到卡 | 各路电压、25MHz晶体 | PCIe差分走线、QFN焊接 |
| 协商只有1G | 网线质量、对端设备 | EEPROM能力位、驱动参数 |
| 高负载丢包 | 散热焊盘、机箱风道 | EEE配置、DC-DC纹波 |
| 唤醒失败 | 3.3V Aux供电 | 系统电源管理设置 |
我个人对这类开源硬件项目最深的体会是:它把“网络工程师看得懂,硬件工程师也做得出来”这两件事结合得很好。拿到工程文件之后,很多人第一反应是照着打样,但我建议你先从头把原理图捋一遍,搞清楚每一路电源从哪里来、每对差分线为什么这么走,再去动手做板,收获是照抄完全比不了的。
最后分享两个小技巧。第一,做板之前先把EEPROM备份出来,万一后面调试把配置搞乱了,至少能恢复出厂状态;第二,每次只改一个变量,不要同时改Layout又换变压器又调EEPROM,出了问题你会分不清到底是谁的锅。这个项目的开放资料和设计思路,值得所有想入门高速硬件设计的人认真研究一遍。