1. 为什么选择RTL8367RB这颗芯片
1.1 从需求出发:5口千兆交换机的核心诉求
自己动手做一台5口千兆交换机,听起来像是网络设备厂商才干的活,但实际上只要你选对了主控芯片,这件事的门槛比想象中低得多。我当初起这个念头,是因为家里那台老百兆交换机在NAS和台式机之间传大文件时慢得让人抓狂,而市面上带网管功能的5口千兆交换机要么贵得离谱,要么功能冗余到根本用不上。于是我想,干脆自己画一块。
选芯片是整个项目的起点,也是最关键的一步。市面上的交换芯片大致分几个梯队:Realtek的RTL8367系列、Marvell的88E6系列、Microchip的KSZ系列,还有一些国产替代方案。我最终锁定RTL8367RB,原因很直接——它在消费级和工业级产品中出货量极大,资料相对丰富,封装是LQFP-128,手工焊接虽然有点挑战但并非不可能,而且内置了完整的5口千兆PHY,不需要外挂额外的PHY芯片,BOM成本能压得很低。
RTL8367RB的核心规格值得先理清楚:它是一颗集成5端口10/100/1000Mbps以太网交换控制器,支持非阻塞线速转发,内置包缓存,支持VLAN、QoS、端口镜像、链路聚合等网管功能。供电方面需要3.3V和1.1V(或1.05V)两组电源,1.1V给核心逻辑供电,3.3V给PHY和IO供电。时钟输入是25MHz晶振,内部PLL倍频到所需频率。这些参数在选型阶段就要确认清楚,因为它们直接决定了你的电源设计和PCB布局方案。
1.2 与其他方案的对比:为什么不是KSZ9897或88E6390
有人可能会问,KSZ9897也是5口千兆交换芯片,为什么不选它?我实际对比过几款主流方案,这里把关键差异列出来:
| 对比项 | RTL8367RB | KSZ9897 | 88E6390 |
|---|---|---|---|
| 封装 | LQFP-128 | LQFP-128 | QFN-128 |
| 内核电压 | 1.1V | 1.2V | 1.0V |
| 网管功能 | 支持VLAN/QoS/镜像 | 支持VLAN/QoS | 支持完整二层 |
| 资料获取难度 | 中等 | 较难 | 较难 |
| 单颗价格(参考) | 较低 | 中等 | 较高 |
| 手工焊接难度 | 中等 | 中等 | 较高(QFN) |
KSZ9897的资料相对封闭,datasheet需要签NDA才能拿到完整版本,这对个人开发者很不友好。88E6390性能更强,但QFN封装底部有散热焊盘,手工焊接需要热风枪加预热台,返修难度大。RTL8367RB的LQFP封装引脚外露,用拖焊法就能搞定,而且它的寄存器手册在网上能找到较为完整的版本,配置起来有迹可循。
还有一点很实际:RTL8367RB在淘宝和立创商城上都能买到现货,价格大概在十几到二十几块钱一颗,而KSZ9897和88E6390经常缺货或者需要批量采购。对于个人DIY项目来说,供应链的便利性有时候比性能参数更重要。
1.3 项目整体架构:一块板子搞定所有事
整个项目的硬件架构可以拆成几个模块来理解。核心是RTL8367RB这颗交换芯片,它周围需要搭配:25MHz晶振提供时钟基准、复位电路保证上电时序正确、电源电路提供1.1V和3.3V、5个RJ45接口带网络变压器、以及配置接口(I2C或SPI)用于设置工作模式。
我设计的这块板子尺寸控制在100mm×80mm以内,四层板结构。为什么用四层而不是两层?因为千兆以太网的差分信号对阻抗匹配要求很严格,差分阻抗需要控制在100Ω±10%,两层板很难在保证线宽的同时做到完整的参考平面。四层板的叠层结构是:顶层信号层、内层地平面、内层电源平面、底层信号层。这样每个信号层都有相邻的参考平面,阻抗控制起来容易得多。
RJ45接口我选的是带集成网络变压器的型号,比如HanRun HR911105A,这样省去了外置变压器的空间和布线麻烦。网络变压器的作用是电气隔离和阻抗匹配,千兆应用必须用千兆级别的变压器,百兆的变压器虽然引脚兼容但带宽不够,插上去可能只能跑百兆甚至完全不link。这个坑我后面会详细说。
2. 原理图设计:每个元件都有存在的理由
2.1 电源树设计:1.1V和3.3V从哪来
RTL8367RB的电源需求看起来简单,但细节不少。它需要两组电压:核心电压1.1V(典型值,范围1.05V~1.15V)和IO电压3.3V。核心电压的电流需求大概在1.5A左右,3.3V的电流需求约0.8A。整个板子如果从外部5V或12V供电,就需要降压转换。
我的方案是:输入用DC-005接口接受12V供电,第一级用MP2315同步降压芯片把12V降到3.3V,第二级用MP2145把3.3V降到1.1V。为什么不用LDO从3.3V直接降到1.1V?因为压差2.2V、电流1.5A的情况下,LDO的功耗是3.3W,封装稍微小一点就会烫得没法摸,效率只有33%左右。而开关电源的效率能到85%以上,发热小得多。
MP2315和MP2145都是MPS的同步降压芯片,开关频率高(MP2315是500kHz,MP2145是1.2MHz),外围元件少,只需要一个电感、几个电容和反馈电阻。反馈电阻的计算公式是:
Vout = 0.8V × (1 + R1/R2)
对于3.3V输出:R1/R2 = (3.3/0.8) - 1 = 3.125,取R1=31.6kΩ,R2=10kΩ,实际输出约3.33V,在允许范围内。
对于1.1V输出:R1/R2 = (1.1/0.8) - 1 = 0.375,取R1=3.9kΩ,R2=10.4kΩ(用10kΩ和4.02kΩ组合),实际输出约1.12V,也OK。
电感的选择要根据纹波电流来算。以MP2145为例,开关频率1.2MHz,输入3.3V,输出1.1V,负载1.5A。纹波电流取负载电流的30%即0.45A,则电感值为:
L = (Vout × (Vin - Vout)) / (Vin × fsw × ΔI) = (1.1 × (3.3 - 1.1)) / (3.3 × 1200000 × 0.45) ≈ 1.36μH
取标准值1.5μH。电感的饱和电流要大于负载电流加上一半纹波电流,即1.5A + 0.225A = 1.725A,选2A以上的电感比较稳妥。
注意:RTL8367RB对上电时序有要求,一般建议3.3V先上电或与1.1V同时上电,但1.1V不能明显早于3.3V。我在实际调试中发现,如果1.1V先建立而3.3V还没上来,芯片有时会进入异常状态,表现为所有端口都不link。解决办法是在1.1V的使能脚上加一个RC延时,让3.3V先建立。
2.2 时钟与复位电路:别小看这两个部分
RTL8367RB需要一颗25MHz的无源晶振,负载电容根据晶振规格来选,一般是12pF到18pF。我用的晶振负载电容是12pF,所以外接电容取22pF左右(因为PCB走线本身有3~5pF的寄生电容,实际取值要比计算值略小)。晶振的精度要求是±50ppm以内,普通无源晶振都能满足。
复位电路我用了经典的RC复位加专用复位芯片的方案。RC复位用一个10kΩ电阻和100nF电容,时间常数1ms,但RC复位的问题是高低温下阈值不稳定,而且掉电时电容放电慢可能导致复位不彻底。所以我加了一颗MAX809复位芯片,它能在上电时输出200ms的复位脉冲,掉电时当电压降到阈值以下也能可靠复位。复位信号接到RTL8367RB的RESET_N引脚,低电平有效。
实操心得:复位引脚上一定要加一个100nF的滤波电容,靠近芯片引脚放置。我有一次忘了加这个电容,结果板子在电机旁边工作时会随机复位,后来补上电容就稳定了。复位信号的走线也要尽量短,避免被其他信号耦合干扰。
2.3 配置接口:I2C还是SPI
RTL8367RB支持I2C和SPI两种配置接口,也可以通过 strapping 引脚在复位时选择工作模式。对于不需要复杂网管功能的场景,可以用strapping电阻直接配置成非网管交换机模式,上电就能工作,不需要MCU干预。但如果你想用VLAN或者端口镜像,就需要通过I2C或SPI来写寄存器。
我选择了I2C接口,因为只需要两根线(SCL和SDA),而且可以用一颗便宜的STM32F030或者CH32V003来当配置MCU。I2C的上拉电阻取4.7kΩ,接3.3V。RTL8367RB的I2C地址是7位地址0x5C(写地址0xB8,读地址0xB9),这个地址是固定的,不能改。
如果你不想用MCU,也可以用SPI接口配合一颗SPI Flash,把配置数据存在Flash里,上电时芯片自动从Flash加载。这种方式适合量产,但个人DIY的话用MCU更灵活,改配置不用重新烧Flash。
2.4 RJ45与网络变压器:千兆和百兆的区别在这里
RJ45接口我选的是带变压器的HR911105A,它内部集成了千兆网络变压器和共模扼流圈。这里要特别注意:千兆网络变压器和百兆的引脚定义不同,千兆的每个端口有4对差分线(8根线全用),百兆只用2对(4根线)。如果你买了百兆的RJ45座子焊上去,千兆的4对线里只有2对能用,结果就是只能跑百兆或者完全不link。
网络变压器的中心抽头需要接一个75Ω的电阻到地,这个电阻的作用是提供共模电流的泄放路径。有些设计会用两个75Ω电阻并联到地,再通过一个1000pF电容接到机壳地,这样共模干扰能更好地泄放到大地。我实际测试过,不加这个电阻的话,网线插拔时偶尔会出现link中断,加上之后就稳定了。
RJ45的金属外壳要接到机壳地(chassis ground),和信号地之间用一个1nF/2kV的电容连接,或者用0Ω电阻直接连接。这个处理方式取决于你的应用场景:如果板子放在金属机箱里,机壳地接大地,信号地和机壳地之间用电容连接可以抑制共模干扰;如果板子没有机箱,信号地和机壳地直接短接也行。
3. PCB布局布线:千兆信号不是闹着玩的
3.1 叠层设计与阻抗控制
四层板的叠层我前面提过,这里展开说具体参数。顶层和底层是信号层,内层1是地平面,内层2是电源平面。板厚1.6mm,芯板厚度0.5mm,半固化片厚度0.2mm。顶层到内层1的距离是0.2mm,这个距离决定了微带线的宽度。
对于100Ω的差分阻抗,用微带线结构(顶层走线,内层1为参考地),线宽0.2mm、线间距0.2mm时,阻抗大约在100Ω左右。这个计算可以用Saturn PCB Toolkit或者Polar SI9000来验证。我实际用的是线宽0.22mm、间距0.18mm,实测阻抗在98Ω到102Ω之间,满足要求。
差分对内的两根线要严格等长,误差控制在5mil以内。差分对之间的间距要大于3倍线宽,也就是至少0.6mm,减少串扰。所有差分线尽量走直线,必须拐弯时用45度角或者圆弧,不能用90度直角。
注意:千兆以太网的差分信号速率是125MHz(每个符号周期8ns,但实际信号频率更高),虽然不算特别高,但阻抗不连续会导致信号反射,表现为误码率升高或者link不稳定。我见过有人用两层板做千兆交换机,差分线走得歪歪扭扭,结果只能跑百兆,这就是阻抗没控制好的典型症状。
3.2 电源平面分割与去耦电容布局
电源平面的处理有个原则:1.1V和3.3V要分开铺铜,不要混在一起。我在内层2上把电源平面分成两个区域,左边是3.3V,右边是1.1V,中间用20mil的间隙隔开。每个电源区域都要有足够的铜皮面积,保证电流密度不超过1A/mm²。
去耦电容的布局是很多人容易忽略的地方。RTL8367RB的每个电源引脚旁边都要放一个100nF的电容,尽量靠近引脚(距离不超过2mm)。除此之外,每个电源区域还要放几个10μF的钽电容或者陶瓷电容做储能。我用了4个10μF的0805封装陶瓷电容,分别放在芯片的四个角附近。
为什么去耦电容这么重要?因为交换芯片内部有大量的逻辑门同时开关,瞬间电流变化率很高,如果电源引脚旁边的电容不够近,电源线上的寄生电感会导致电压跌落,芯片可能工作异常。我实测过,去掉某个引脚的100nF电容后,那个端口在满负载传输时会出现丢包。
3.3 差分线走线规则与RJ45区域处理
从RTL8367RB到RJ45的差分线是整个PCB最关键的走线。我总结了几个必须遵守的规则:
第一,差分线从芯片引脚出来到变压器之间的走线要尽量短,最好控制在25mm以内。走线越长,损耗和干扰越大。
第二,差分线不能跨分割的地平面。如果地平面被其他走线割裂,差分线的回流路径就会绕远,导致阻抗突变。我在布局时把RJ45区域的地平面做成完整的一块,不和数字地混在一起。
第三,差分线下面不要走其他信号线,尤其是时钟线或者开关电源的走线。如果实在避不开,中间要隔一层地平面。
第四,RJ45的LED引脚走线要远离差分线,LED的电流虽然不大,但开关时会产生噪声。
第五,变压器到RJ45之间的走线也要按差分规则走,虽然这段是隔离后的信号,但同样需要阻抗匹配。
我实际布线时,把5个端口的差分线分成5组,每组从芯片出来先走内层,到了RJ45附近再换到顶层。换层时要在旁边加回流地过孔,保证回流路径连续。
3.4 晶振与复位电路的布局要点
25MHz晶振要尽量靠近芯片的晶振引脚,走线长度不超过10mm。晶振下面不要走其他信号线,最好在晶振区域铺一块地铜皮,并打过孔到内层地平面。晶振的两个负载电容要对称放置,地端就近接地。
复位芯片放在芯片的复位引脚附近,复位走线不要和其他信号线平行走太长距离。复位引脚上的100nF电容要靠近芯片引脚。
实操心得:我在第一版PCB上把晶振放在了板子边缘,结果发现link不稳定,后来用示波器测晶振输出,发现波形上有明显的振铃。把晶振移到芯片旁边并加了地屏蔽之后,波形干净了,link也稳定了。晶振的走线真的不能马虎。
4. 焊接与调试:从裸板到能用的交换机
4.1 焊接顺序与温度曲线
RTL8367RB是LQFP-128封装,引脚间距0.5mm,手工焊接需要一定的技巧。我的焊接顺序是:先焊电源芯片和阻容元件,再焊RJ45和晶振,最后焊RTL8367RB。为什么最后焊主芯片?因为主芯片最怕静电和热损伤,先焊其他元件可以缩短芯片暴露在高温下的时间。
焊接主芯片时,先用助焊剂涂满焊盘,把芯片对准放好,注意第一脚的位置。然后用刀头烙铁加锡拖焊,每边拖两次。拖焊时烙铁温度设在320°C左右,不要超过350°C。拖完之后用放大镜检查有没有连锡,特别是引脚密集的地方。如果有连锡,用吸锡线加助焊剂清理。
注意:焊接前一定要戴防静电手环,工作台要接地。RTL8367RB的ESD等级是HBM 2kV,虽然不算低,但手工焊接时静电风险还是有的。我有一次没戴手环,焊完之后芯片就发烫不工作,换了颗新的才好。
4.2 上电检查与电压测量
焊完之后不要急着插网线,先做上电检查。用可调电源设到12V,限流设到200mA,然后上电。如果电流超过200mA,说明有短路,立刻断电检查。正常情况下的空载电流应该在80mA到120mA之间。
用万用表测量各路电压:3.3V应该在3.2V到3.4V之间,1.1V应该在1.05V到1.15V之间。如果电压不对,检查反馈电阻有没有焊错。然后用示波器测25MHz晶振,应该有干净的25MHz正弦波,峰峰值在1V左右。
如果电压和晶振都正常,用示波器测复位引脚,上电时应该有一个从低到高的跳变,高电平是3.3V。如果复位引脚一直是低电平,检查复位芯片有没有焊反或者损坏。
4.3 配置寄存器与功能验证
如果只是做非网管交换机,strapping电阻配置好之后上电就能工作。插上网线,对应的LED应该亮起来。用两台电脑分别接两个端口,互相ping,应该能通。用iperf3测吞吐量,千兆环境下应该能跑到940Mbps左右。
如果要配置VLAN,就需要通过I2C写寄存器。我用CH32V003写了一个简单的配置程序,上电后初始化I2C,然后写几个关键寄存器:端口使能、VLAN表、PVID等。RTL8367RB的寄存器手册有几百页,但常用的就那么几十个。我建议先用非网管模式验证硬件没问题,再折腾网管功能。
实操心得:调试时如果某个端口不link,先检查差分线的焊接有没有虚焊,特别是RJ45的引脚。我遇到过好几次是RJ45的某个引脚没焊好,补焊之后就正常了。另外,网线也要用好的,劣质网线的回波损耗大,千兆可能协商不上。
4.4 常见问题速查表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 所有端口不link | 电源异常、复位异常、晶振不起振 | 测电压、测复位、测晶振 |
| 单个端口不link | 差分线虚焊、变压器损坏、RJ45引脚氧化 | 补焊、换变压器、换RJ45 |
| link但只能跑百兆 | 差分线阻抗不匹配、变压器是百兆的 | 测阻抗、换千兆变压器 |
| 传输大文件丢包 | 去耦电容不足、电源纹波大 | 加电容、测纹波 |
| 芯片发烫 | 电源短路、芯片损坏 | 断电测阻抗、换芯片 |
| 插拔网线时link中断 | 共模电阻未接、变压器中心抽头处理不当 | 加75Ω电阻、加共模电容 |
5. 完整PCB设计文件说明与复现指南
5.1 文件结构说明
我整理的设计文件包括:原理图(PDF和源文件)、PCB文件(四层板,Gerber格式)、BOM表(含立创商城编号)、以及配置MCU的固件源码。原理图用KiCad 7.0绘制,PCB也是KiCad格式,Gerber文件可以直接发给嘉立创或者捷配打样。
BOM表里我标注了每个元件的型号、封装、数量和参考位号。关键元件包括:RTL8367RB(U1)、MP2315(U2)、MP2145(U3)、MAX809(U4)、25MHz晶振(Y1)、HR911105A(J1-J5)、CH32V003(U5,可选)。阻容元件都是0603封装,电感是CDRH系列。
5.2 打样与焊接注意事项
打样时建议选四层板,板厚1.6mm,沉金工艺(ENIG),因为沉金表面平整,适合细间距引脚的焊接。喷锡工艺的平整度差一些,0.5mm间距的引脚容易连锡。阻焊颜色随意,但建议选绿色或者蓝色,黑色阻焊不容易看清走线。
打样回来之后先目检,看有没有明显的短路或者断路。然后用万用表测电源和地之间的阻抗,正常应该在几百欧姆以上。如果阻抗很低,说明有短路,要仔细检查。
5.3 后续扩展思路
这块板子做完之后,还可以往几个方向扩展。一是加一颗SPI Flash,把配置数据存进去,实现上电自动加载。二是加一个USB转串口芯片,通过串口配置VLAN。三是把5个端口改成4个端口加一个SFP光口,用RTL8367RB的SerDes接口接光模块。四是加一个散热片,如果长时间满负载运行,芯片温度会到60°C左右,加个小散热片能降到45°C以下。
我个人在实际操作中的体会是,RTL8367RB这颗芯片的性价比确实高,但调试过程中最花时间的不是焊接,而是排查link不稳定的问题。很多时候问题出在差分线的阻抗或者变压器的选型上,而不是芯片本身。所以如果你也要做这个项目,建议在PCB布局阶段就严格按照差分规则来,能省掉后面很多调试的麻烦。另外,配置MCU的固件不用写得太复杂,先把非网管模式跑通,再慢慢加功能,这样出问题的时候容易定位。