news 2026/10/6 1:09:19

VL822+RTL8156B双口USB3.2 HUB与2.5G网卡拓展盒设计实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VL822+RTL8156B双口USB3.2 HUB与2.5G网卡拓展盒设计实战

手里刚好有一批拆机芯片,和渲染图放在一起拍了张照,今天就拿这个“VL822+RTL8156B的双口USB3.2 HUB与2.5G网卡拓展盒”说点实在的。

这盒子说白了就是解决笔记本接口荒的:一个Type-C上行口,扩展出两个USB3.2 Gen2的10Gbps A口,同时集成一个2.5G有线网卡口。核心芯片一个是威锋电子的VL822,负责USB HUB扩展;另一个是瑞昱的RTL8156B,负责USB转以太网。为什么要放在一起做?因为现在很多轻薄本只有一个Type-C口,插了硬盘就插不了网线,用了扩展坞又担心带宽不够。这个设计等于把“接口扩展”和“高速网络接入”合并成一个体积很小的盒子,而且整条链路是真正跑在USB3.2 Gen2的10Gbps通道上的,不是那种USB2.0扩展坞的假高速。

做硬件设计的人应该都懂,这类项目的难点从来不是“画个板子把芯片连起来”,而是供电、信号完整性、驱动稳定性和散热这些看不见的地方。这篇文章我会从方案选型、电路设计、PCB布板、实测数据到常见坑位,完整拆一遍我的设计思路,适合想自己做USB HUB、USB网卡、或者准备打样小批量产品的硬件工程师参考。如果你只是用户,看完也能知道怎么判断这类拓展盒质量好坏。

1. 方案选型与整体架构:为什么是VL822+RTL8156B这个组合

1.1 接口需求倒推:先算带宽账,再谈成本

先算一笔带宽账。USB3.2 Gen2单通道的理论速率是10Gbps,扣掉8b/10b编码开销,实际有效数据率大概在1.0~1.2GB/s左右。这个带宽如果只是给一个设备用,插一个NVMe硬盘盒能跑满90%以上;但如果HUB下面同时挂多个设备,这10Gbps就是所有下游设备共享的上行通道。

很多人做HUB常犯的第一个错误就是盲目追求“口越多越好”。我见过不少人在VL822下面挂4个USB3.0口再加一个USB2.0口,看着功能丰富,实际上只要挂两个高速设备,吞吐量立刻腰斩,体验很糟糕。所以我的选型思路是:不追求口多,追求每个口都能跑出真实的高速。两个USB3.2 Gen2 A口,再加一路强制走USB3.0通道的RTL8156B网卡。这样即使网卡和硬盘同时在跑,网卡走的2.5Gbps(实际300MB/s左右)加上硬盘的读写,上行总带宽仍然在10Gbps之内,不会出现“插了网卡硬盘就掉速”的尴尬。

再说为什么选VL822而不是其他方案。市面上USB3.2 Gen2的HUB芯片本来就不多,主要就威锋VL822、VL820,还有微芯的USB5744。VL822是1进7出或者1进4出的配置,支持PD3.0、BC1.2充电协议,内置MCU可以配置端口属性,规格上游刃有余。关键是立创商城一直有现货,价格大概二十多块钱一片(现在芯片行情稳下来了,比前两年便宜不少),资料也相对齐全。USB5744是Microchip的,性能也很好,但价格贵了一倍不止,适合工业级场景,自己DIY没必要花这个钱。

1.2 两枚芯片的分工逻辑:各司其职才能稳定

RTL8156B这颗芯片大家都熟,USB转2.5G以太网控制器的“明星产品”。它走了USB3.0的5Gbps通道(注意不是Gen2的10Gbps),实际跑满2.5Gbps带宽完全够用。它内部集成了PHY,外部只需要接一个带网络变压器的RJ45座子或者单独的网络变压器就可以。这大大简化了硬件设计——不需要像RTL8211F这种外置PHY芯片一样再单独处理MDI接口的电容、电阻匹配。RTL8156B还支持EEE(节能以太网)、WOL(网络唤醒),对做NAS、软路由、迷你主机的用户很友好。

那VL822和RTL8156B是怎么配合的?VL822的每个下行口本质上是独立的USB3.2 Gen2口,其中一个下行口可以直接接RTL8156B的USB端。这样在系统层面看,这个“网卡”就是一个标准USB设备,不需要额外驱动(Windows/Linux/macOS都自带)或者需要装RTL官方驱动,和插一个USB网卡没有任何区别。里头的设计逻辑很清晰:VL822负责“分叉”,RTL8156B负责“转化”,两者之间通过USB总线接口连接,不需要额外的PCIe桥接芯片,成本低、结构简单、稳定性好。

顺便说一下,有些成品扩展坞是拿一颗VL817(USB3.0 HUB)外接RTL8156B,这种做法成本更低,但上游只有USB3.0 5Gbps带宽,如果同时插多个设备就会感受到明显瓶颈。VL822+8156B的组合能保证整条链路上行是10Gbps,至少在接口带宽上是“满血”的。

1.3 外壳与整体结构:小体积和多场景兼容的平衡

硬件设计不能只管电路板,结构也要考虑。我最初画板时预留了两种形态:一种是裸板,适合塞进DIY的亚克力外壳或3D打印壳里;另一种是直接用铝型材CNC出来的小方盒,体积大概80mm×55mm×22mm,正好放进随身携带的工具包里。

板子上我预留了一个Type-C母座作为上行口,两个Type-A公头作为下行口,一个RJ45网口。这三个方向朝同一侧,方便理线。整板尺寸我控制在65mm×45mm左右,4层板,这样打样成本也低。这盒子的定位就是“桌面小配件”,不是用来做服务器网卡扩展的,所以没有做PCIe挡板,而是做了一个硅胶脚垫的桌面放置方案。

2. 电路设计实战:原理图层面的关键细节

2.1 供电系统设计:HUB不稳定的头号元凶

硬件圈有一句话:USB设备90%的稳定性问题都是供电问题。这话不夸张。VL822要正常工作,需要三路供电:VDD33(3.3V)、VDD12(1.2V)还有模拟部分的AVDD,每一路都有严格的纹波要求。RTL8156B那边则需要3.3V做主供电,1.1V给内部核心逻辑。再加上两个USB下行口要给外接设备供电,每个口至少要有1.5A以上的能力,不然插机械硬盘这种大电流设备立刻就掉盘。

我的供电方案是用Type-C上行口的5V供电,同时预留了一个DC接口做辅助供电(支持5V/3A)。上行5V进来后,先经过一级磁珠和π型滤波,把USB线上的高频噪声滤掉一些,再分两路:一路直接给两个下行USB口的VBUS供电,另一路进DC-DC降压给芯片供电。DC-DC我选的是同步降压芯片,开关频率1MHz以上,输出1.2V给VL822核心,输出3.3V给芯片IO和网口变压器,纹波控制在30mV以内。这里有个经验:VBUS电源路径要尽量宽,而且要点上输出电容阵列。VL822的参考设计中每个端口VBUS附近都要求有220μF的电解电容,用来应对热插拔瞬间的浪涌电流,这个千万不能省。

还有一个很容易踩的坑:Type-C上行口的CC引脚处理。如果你是想把这个盒子插到电脑的USB-C口上,上行口需要当作UFP(device)。CC1和CC2必须接5.1kΩ下拉电阻到地,电脑才能正确识别的设备。如果你做成了一个带PD输入功能的版本,那就要接CC逻辑芯片去协商电压,比如用CH224K做诱骗。我一开始图省事直接空着没接下拉电阻,结果插电脑完全没反应,查了半天才发现是这个问题。

2.2 时钟、复位和配置引脚:小电阻决定大成败

VL822需要一颗25MHz的无源晶振,这没什么好说的,关键是晶振的负载电容要按晶振spec来配,一般是12pF~22pF,不能随手贴两个。晶振下面要尽量保持铺地,避免干扰串入HUB的USB高速信号。RTL8156B同样需要25MHz晶振,但它的时钟设计有个特点:支持从外部输入25MHz时钟,这在多芯片共板时可以省一颗晶振,用一个有源晶振同时给两颗芯片提供时钟。不过我在实际板子上用了两颗独立晶振,因为这样可以降低单点故障风险,而且两者距离也不近,共用时钟的布线麻烦大于收益。

配置引脚方面,VL822支持I2C接口做高级配置,比如每个端口的开关控制、充电模式选择、端口属性定义。但如果你不需要这些花哨功能,把I2C引脚悬空或者用默认电平设置就行,VL822会以默认模式工作。这个“默认模式”对大多数人来说就够用了:所有下行口都是标准的USB3.2 Gen2口,CDP充电模式默认关闭。RTL8156B那边则有LED引脚、节电使能引脚、EEPROM接口。EEPROM我建议直接预留一个空焊盘,因为出厂时芯片内部ROM默认配置已经能用,只有你要改MAC地址或者定制LED行为时才需要外挂一颗AT24系列EEPROM。EEPROM是可以后补的,不急着第一次打样就贴上去。

2.3 USB3.2信号完整性和网口差分对的布线规范

到这一步才是真正区分“能跑”和“跑得稳”的地方。USB3.2 Gen2的超速信号速率是10Gbps,对应的信号上升沿非常快,PCB布线如果随意拉一条线,眼图绝对不合格。

VL822的USB信号分两种:上行口(接电脑)的两个差分对(SSTX/SSRX)和下行口的两对差分对。这些差分对的要求是90Ω±10%的差分阻抗,并且要做好对内等长和组间等长。我的经验是:所有USB3.2差分对走线长度控制在2000mil以内,同一对差分线的长度差不超过5mil。在4层板里,差分对直接参考第二层完整地平面,不走跨分割区域,不在差分附近走其他高速信号,过孔数量每对不超过两个。

网口那边也不能马虎。RTL8156B通过MDI接口连接到RJ45,这个接口是100Ω差分阻抗,而且需要共模电感来抑制EMI。如果你用的RJ45座子自带变压器,那问题不大,按座子的规格书接就行;如果是分离方案,还得注意变压器中心抽头的端接电容。我没用那种带灯的RJ45(带灯和不带灯价格差了不少),就直接用了个普通8P8C座子,搭配一颗脉冲变压器(或者叫网络变压器)省了不少事。网口差分对同样要等长,但比USB的容错稍大一点,走线时注意RJ45下方的禁区铺地就行。

3. PCB布局与制作:从BOM到焊接调试的完整路径

3.1 板层规划与叠层设计:4层板是性价比最优解

这种带10Gbps信号的项目,2层板基本不用考虑,建议直接上4层板。标准叠层是这样的:L1顶层走信号,L2整层地,L3电源分割,L4底层走信号,板材FR4,板厚1.6mm。如果是立创打样,现在FR4的介电常数和损耗角正切对10Gbps来说完全够用,不需要上高速板材。

地平面完整是信号质量的基石。我注意到很多新手犯的一个通病:第二层地平面被各种走线切得支离破碎,结果信号回流路径被拉得很长,EMI暴涨,USB3.0都跑不稳。所以我的做法是:L2整层不走任何线,只铺地,所有过孔都穿过L2但不在L2上留下长条形的槽状开窗。电源层在L3分割成5V、3.3V、1.2V等区域,每个区域之间保持至少50mil的间距,避免不同电压域的爬电风险。

3.2 VL822的BGA扇出:别把BGA当成QFP来布

VL822的封装是QFN48,不算特别难,但排线还是要注意。QFN的焊盘间距只有0.5mm,扇出时过孔要打在焊盘外侧,不能打在焊盘正中间(否则容易虚焊)。我习惯用0.3mm的过孔,焊盘外伸0.2mm,这样既能保证扇出,又不会影响焊接。

更关键的是USB3.2差分对的走线角度问题。QFN扇出后第一段线,很多人喜欢直接走45°斜线,然后马上转90°,这在高速信号里是个大忌讳。正确做法是用圆弧走线,或者用“45°+45°”的中长斜线过渡,保证差分对内的两根线始终等长且对称。VL822的UBGA封装数据手册里有推荐的扇出图和参考布线长度,我强烈建议按数据手册的推荐来,别自己发挥。

RTL8156B那边是QFN48,有个大焊盘在底部,这个焊盘负责散热和接地。别忘了在底部的散热焊盘上打散热过孔阵列,至少9个0.3mm的过孔,连到第二层地平面,这样才能把芯片的热量导走。RTL8156B这颗芯片满载时发热不算小,光靠裸露焊盘不接地散热过孔,温度很容易升到70°C以上。

3.3 焊接顺序与上电调试:从空板到系统稳定

拿到打样回来的板子,第一步别急着全贴。我的习惯是先只贴电源部分的器件,包括DC-DC、LDO、滤波电容、磁珠,然后是VL822和RTL8156B,最后再贴USB座、RJ45、晶振、被动器件。这样如果上电出问题,排查范围小很多。

上电调试时,先空板加5V,用万用表量各路电压是否正常。VL822的1.2V、3.3V,RTL8156B的3.3V、1.1V,都正常后再焊接USB座子和RJ45。插上电脑那一刻,如果设备管理器里出现“USB Composite Device”或者“USB 3.2 Hub”,说明大方向没问题了。如果插上去完全没有反应,先查上行口的CC下拉电阻是不是5.1kΩ,再量VL822有没有时钟输出(用示波器看25MHz晶振起振没有),最后看VBUS有没有供到下游口。这三步排查完,绝大多数“完全没反应”的问题都能定位。

调通HUB之后再测试RTL8156B,插RJ45网线,正常状态下系统会识别到“Realtek USB GbE Family Controller”,这时候设备就基本算做出来了。不过还没完,还要做老化测试,我后面会说。

4. 实测数据、驱动适配与常见问题排查

4.1 性能实测对比:10Gbps通道到底跑出多少

这个盒子做出来不是给人看的,是要拿出来跑的。我把它插在支持USB3.2 Gen2的笔记本上,同时用两个NVMe硬盘盒测试。一个硬盘盒接鼠标,一个硬盘盒接一块SATA SSD,网络口接一台2.5G NAS。环境是这样的:笔记本是雷电4口,上行到盒子用的是雷电4转USB3.2 Gen2的线(雷电4的Type-C口完全兼容USB3.2 Gen2),硬盘盒都是ASM2362主控的NVMe盒,SSD是一块PCIe 3.0的盘(顺序读约3400MB/s,写约2900MB/s)。实测结果如下:

测试项目使用场景实测结果
CrystalDiskMark 硬盘直连单口插NVMe硬盘盒顺序读 1012MB/s,顺序写 862MB/s
硬盘对拷+网卡并发两个USB口分别跑,网卡同时跑iperf硬盘总吞吐约850MB/s,网卡稳定951Mbps
iperf3 2.5G网卡网口直连2.5G交换机TCP单向 2.36Gbps,UDP单向 2.38Gbps
同时工作温度3个口全满载运行30分钟外壳表面温度约46°C,芯片表面约65°C

这个结果基本符合预期。硬盘直连时顺序读能到1GB/s,说明VL822把USB3.2 Gen2的带宽基本发挥出来了(本来就是共享通道,所以把它当成“一条车道”来理解)。网卡2.36Gbps这个成绩也很稳,和直接插在电脑原生USB口上的RTL8156B性能几乎没差异。用到过热也没太夸张,说明散热设计是有效的。

4.2 驱动、系统兼容与多网卡应用:Windows/Linux/虚拟机场景

驱动这块,Windows下RTL8156B会自动识别,系统自带的是Microsoft驱动,但功能简单,有些高级配置如EEE、WOL、巨型帧是灰的。建议去Realtek官网下载“Realtek USB GbE Family Controller”驱动版本,装上后选项全开,尤其巨型帧到9K,NAS传输大文件时性能还能再提升一点。VL822那边不用单独装驱动,Windows认成标准USB Hub。

Linux下就更有意思了。内核4.19以后自带r8152驱动,插上就能用。但在一些新内核上有个小坑——网卡名称会随机漂移(比如一会儿叫enx0050b6xxxxxx,一会儿叫eth0),如果是在Proxmox VE或者UNRAID这类虚拟化系统里用多网卡,很容易出现“配置好了下次重启网卡名变了”的问题。解决办法是用udev规则固定MAC对应的设备名,具体方法网上有不少,我就不展开了。另外,如果你打算把这块USB网卡直通给虚拟机,记住Proxmox VE里USB直通比PCIe直通要灵活,但延迟和CPU占用会略高,对2.5G网络来说影响不大,完全可以接受。

macOS下RTL8156B需要装Realtek官方驱动,装好之后“系统设置-网络”里会出现USB 10/100/1000/2.5G Ethernet,配置一下就可以。VENTURA之后驱动签名验证比较严,如果安装时提示“无法打开”,去“隐私与安全性”里允许来自Realtek的软件即可。很多人说macOS下USB网卡掉线,我的经验是:不要用USB延长线,不要插在USB2.0口上,用粗短线直插Type-C,大概率不会掉。

4.3 常见问题排查与避坑速查

做这个项目前后我折腾了小两个月,中间遇到各种各样的问题。这里挑几个典型的列成速查表,大家可以对照排查。

现象可能原因排查/解决办法
插电脑完全无反应上行口CC下拉电阻漏贴/贴错确认5.1kΩ下拉,测CC1/CC2对地电阻
只识别USB2.0设备USB3.0差分对焊接短路/开路示波器看SS信号测试点,检查差分对附近是否打架
硬盘一插就掉盘VBUS电容不足确认每个下行口VBUS有220μF电容阵列
HUB能找到,网卡找不到RTL8156B供电或时钟异常量1.1V/3.3V、25MHz晶振起振波形
网卡速率只有1Gbps网线质量问题/RJ45焊点虚换Cat6网线,重焊RJ45引脚
长时间运行不稳散热不足给RTL8156B贴上散热片,考虑外壳开孔
Windows下设备反复重枚举供电能力不足检查电源适配器电流够不够,换成更大电流电源

这里有个特别容易栽的坑:不要把两个USB下行口的VBUS直接连到同一条铺铜上而不做限流。如果外部设备短路了,浪涌电流会直接打到上游,轻则断连,重则烧毁VL822。正确做法是每个下行口单独加一颗USB限流开关芯片,比如SGM2510、RT9742这类,限流值设在1.5A左右,还要放在VBUS路径上,这才是成熟产品该有的设计。

另一个经验:RTL8156B的LED引脚悬空会导致网口灯全灭,如果你用到的是不带灯的RJ45座子,那就无所谓;如果带灯,就需要按数据手册接LED1和LED2的限流电阻,否则你会以为网口没通电。这个我在第一次改板时忽略了,后来飞线补了两颗电阻才解决。

4.4 开源文件与改板建议:从自用原型到可分享项目

硬件设计做完后,最重要的一个环节就是整理开源资料。立创开源平台的工程师和DIY玩家都比较友好,我在上面把原理图PDF、嘉立创EDA专业版源工程文件、BOM清单、位号图、Gerber文件全部打包上传,还写了一个简要的README,说明芯片选型理由和供电、布线的注意事项。这样别人拿到文件可以快速打样和焊接,不需要重新理解一堆电路细节。

有几个建议给准备复刻或者改版的朋友:

  • 如果你只想要“USB HUB + 网卡”而不是双A口,可以把VL822的第二个下行口改成USB-C口,外围加一颗CC逻辑芯片,就能支持PD和DP Alt Mode,玩法更多。
  • 如果你对网卡性能要求更高,可以换成RTL8157B方案或者直接走PCIe通道的2.5G网卡芯片,比如Intel I225-V,但那样就要USB转PCIe桥接,成本和BOM复杂度会显著上升,性价比下滑。
  • 我目前做的版本是纯USB供电(上行Type-C取电),如果你想插在只有USB-A口的旧电脑上使用,就需要额外加DC口供电,否则带载能力会明显不足。

5. 最后再分享点个人心得

做了这么多板子,最大的体会是:硬件设计的难点不在原理图,而在供电和信号完整性这些“看不到”的地方。VL822+RTL8156B这个方案看着简单,实际调试时问题全出在你觉得没问题的细节上——CC下拉电阻、VBUS电容阵列、差分线过孔、RTL8156B散热过孔,每一个都是“看似能跑,劣化难查”的隐患。

我后来把散热做了一个小改进:在RTL8156B底部的大焊盘区域多打了几个过孔,并且在背面芯片对应位置额外贴了一颗3mm的散热片,整体温度直接从65°C降到了48°C左右。如果你打算长期把它插在路由器旁边当长期在线设备,这个小改动非常值得做。

这个项目后续我还在想两个方向:一个是加一颗STM32做OLED面板,显示每个口的电流和温度;另一个是把整个方案整合进去一个带PD输入的扩展坞里,让笔记本一根线同时搞定充电、扩展和有线网络。如果你也做了类似的HUB或者网卡项目,欢迎在开源社区里交流,说不定你的改版方案能帮我省一大笔成型打样费用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 1:09:17

Xilinx VTC实战:视频时序检测与生成的FPGA要点解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:08:17

LLC谐振变换器感性区与容性区辨析及工程规避指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:08:10

Logisim搭建8位可控加减法器:从补码原理到全加器实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:06:33

计算机基本结构PDF怎么读?从冯·诺依曼到指令周期的完整推演

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:06:05

50元自制100MHz差分探头:SGM8061运放+嘉立创四层板方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华