ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

手搓VL822+RTL8156BG拓展坞:10Gbps+2.5G网口+PD快充实战

手搓VL822+RTL8156BG拓展坞:10Gbps+2.5G网口+PD快充实战 去年年底我给自己挖了个大坑笔记本只有两个USB-C口一个要接显示器一个要插移动硬盘网口还得靠转接桌面乱得跟蜘蛛网似的。市面上的拓展坞看了好几款能带2.5G网口的要么贵得离谱要么接口分配不合理——4个USB-A口全是USB 2.0读卡器速度拉胯PD快充更是虚标。于是我一拍桌子干脆自己画一块基于VL822RTL8156BG的10Gbps USB-C拓展坞集成2.5G网口、读卡器和PD快充从芯片选型到PCB打样全部自己来。这篇文章就是整个项目的完整复盘。先说结论这块板子最终实现了USB 3.2 Gen210Gbps的主链路扩展出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 Gen210Gbps4端口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 Gen15Gbps的网卡芯片会不会浪费其实不会。2.5Gbps以太网链路的实际流量远低于5Gbps USB链路5Gbps的USB带宽容纳2.5G网卡绰绰有余。真正会卡脖子的是Hub的共享带宽设计——4个下行口共享10Gbps如果同时跑满读卡器、网卡和USB-A设备理论上会有争抢但实际使用中网卡跑满也就300MB/s左右读卡器跑满100MB/sUSB-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/5A100W档位之后经过DC-DC降压到5V和3.3V给系统供电。很多新手会对“受电”和“供电”这两个概念搞混。拓展坞作为USB设备插入电脑时它自己是Sink受电端但它作为一个“扩展出来的电源”给手机或其他设备充电时它又变成了Source供电端。VL822内置的PD桥接可以协调这两种角色不会出现“给电脑供电”和“给手机充电”冲突的情况。实际测试中我用一个65W的PD适配器给拓展坞供电同时插着2.5G网卡、读卡器和一个USB-A手机充电口整板工作稳定没有出现电压跌落或掉设备的现象。2. 原理图设计与关键供电链路2.1 从Type-C输入到多路电源轨的供电拓扑这块板子的供电链路是设计里最容易翻车的地方没有之一。我先画了一张电源树把所有用电端的电流需求先估算出来再反推输入功率VL822 Hub控制器约1.0WRTL8156BG网卡芯片约1.5~2.0WGL3224读卡器芯片约0.3~0.5WUSB-A口外接设备假设给手机充电约5W5V/1A合计峰值功耗大约8W左右。这是“全接口满载”的情况实际使用中很少发生但设计冗余必须按最坏情况来算。如果输入端直接从电脑USB-C取电一般只能拿到5V/1.5A也就是7.5W勉强够用但余量不足。所以我的方案是输入端接PD适配器取20V之后用一颗同步Buck转换器我用了TI的TPS54531降到5V5V再通过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能否成功诱骗到20VBuck输出是否稳定在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 bs1M count1024lsusb -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.5GRTL8156BG过热降速换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 VL822QFN封装约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×10cm5片约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硬盘盒形态把拓展坞、读卡器和移动硬盘合并成一个小盒子。每一个扩展方向的工作量都不小但核心的VL822RTL8156BG这套方案已经是经过验证的稳定底子接下来就是在它的基础上继续搭积木。最后再分享一个这个项目里我最大的体会。做硬件设计和写代码最大的不同是代码错了可以随时改重新编译运行只需要几秒钟但硬件打样一次回来至少等三天焊接调试又是两三天一个错误可能就浪费一周。所以“先想清楚再动手”这句话在硬件项目里不是空话而是决定你进度快慢的核心。如果你也想复刻这块拓展坞请一定在画PCB之前把供电预算、信号完整性和元器件封装这三件事想透再往前推进。
返回列表