☰
手搓VL822+RTL8156BG拓展坞:10Gbps+2.5G网口+PD快充实战
2026/10/6 1:25:00 网站建设 项目流程

去年年底我给自己挖了个大坑:笔记本只有两个USB-C口,一个要接显示器,一个要插移动硬盘,网口还得靠转接,桌面乱得跟蜘蛛网似的。市面上的拓展坞看了好几款,能带2.5G网口的要么贵得离谱,要么接口分配不合理——4个USB-A口全是USB 2.0,读卡器速度拉胯,PD快充更是虚标。于是我一拍桌子:干脆自己画一块基于VL822+RTL8156BG的10Gbps USB-C拓展坞,集成2.5G网口、读卡器和PD快充,从芯片选型到PCB打样全部自己来。这篇文章就是整个项目的完整复盘。

先说结论:这块板子最终实现了USB 3.2 Gen2(10Gbps)的主链路,扩展出4个下行口,其中一路给RTL8156BG做2.5G有线网卡,一路给读卡器,剩下两个做成USB-A口,输入侧支持PD快充受电,整板由Type-C单线完成数据和供电。如果你也想自己做拓展坞,或者想搞懂现在这些“PD快充拓展坞”到底是怎么把充电、数据传输、网卡塞进一个USB-C接口里的,这篇内容应该能给你省下不少弯路。

1. 项目整体设计与芯片选型逻辑

1.1 为什么核心Hub选择了VL822

拓展坞的核心是Hub控制器,它决定了你能扩展出几个口、每个口能跑多快。市面上常见的Hub芯片很多,比如GL3510、FE8.1、VL817,这些大多是USB 3.0/3.1方案,跑5Gbps或者更低的USB 2.0,用在普通USB Hub上够用,但要做“全功能”拓展坞就有点吃力了。

我最终选的是威锋电子的VL822,一颗USB 3.2 Gen2(10Gbps)4端口Hub控制器。选择它的理由有几个:

第一,10Gbps带宽是刚需。现在NVMe移动固态硬盘动辄读取800MB/s以上,如果Hub只有5Gbps,速度直接砍半,体验很难受。VL822的下行口支持USB 3.2 Gen2,理论带宽10Gbps,实际有效吞吐大约在1GB/s左右,至少能让移动硬盘跑出近满速。

第二,VL822本身带PD桥接能力。全功能Type-C拓展坞绕不开PD快充,VL822内部处理了CC逻辑的一部分,让上游PD协商和下游Sink/Source切换变得简洁。它支持PD 3.1的Pass-Through,也就是充电协议可以由外部的PD Controller处理,Hub本身不干扰协议协商,这在实际项目中非常重要。

第三,4个下行口的分配很灵活。我的设计里并没有把4个口全做成USB-A,而是拆成“2.5G网卡+读卡器+2个USB-A”。VL822的每个下行口可以独立配置,有的口直接拉出来用,有的口在PCB上和功能芯片直连,省去额外线缆和连接器。

第4点属于个人偏好:VL822是QFN封装,手工焊接难度比BGA小很多。我第一版板子用热风枪就能搞定,不需要回流焊机,对个人DIY非常友好。

1.2 RTL8156BG在2.5G网口里的角色

有线网口部分,我选了瑞昱的RTL8156BG。这颗芯片是USB 3.2 Gen1转2.5Gbps以太网的桥接控制器,内置PHY,支持10/100/1000/2500Mbps自适应。也就是说,它从USB总线拿数据,转换成以太网帧,通过内置的物理层PHY发送到网线上。

很多朋友会问:VL822是10Gbps的Hub,插一颗只有USB 3.2 Gen1(5Gbps)的网卡芯片,会不会浪费?其实不会。2.5Gbps以太网链路的实际流量远低于5Gbps USB链路,5Gbps的USB带宽容纳2.5G网卡绰绰有余。真正会卡脖子的是Hub的共享带宽设计——4个下行口共享10Gbps,如果同时跑满读卡器、网卡和USB-A设备,理论上会有争抢,但实际使用中网卡跑满也就300MB/s左右,读卡器跑满100MB/s,USB-A设备移动硬盘跑满800MB/s,合计大约1.2GB/s,接近但略超10Gbps总带宽。日常不会同时出现这种极限场景,所以这个方案是合理的。

RTL8156BG选型时还要注意它的供电和散热。这颗芯片满载时功耗不低,发热明显,如果布局太靠近VL822又不做散热处理,温度很容易到70°C以上。我在PCB上给RTL8156BG焊盘区域做了大面积铺铜和过孔阵列,背面再贴导热垫,后面实测温度稳定在60°C左右,算是在DIY条件下可接受的范围。

1.3 读卡器与PD快充方案怎么搭配

读卡器部分,我用的是创惟的GL3224,一颗USB 3.0的SD卡读卡器控制芯片,支持UHS-I和UHS-II。虽然很多市售拓展坞还在用USB 2.0的读卡器方案,也就是GL823K那一类,但既然主链路已经做到10Gbps,读卡器还跑USB 2.0就太浪费了。GL3224插上UHS-I的SD卡,实测读卡速度能到90MB/s以上,UHS-II卡则能跑更高,不过UHS-II卡价格太贵,我手头只有一张,测试一次就不再舍得用了。

PD快充部分,这是现在搜索“拓展坞”时躲不开的热词。所谓“PD快充拓展坞”,本质上是让拓展坞输入侧支持USB PD协议,从充电器那边取电,再通过Hub的Power Path给自身和外部设备供电。我的方案是输入端Type-C使用CH224K做PD受电协议芯片,通过CC线跟适配器协商电压,默认请求20V/5A(100W档位),之后经过DC-DC降压到5V和3.3V给系统供电。

很多新手会对“受电”和“供电”这两个概念搞混。拓展坞作为USB设备插入电脑时,它自己是Sink(受电端);但它作为一个“扩展出来的电源”给手机或其他设备充电时,它又变成了Source(供电端)。VL822内置的PD桥接可以协调这两种角色,不会出现“给电脑供电”和“给手机充电”冲突的情况。实际测试中,我用一个65W的PD适配器给拓展坞供电,同时插着2.5G网卡、读卡器和一个USB-A手机充电口,整板工作稳定,没有出现电压跌落或掉设备的现象。

2. 原理图设计与关键供电链路

2.1 从Type-C输入到多路电源轨的供电拓扑

这块板子的供电链路是设计里最容易翻车的地方,没有之一。我先画了一张电源树,把所有用电端的电流需求先估算出来,再反推输入功率:

  • VL822 Hub控制器:约1.0W
  • RTL8156BG网卡芯片:约1.5~2.0W
  • GL3224读卡器芯片:约0.3~0.5W
  • USB-A口外接设备(假设给手机充电):约5W(5V/1A)

合计峰值功耗大约8W左右。这是“全接口满载”的情况,实际使用中很少发生,但设计冗余必须按最坏情况来算。如果输入端直接从电脑USB-C取电,一般只能拿到5V/1.5A也就是7.5W,勉强够用但余量不足。所以我的方案是输入端接PD适配器取20V,之后用一颗同步Buck转换器(我用了TI的TPS54531)降到5V,5V再通过LDO降压到3.3V,给Hub、网卡、读卡器的主电源域。

这里有一个很关键的设计选择:为什么不用5V直接给全板供电,而是要先诱骗20V再降压?因为Type-C默认的5V供电能力有限,能提供的电流取决于Rp电阻的档位,普通电脑的Type-C口默认5V/0.5A到5V/3A不等,带不动“网卡+读卡器+外设”的组合。PD协商到20V之后,电压高了,相同功率下电流就小很多,再从20V降压到5V,能够从适配器获取更高的总功率,这才是“PD快充拓展坞”的底层逻辑。

实际计算一下:如果整板峰值功耗是8W,适配器输出20V时电流只需要0.4A,即使Buck转换器效率只有85%,输入电流也就0.47A,非常轻松。而如果只靠5V输入,8W就需要1.6A电流,很多电脑USB口根本给不了这么高。这也是为什么现在的拓展坞动不动就“要插PD电源”的原因。

供电链路上我还加了防倒灌设计。CH224K完成PD协商后,VBUS从适配器进入板子,如果适配器突然拔掉,VBUS电压跌落,可能反向倒灌到下游芯片。我加了一颗P-MOS管和理想二极管控制器做防倒灌,原理类似一个单向阀:正常工作时低导通压降,反向时立刻关断。这个细节在成品方案里不一定看得到,但在自研板子上非常重要,能省很多莫名其妙的“掉电损坏”问题。

2.2 USB 3.2 Gen2信号链路的等长与阻抗控制

USB 3.2 Gen2跑10Gbps,信号完整性就不再是“连上就完事”的程度。这块板子我用了4层板,叠层顺序是:顶层信号、第二层地、第三层电源、底层信号。10Gbps的差分线走在顶层,参考第二层完整地平面,确保回流路径干净。

差分阻抗要求是90Ω±10%。在常规板材(FR4,介电常数4.2~4.6)和1oz铜箔条件下,我通过叠层计算工具算出差分线宽约0.35mm、线间距约0.15mm,这是针对我的板厚和介质厚度得出的经验值。不同板厂、不同叠层参数会有差异,建议打样前用Saturn PCB Toolkit这类工具再算一遍,不要照抄参数。

等长控制是另一个重点。USB 3.2 Gen2的TX/RX差分对,对内等长公差控制在5mil以内,对间总长差控制在150mil以内。这些长度差会影响时序预算,一旦偏差太大,轻则降速到5Gbps,重则直接枚举失败。我在走线时先把VL822到各个下行口的路径算好,再手动绕线补齐长度,绕线的地方注意不要出现太尖锐的直角,用45°折线或圆弧,减少阻抗突变。

Type-C接口的CC引脚配置也是容易出错的地方。拓展坞的上行口(连接电脑的口)作为UFP(受电端),CC1/CC2上需要接5.1kΩ下拉电阻到地;下行口(对外扩展的口)作为DFP(供电端),CC1/CC2需要接Rp上拉电阻(具体阻值取决于供电能力档位)。VL822内部有一部分CC逻辑,但外部电阻我仍然保留,确保在没有PD协商的情况下也能正确识别方向。

2.3 PCB布局布线的几个关键实践

PCB布局如果只是“把芯片摆上去然后连线”,后面调试会非常痛苦。我在布局阶段给自己定了几条死规矩:

第一,晶振必须靠近芯片摆放。VL822和RTL8156BG各有一颗25MHz晶振,晶振离芯片引脚越近越好,走线尽量短,且晶振下方铺地并打孔,减少辐射干扰。如果晶振离得太远,不仅时钟信号容易变形,还可能成为EMI辐射源,干扰旁边的高频差分线。

第二,电源走线宽度要足够。VL822、RTL8156BG和GL3224的3.3V主电源,我用的是30mil以上铜宽,走线短而粗。QFN封装的散热焊盘底部过孔阵列是必须的,我放了9个0.3mm过孔,让热量从顶层传到背面的铺铜区。RTL8156BG底部的散热焊盘同样是9孔阵列,背面贴了导热垫和屏蔽铜箔。

第三,TVS防静电保护靠近连接器摆放。Type-C连接器和USB-A连接器是外部接口,人手插拔容易带静电,我在每个连接器的信号引脚旁边放了TPD4E05U06之类的TVS阵列,夹在连接器和芯片之间,位置离连接器越近越好。这样静电放电时,能量先被TVS泄放到地,而不是直接灌进芯片引脚。

第四,RJ45网口和读卡器卡座放在板子边缘。这两个是需要接触外部线缆/卡片的部件,放在边缘方便用户插拔,同时RJ45选的是带内置变压器的一体式座子,信号直接从RTL8156BG差分走线到座子即可,不用外接网络变压器,省了布局焦虑。

3. 打样、焊接与固件验证

3.1 打样前的DFM检查

原理图和PCB画完之后,我并没有急着下单打样,而是先做了一遍DFM(可制造性设计)检查。个人DIY最怕的就是画完板子高兴没两分钟,生产回来发现焊盘做小了、丝印盖住引脚、孔径不匹配。

我用的KiCad 7,先跑一遍ERC(电气规则检查)和DRC(设计规则检查)。ERC检查有没有悬空引脚、短路、电源和地接反,DRC检查走线间距和过孔尺寸是否满足板厂工艺。这些检查不能替代人工审查,因为软件不懂“这个引脚是模拟地不能和数字地直接打通”这类语义,最后还是得自己逐个过一遍。

板厂参数方面,我选了深色阻焊、沉金工艺。沉金的好处是表面平整、氧化少、适合细间距QFN焊接。由于10Gbps差分线走线较宽,我板厂要求最小线宽线距6/6mil、最小孔径0.2mm,这些参数在常规4层板工艺里都算轻松,不会额外加钱。拼板我做了5片小板,淘宝上找的珠海打样厂,大约40元包邮,性价比很高。

钢网开孔是我这次比较注意的一个细节。QFN封装引脚间距0.5mm,如果钢网开孔太大,锡膏一加热就容易连锡形成桥接。我在设计钢网文件时,把QFN引脚的开孔面积缩小了10%到20%,尤其是VL822这种引脚密集的芯片。回流焊后观察焊点,没有出现桥连,虚焊也几乎没有,这个经验强烈建议记下来。

3.2 焊接顺序和上电调试步骤

焊接顺序我不会一上来就全贴,而是分阶段焊接、分阶段测试。这个习惯救了我好几次,因为一旦电路有问题,你可以快速定位是电源坏了还是逻辑坏了,不用在密密麻麻的板子上四处测。

第一步,只焊电源部分。先焊TPS54531 Buck电路、CH224K和输入Type-C连接器,然后用可调直流电源从VBUS注入5V,测量5V输出是否正常、3.3V LDO是否出来。再换成从PD适配器输入,量一下CH224K能否成功诱骗到20V,Buck输出是否稳定在5V。这个阶段如果出问题,通常都是电容方向焊反、反馈电阻阻值不对,很好排查。

第二步,焊VL822和它的外围电路(25MHz晶振、配置电阻、EEPROM)。先不焊任何下行芯片,直接拿USB-C线连接电脑。正常的话,电脑会枚举出“VIA VL822 Hub”,设备管理器里能看到4个下行口在,即使没有接任何设备,他们也会作为空口出现。如果枚举失败,检查晶振是否起振——用示波器量VL822的25MHz引脚,正常会有稳定的正弦波。

第三步,焊RTL8156BG和RJ45座。插上网线,看网口灯是否点亮,然后打开电脑/路由器的网络状态,确认协商速率是2500Mbps还是1000Mbps。如果只能协商到1000Mbps,先别怀疑芯片,检查网线是不是只有Cat5e以上规格、对端设备是否支持2.5G,最后才怀疑芯片引脚虚焊。

第四步,焊GL3224和SD卡座。插入一张UHS-I SD卡,在Windows或者Linux下测试读卡速度。我手动测试用dd命令,实际跑出了86MB/s的读取速度,虽然没跑满UHS-I的104MB/s,但已经很接近了,说明PCB走线和供电没有明显瓶颈。

3.3 驱动与固件验证、跑通10Gbps链路

很多人以为“拓展坞插上就能用”,但USB 3.2 Gen2设备在有些系统上有驱动问题。VL822本身不需要烧写固件,默认即插即用。不过VL822支持通过外挂EEPROM定制端口属性,比如把某个下行口配置成“充电优先”还是“数据优先”。我第一版没有烧EEPROM,默认配置已经满足我的需求,所以没有深入折腾这部分。

RTL8156BG需要安装网卡驱动。Windows下建议直接去Realtek官网下载最新版2.5G网卡驱动,不要依赖Windows Update的旧版本;Linux下内核已经内置r8152驱动,插上就能识别,但是需要确认固件版本和ethtool支持的寄存器。

验证USB 3.2 Gen2链路是否真正跑到了10Gbps,我用了一个支持USB 3.2 Gen2的NVMe移动固态硬盘,接到拓展坞的USB-A口上跑CrystalDiskMark。实测顺序读取约980MB/s,写入约890MB/s,已经接近USB 3.2 Gen2的实际带宽天花板。如果这个数值掉到400MB/s左右,基本可以断定某个环节协商到了USB 3.0而非USB 3.1/3.2。

Linux下我最常用的验证命令组合是这样的:

# 查看USB总线上挂了哪些设备,确认设备协商速率 lsusb -t # 查看RTL8156GB网卡是否被识别、协商速率多少 ethtool eth0 # 用iperf3测试局域网2.5G带宽 iperf3 -c 192.168.1.10 -t 30 -P 4 # 测试SD卡读取速度 sudo dd if=/dev/sda of=/dev/null bs=1M count=1024

lsusb -t输出里会显示每个接口是5000M还是10000M,一眼就能看出USB链路协商速率,这是DIY调试时最直接的反馈方式。

4. 常见问题与排查技巧实录

4.1 调试中遇到的高频问题及对策

这一个多月调试下来,我踩了不少坑。整理成一张速查表,希望能帮后面做类似项目的朋友少走弯路。

症状可能原因快速排查方法
插上USB-C,电脑完全无反应CC下拉/上拉配置不对,VBUS开路,VL822供电异常测CC1/CC2对地电压,正常UFP侧应在1.6~2.0V左右;测VL822的3.3V、1.0V供电;用示波器测25MHz晶振是否起振
识别到Hub,但2.5G网卡不出现RTL8156BG复位脚状态不对,USB差分对接反,晶振虚焊用万用表测RTL8156BG复位引脚是否被拉高或拉低,量25MHz晶振引脚电压,检查RX/TX差分对是否交叉接反
网口协商只能到1000Mbps网线规格不够,对端设备不支持2.5G,RTL8156BG过热降速换Cat6以上网线;把网口接到另一台支持2.5G的设备上交叉验证;摸一下芯片表面温度,超过80°C要考虑散热
读卡器时而识别时而掉盘SD卡座虚焊,CLK线受干扰,SD供电不稳重新补焊卡座引脚,特别是CLK、CMD、DATA线;测SD卡槽3.3V供电有无波动;试试换一张不同的SD卡排除卡本身问题
插USB-A移动硬盘瞬间掉电重启输入功率不足,Buck过流保护,USB-A口没有限流换PD适配器到65W以上;给USB-A口加PPTC自恢复保险丝;检查Buck输出电容是否足够(建议至少22µF陶瓷+100µF钽)

第5个问题是我实际遇到最麻烦的。最初版USB-A口直接接Hub的VBUS,插上一个机械移动硬盘后,硬盘电机启动瞬间电流特别大,VBUS电压瞬间被拉低,整板掉电。后来加了PPTC限流和额外的输出电容才解决。如果你要做带USB-A大功率口的拓展坞,这个坑大概率会踩,建议提前设计好。

4.2 散热和长期稳定性的几个细节

拓展坞长时间使用时的稳定性,很多时候是散热决定的。VL822实测空载表面温度约45°C,插满设备满载后能到55°C左右;RTL8156BG跑2.5Gbps大流量时温度更高,我测过能到60~65°C。这个温度对芯片本身在规格范围内,但如果拿手摸,会感觉明显发烫,如果放在密闭外壳里,温度还会继续上升。

我做了三步散热优化:第一步,VL822和RTL8156BG的QFN散热焊盘下方阵列过孔,把热量导到背面铺铜区域;第二步,背面铺铜区域贴导热垫,让热量可以传导到顶部的铝合金外壳;第三步,给RTL8156BG的电源和地之间并联去耦电容时,刻意放了一组靠近芯片引脚的低ESR陶瓷电容,减少开关噪声引起的局部发热。这套组合下来,同样负载下芯片表面温度降了大约8~10°C。

另外一个容易忽略的稳定性因素:PD供电线缆。很多USB-C线内部只有USB 2.0的数据线,甚至没有CC线,插上之后虽然能充电,但PD协商会失败,拓展坞只能按5V/3A模式工作,带不动全部接口。我给这块板子配的线是支持E-Marker的5A全功能线,除了CC通信,还能走10Gbps数据和100W PD,整条链路才能跑满。建议自己DIY项目时,测试线材和最终使用线材都选支持USB 3.2和PD的认证线,不然问题会非常难查。

5. BOM成本与开源资源整理

5.1 物料清单与成本分析

很多朋友问我做这么一块拓展坞,打样到量产到底花了多少钱。我理了一份BOM,按单颗芯片价格估算,手工焊接,不含工具折旧:

物料型号/规格单颗参考价
Hub控制器VIA VL822(QFN封装)约45元
2.5G网卡芯片Realtek RTL8156BG约55元
读卡器芯片Genesys GL3224约15元
PD受电协议芯片WCH CH224K约3元
DC-DC BuckTI TPS54531约8元
LDO3.3V LDO AMS1117-3.3约1元
连接器Type-C母座×2、USB-A母座×2、RJ45一体式座、SD卡座约50元
被动器件晶振、电容、电阻、TVS、电感、MOS管等约60元
PCB4层板,10cm×10cm,5片约40元
外壳/散热3D打印外壳+导热垫约50元

合计大约330元左右。如果外壳用CNC铝合金,成本会再加100元左右,但质感好很多。对比市售同配置——支持2.5G网口、USB 3.2 Gen2、SD读卡器、PD快充的拓展坞,基本都在700元朝上,个别品牌甚至卖到1200元。DIY这台板子单从价格上看并不是很“划算”,因为时间成本和工具成本没算进去,但如果把“搞懂一套USB-C方案”当作收益,这笔账又非常值。

5.2 开源文件内容与后续扩展方向

这块板的原理图和PCB源文件用了KiCad 7设计,Gerber文件、BOM表、位号图我都打包发布到了开源硬件平台,许可证选的CERN-OHL-S。如果你也想做同款,直接下Gerber文件去打样就行,BOM里选同型号芯片,焊接调试按我前面写的步骤来,成功率应该很高。

文件包里我还放了一份调试注意事项的Markdown笔记,里面记录了我在各个测量点测到的电压、波形截图和踩坑记录。后续如果有朋友复现时遇到问题,欢迎按笔记里的排查顺序走一遍,大部分问题都能对号入座。

至于后续扩展方向,我给自己列了几个备选:第一个是加Type-C下行口,取代其中一路USB-A,这样能直接给手机、平板充电,使用场景更广;第二个是加DP Alt Mode视频输出,但这需要VL822以外增加一颗DP转接芯片,布局和供电都要重新评估;第三个是做成M.2 NVMe硬盘盒形态,把拓展坞、读卡器和移动硬盘合并成一个小盒子。每一个扩展方向的工作量都不小,但核心的VL822+RTL8156BG这套方案已经是经过验证的稳定底子,接下来就是在它的基础上继续搭积木。

最后再分享一个这个项目里我最大的体会。做硬件设计和写代码最大的不同是,代码错了可以随时改,重新编译运行只需要几秒钟,但硬件打样一次回来至少等三天,焊接调试又是两三天,一个错误可能就浪费一周。所以“先想清楚再动手”这句话,在硬件项目里不是空话,而是决定你进度快慢的核心。如果你也想复刻这块拓展坞,请一定在画PCB之前,把供电预算、信号完整性和元器件封装这三件事想透,再往前推进。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询