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

资讯详情

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

基于I226芯片的半高PCIe 2.5G网卡设计实战拆解

基于I226芯片的半高PCIe 2.5G网卡设计实战拆解 这几年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直通把网卡直通给虚拟机的时候要留意主板ACSAccess 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出了问题你会分不清到底是谁的锅。这个项目的开放资料和设计思路值得所有想入门高速硬件设计的人认真研究一遍。
返回列表