这些年折腾过不少Type-C扩展设备,一个很直接的感受是:市面上的扩展坞要么贵,要么阉割得厉害。你说笔记本就剩两三个Type-C口,一边要插NVMe硬盘盒跑数据,一边还想接2.5G有线网卡,结果一查,带2.5G网口的高速扩展坞动辄五六百起步,便宜的又全是USB 3.0 5Gbps的口,插上10Gbps硬盘盒直接限速到500MB/s,看着就憋屈。所以后来我在立创开源平台上传了一个基于VL822+RTL8156B的扩展盒设计,用一颗USB 3.2 Gen2 HUB控制器和一颗2.5G以太网控制器,把“高速USB扩展”和“有线网卡”整进一个盒子里:上行一个Type-C口搞定数据和供电,下行扩展出多个10Gbps USB口,其中一路固定接2.5G网卡。这篇就把整个硬件设计从头到尾掰开揉碎讲一遍,包括芯片选型、电路设计、电源架构、PCB布线和实测数据,适合准备自己画板子复刻、或者想搞明白扩展坞内部到底怎么回事的朋友。
1. 为什么自己画一个“10G HUB + 2.5G网卡”的扩展盒
先聊聊这个项目的出发点,不是单纯为了炫技,而是市面上确实没有一个产品形态能同时满足两个需求:USB口要够快、网口又要跑满2.5Gbps。
1.1 常见扩展坞的几个痛点
我以前买过好几个扩展坞,用下来的问题归纳起来就三类:
- 带宽被砍。很多标称USB 3.2的扩展坞,其实下行口全是Gen1 5Gbps,插上10Gbps的NVMe硬盘盒,跑分直接砍半。
- 网口和高速USB口互抢。部分扩展坞虽然带了2.5G网口,但网口占的是USB 3.0通道,HDD和网卡同时跑,总线带宽直接饱和,谁都不痛快。
- 供电拉胯。外接移动硬盘对5V电流很敏感,供电不足最容易出现盘符反复掉线,特别是在多口满载的时候。
我不想再为一个“还是个半成品”的扩展坞花冤枉钱了,于是决定自己动手。在立创开源平台上找了一圈相关方案,最后敲定了一个组合:VL822做USB 3.2 Gen2整体扩展,RTL8156B把其中一路转成2.5G以太网口。
1.2 这个扩展盒的核心规格
| 项目 | 规格 |
|---|---|
| 上行接口 | Type-C,USB 3.2 Gen2,10Gbps |
| 下行USB口 | 多个Type-A/Type-C,支持10Gbps |
| 网卡接口 | RJ45,2.5Gbps/1Gbps/100Mbps自适应 |
| 网卡芯片 | RTL8156B,USB 3.2 Gen1接口 |
| HUB芯片 | VL822,USB 3.2 Gen2 HUB控制器 |
| 供电方案 | Type-C PD诱骗20V输入+DC-DC降压(本文推荐方案) |
| PCB板层 | 4层/6层可选,本文按4层板讲解 |
注意一个容易误解的点:标题里的“10Gbps”指的是USB总线速率,不是网口速率。HUB扩展出来的USB口跑的是10Gbps,而网口本身是2.5Gbps。RTL8156B用USB 3.2 Gen1(5Gbps)总线绰绰有余,完全没必要占10Gbps的通道。
1.3 这张板子适合谁
对三类人最有用:
- 想深入了解USB HUB和USB网卡硬件设计的电子工程师;
- 手头有大量10Gbps外设、又一定要接有线网的笔记本用户;
- 想基于开源工程二次开发、做带网口的高速扩展坞产品的前期验证。
2. 双核心芯片选型:VL822与RTL8156B的分工和对比
选芯片是整个项目最关键的一步。为什么偏偏是这两个型号?我对比过好几颗同类芯片,下面把逻辑理清楚。
2.1 VL822为什么能做10Gbps HUB
VL822是威锋电子(VIA Labs)的USB 3.2 Gen2集线器控制器,内部集成了一个10Gbps的上行端口和多个下行端口。核心特性拆开看:
- 支持USB 3.2 Gen2:每个下行口都能跑到10Gbps,这是它区别于VL817这类Gen1 HUB的最大卖点。VL817只支持5Gbps,如果你的外设是高速NVMe硬盘盒,就会遇到上文提到的限速问题。
- 内置USB 2.0控制器:HUB会同时提供USB 2.0信号通路,兼容老设备和键盘鼠标,这部分和USB 3.2的高速信号是独立管理的。
- 支持多Transaction Translator(MTT):在USB 2.0设备并发场景下,MTT能明显降低延迟,多设备同时传输不会互相拖累。
- 支持下行端口电源控制:VL822有专门的GPIO可以控制下行VBUS的负载开关,这一点在电源设计里非常重要(第5章会细讲)。
从系统框图上看,VL822内部的MAC/PHY完成高速信号的重定时和转发,而外置的25MHz晶振提供参考时钟。它也更适合做“一拖多”的扩展架构,而不是简单的直通。
2.2 RTL8156B为什么是2.5G网卡首选
RTL8156B是瑞昱(Realtek)的USB 3.2 Gen1转2.5G以太网控制器,芯片内部集成了USB PHY和以太网PHY,外加MAC,所以外围电路很简洁。
对比一下瑞昱家族几颗常见USB网卡芯片:
| 芯片 | 网口速率 | USB接口规格 | 适用场景 |
|---|---|---|---|
| RTL8153 | 1Gbps | USB 3.2 Gen1 | 千兆网卡,经典老将 |
| RTL8156B | 2.5Gbps | USB 3.2 Gen1 | 2.5G网卡,主流性价比之选 |
| RTL8157 | 5Gbps | USB 3.2 Gen2 | 5G网卡,要求万兆NAS等极端场景 |
可以看出RTL8156B正好卡在一个甜点位置:速率够用(2.5G刚好是现在NAS和主流主板的标配),USB总线需求又不高,发热和成本都控制得不错。RTL8157虽然能跑到5Gbps,但需要占用USB 3.2 Gen2通道,HUB的带宽压力大得多,对整个PCB布置的要求也上一个台阶。
2.3 为什么不选雷电(Thunderbolt)方案
雷电扩展坞的体验确实好,但硬件设计门槛和成本都高:需要Intel/AMD的认证、需要额外的雷电控制器(比如JHL7440这类)、PCB层数和阻抗控制更严格,而且非雷电设备兼容性受限。这个项目的目标是“主流Type-C设备即插即用”,VL822+RTL8156B的组合能把BOM成本压到一个很舒服的范围,同时性能完全够日常使用。
3. VL822的HUB链路设计:高速USB端口扩展的细节
从这一章开始进入具体电路设计。先把VL822这一侧的模块拆解清楚:上行Type-C座子、下行USB口、时钟复位、以及和RTL8156B的连接方式。
3.1 硬件连接框图
用文字描述整体连接关系:
Type-C上行口 │ ├── CC逻辑(CC1/CC2、eMarker检测) │ └── USB 3.2 Gen2(SSTX/SSRX、D+/D-) │ VL822 HUB │ ┌──────┼──────┬─────────┐ │ │ │ │ Type-A口 Type-A口 Type-C口 RTL8156B网卡链路 10Gbps 10Gbps 10Gbps (USB3.x上行+MDI→RJ45)3.2 上行Type-C座子设计:CC电阻与eMarker
上行口是整个HUB的“入口”,它要同时承担数据和供电两条路径。设计上有两个重点:
CC引脚的上下拉配置
HUB是一个device(设备),所以上行口的CC1/CC2需要对地接5.1kΩ下拉电阻,告知主机这是一个被连接的外设。很多人第一次画Type-C电路容易在这里翻车——如果CC上下拉配错,主机根本不会给VBUS供电,更别提枚举了。
是否需要eMarker芯片
eMarker主要用于线缆侧,用来告诉设备线缆能承受的电流等级(3A还是5A)。我们的扩展盒是被动设备,如果设计目标是支持PD 100W输入(20V/5A),严谨的做法是让上行口支持eMarker的读取,或者用一颗支持PD协商的芯片(比如CH224)主动去“诱骗”适配器输出20V。这个后面电源章节会展开。
VBUS检测
上行口的VBUS在适配器插入后才会有电,VL822需要感知到VBUS存在才能开始正常枚举。一般做法是把上行VBUS分压后接到VL822的某个GPIO或专用检测脚,配合上电时序使用。
3.3 下行端口电路设计
下行口的设计直接决定了整机稳定性和外设兼容性:
- 每个下行口必须有独立的负载开关。负载开关的作用是控制VBUS的输出和限流保护,如果直接用导线把5V接出去,一旦外设短路,整板电压都会被拉垮,甚至烧毁HUB芯片。
- USB 3.2 Gen2信号线的ESD保护必须选对。这一点在排错章节会重点展开,核心原则是:ESD保护器件的寄生电容要小于0.5pF,最好0.3pF左右,否则10Gbps信号的眼图会被“压扁”。
- USB 2.0 D+/D-的走线:VL822的USB 2.0信号要连接到下行口,这部分虽然是低速信号,但还是要遵循“与高速差分对保持距离”的原则,避免串扰。
3.4 时钟、复位与配置
VL822需要一个25MHz晶振作为参考时钟。晶振的选择看似简单,但要注意:
- 晶振的负载电容要匹配。比如规格书上写12pF负载电容,那外部的两个匹配电容就要根据PCB寄生电容计算,不要直接照抄参考设计。
- 晶振尽量靠近芯片时钟脚,走线要短,而且时钟区域下方不要走其他高速信号。
VL822的复位脚一般接一个RC延时电路,保证上电后电源稳定了再释放复位。另外VL822的一些引脚可以通过外部上下拉电阻来配置端口策略,比如是否开启CDP充电下行端口、端口电源默认是否开启等。这部分Pin Strapping配置最好在画板之前就确定好,不然后期飞线改起来很痛苦。
3.5 与RTL8156B的连接
RTL8156B占用VL822的一个下行端口:USB 3.0的SSTX/SSRX差分对、USB 2.0的D+/D-、以及VBUS/地都要接上。建议把网卡放在靠近VL822的位置,但不能太近,避免网卡发热影响到HUB芯片,这个平衡在PCB章节会细说。
4. RTL8156B网卡链路:从USB到RJ45的硬件落地
接下来单独看网卡这一路。RTL8156B虽然外围简洁,但该注意的细节一样都不少,尤其是网络变压器的选型、MAC地址的烧录和MDI差分对的布线。
4.1 RTL8156B的外围电路组成
RTL8156B的电源拓扑相对简单,芯片内部集成了多路LDO/DC-DC电源转换单元,外部只需要根据数据手册在对应的电源引脚旁边放置足够的去耦电容。这里列出几个关键点:
- 25MHz晶振:和VL822类似,需要一颗25MHz晶振或者来自外部时钟源的25MHz参考时钟。如果板上两个芯片挨得近,也可以考虑用一个有源晶振输出两路时钟(具体看芯片时钟输入要求)。
- 去耦电容千万不能省:USB PHY和以太网PHY在瞬间切换时电流变化很快,每个电源引脚旁边的0.1μF电容都要就近放置,另外每颗芯片还需要一颗4.7μF或10μF的体电容。
- USB上行连接:RTL8156B的USB 3.0接口由VL822下行口提供,所以RTL8156B的USB 3.0差分对要和VL822对应引脚的差分对连接,中间走线保持差分阻抗90Ω,这个在第6章展开。
4.2 网络变压器与RJ45
网络变压器(Magnetics)的作用是隔离和共模抑制,2.5G以太网比千兆以太网对变压器品质更敏感,不能随便拿一个千兆变压器就往上怼,要选择明确支持2.5GBASE-T的信号变压器模块。
常见两种做法:
- 集成变压器RJ45座:比如带网络变压器的RJ45连接器,优点是省PCB面积、layout简单、一致性好。缺点是价格稍高,而且接口位置被固定在板边。
- 分立变压器+RJ45座:变压器是独立器件,RJ45可以自由摆放。这种方式灵活,但对PCB布线要求更高,变压器的初级和次级之间的隔离带、中心抽头电容位置都要特别注意。
我在这块板子上用的是带集成变压器RJ45的方案。做分立方案时,中心抽头的处理容易搞错——有些变压器的中心抽头要接电源(比如3.3V)并通过电容接地,有些则直接串电容接地,必须以厂家手册为准。
4.3 MAC地址、LED与EEPROM配置
RTL8156B一般用一颗小容量EEPROM(常见的如93C46系列的串行EEPROM)来存储MAC地址和配置信息。量产阶段可以通过瑞昱提供的烧录工具把MAC地址写进去,以保证出厂地址唯一。如果完全不接EEPROM,芯片通常会使用内置的默认MAC地址,但多片板卡会出现MAC相同的问题,这在局域网里会导致IP冲突。
LED指示部分,RTL8156B通常提供Link/Active两个LED引脚,可以配置为不同的显示模式(如链接常亮、传输闪烁)。我一般预留了LED串联限流电阻的焊位,方便后期调整亮度。
5. 电源架构与供电保护:多路输出下的稳定性设计
如果说信号链路决定了“快不快”,电源链路就决定了“稳不稳”。USB扩展盒的供电设计,核心矛盾在于:一个上行Type-C口既要传数据,又要给多个下行口和网卡供电,电流需求常常超出USB标准供电能力。
5.1 输入电源方案选择
这里比较过三种方案:
- 方案A:仅靠Type-C 5V供电。USB Type-C标准默认5V/3A,也就是最大15W。VL822加4个外设和网卡,满载功耗很容易超过15W。尤其是外接NVMe SSD硬盘盒,瞬间启动电流很大,5V直接被拉垮,设备就会掉盘。不推荐。
- 方案B:外接DC电源适配器。比如DC 12V输入,再降压成5V和3.3V。优点是简单,缺点是扩展盒要额外带一个电源,破坏了“只插一根Type-C线”的体验。
- 方案C:USB PD诱骗供电。通过上行Type-C口和PD适配器协商,让适配器输出20V/3A甚至20V/5A,再用DC-DC降压到5V和3.3V。这个方案既保留单线连接,又能提供充足功率,推荐。
以20V/3A(60W)为例,整机供电能力远大于实际需求,留足了余量。当然,PD诱骗需要一颗PD快充协议芯片(如CH224K),它通过CC线路与适配器协商电压后拉高VBUS。
5.2 电压轨的设计
整板通常需要几路电源:
| 电压轨 | 主要负载 | 说明 |
|---|---|---|
| 5V主轨 | VL822 VBUS、下行口VBUS、RTL8156B USB接口 | 由PD输入降压而来 |
| 3.3V | VL822 IO、LED、EEPROM等 | 可由5V LDO降压或DC-DC |
| 1.05V/1.2V等 | RTL8156B内核(视具体供电配置) | 一般由芯片内部或外部LDO提供 |
5.3 负载开关与过流保护选型
每个下行USB口的VBUS都建议经过一颗限流负载开关。负载开关的核心参数:
- 导通电阻:越低越好,大电流下压降小;
- 限流精度:如1.5A限流,要保证精度不低于±20%;
- 软启动时间:避免外设大电容上电瞬间拉低5V主轨。
具体型号可以参考RT9742、SGM2551等,这类芯片通常还带输入欠压锁定(UVLO),电源不稳时自动关闭输出。比直接用自恢复保险丝靠谱得多,因为保险丝的响应速度太慢,高速设备启动瞬间会产生很大的di/dt,保险丝来不及动作。
5.4 电源时序
很多复位问题、掉盘问题的根源其实是电源时序不对。推荐的上电顺序是:
- PD诱骗协商成功,20V建立;
- DC-DC输出5V稳定;
- 5V经过LDO输出3.3V;
- VL822复位释放;
- 延时几十毫秒后,再逐路使能下行口的负载开关。
VL822的GPIO可以用来控制负载开关的使能引脚,或用RC延时电路实现简单的顺序控制。这样能保证USB设备在VBUS稳定后才开始枚举,掉盘概率大幅降低。
6. PCB布局与高速信号完整性:10Gbps和2.5Gbps的走线纪律
硬件设计到了PCB这一步才是真功夫。10Gbps的高速差分信号和2.5Gbps的MDI信号都有极强的“物理敏感性”,任何一点布局上的疏忽都会在实测阶段暴雷。
6.1 层叠结构与阻抗控制
推荐4层板,叠层可以这样安排:
- 顶层:高速信号+器件
- 第二层:完整地平面GND
- 第三层:电源平面
- 底层:低速信号+少量器件
4层板最核心的优势是有一个完整的参考地平面,这是高速信号回流的关键路径。如果画两层板,10Gbps信号的回流路径很容易被破坏,最后用起来疯狂降速或掉包。
阻抗上,USB 3.2 Gen2差分阻抗控制在90Ω±10%,以太网MDI差分阻抗控制在100Ω±10%。板厂一般默认支持这些阻抗要求,只需要在发板前和板厂确认叠层参数和阻抗匹配。
6.2 USB 3.2 Gen2差分对的走线要求
10Gbps差分对的布线纪律比Gen1 5Gbps严格得多:
- 对内等长:同一对差分线(SSTX+和SSTX-)的长度差最好控制在5mil以内;
- 组间等长:SSTX对和SSRX对的长度差控制在50mil以内即可,不必追求绝对相等;
- 过孔尽量少:每对线过一个过孔就会有阻抗不连续点,换层时在旁边加回流地过孔;
- 远离干扰源:晶振、DC-DC电感、时钟线都是敏感器件,差分线要保持足够远的间距;
- 避免跨分割:这是老生常谈,但也是最容易犯的错,底层一个地平面被走线切开,上面的高速信号回流就绕路了。
6.3 MDI差分对的走线要求
MDI差分对的走线规则和USB类似,但要注意网络变压器两侧的分区:
- 变压器放在RJ45附近,变压器到RJ45之间的走线属于“线缆侧”,不能跨越其他信号区域;
- 变压器到RTL8156B之间的走线属于“芯片侧”,可以与USB信号有一定交叉,但最好也别平行走太长距离;
- 中心抽头电容要就近放置,保证共模噪声的回流路径最短。
6.4 散热设计
RTL8156B跑满2.5G的时候,芯片温度不低,尤其是放在密闭金属盒里。我的做法是:
- 芯片底部铺大铜皮,并打散热过孔到背面;
- 避免将RTL8156B与VL822紧贴在一起,两个热源要错开至少5mm以上;
- 如果机壳是金属的,芯片背面可以贴导热垫与壳体连接,效果立竿见影。
7. 量产前最容易被忽略的问题:固件、兼容性与实测数据
画完板子只是第一步。我在这块板上花了不少时间在固件配置和实测上,这部分的经验和数据对大家复刻很有参考价值。
7.1 VL822的固件配置
VL822除了硬件引脚配置外,部分功能还需要固件支持。威锋官方在Windows下提供了一个HUB控制器工具,可以读取和更新VL822的固件版本、配置端口策略。
我遇到过一个问题:默认固件下,某些下行口在对外设充电时不会自动开启CDP模式,导致手机接上去只充电不识别数据。后来在固件配置里手动开启了对应端口的充电策略,才恢复正常。所以如果你的板子做出来后,某些下行口行为不符合预期,先去查固件配置,不要急着怀疑硬件。
7.2 RTL8156B的驱动和MAC地址
Windows 10/11和macOS对RTL8156B都有内置驱动或官方驱动包,网卡插上就能识别。Linux下使用的是内核的r8152驱动模块,主流发行版的内核都已经包含。
MAC地址这块,我强烈建议在工厂贴片时就把EEPROM的MAC烧录好,不然多块板子一起联网测试时会遇到地址冲突。烧录工具有瑞昱官方提供的Windows程序,也可以用Linux下的相关脚本直接操作EEPROM和寄存器。
7.3 实际测试数据
实测环境:i7笔记本的雷电/USB 3.2 Gen2 Type-C口,PD适配器供电。
USB口测速(接入USB 3.2 Gen2 NVMe硬盘盒):
| 测试项目 | 读写速度 |
|---|---|
| 顺序读取 | 850-950 MB/s |
| 顺序写入 | 800-900 MB/s |
| 4K随机读取 | 约40-60 MB/s |
这个成绩达到了Gen2设备该有的水平,基本没有受HUB转发影响。
网卡测速(使用iperf3打流):
| 测试方向 | 吞吐 |
|---|---|
| 单向 TX | 约2.35 Gbps |
| 单向 RX | 约2.38 Gbps |
| 双向同时 | 合计约2.45 Gbps |
2.5Gbps网卡跑到2.3-2.4Gbps是正常水平,毕竟还有协议开销。如果低于2Gbps,建议检查网线是否为Cat5e以上,以及交换机端口协商状态。
多口并发测试:一个NVMe硬盘盒持续读写的同时,网卡满速下载,整机供电稳定,没有出现掉盘或断网。这也是之前选PD 20V供电方案换来的结果,如果只靠5V/3A,这个场景大概率会翻车。
8. 复盘:几个让我返工的坑
这章分享几个真实踩过的坑,都是普通参考设计里不会写的东西,希望对复刻的朋友有直接帮助。
8.1 坑一:CC下拉电阻配错导致速率降级
第一版样板回来后,上行Type-C口插电脑,系统只识别出USB 2.0设备,完全没有USB 3.0降级提示以外的任何反应。查了一圈,问题出在上行口CC1/CC2的下拉电阻上——我用了两个独立电阻分别下拉,但Type-C口在正反插时CC1和CC2的角色会互换,两个都接下拉是对的,但是电阻值配错成了100kΩ,导致主机检测不到正确的连接状态,只以最低功耗模式供电。
排查方法:用USB协议分析仪看枚举过程中的CC状态,或者直接用万用表量CC引脚对地电阻。换成标准的5.1kΩ下拉后,速率恢复成10Gbps。
8.2 坑二:ESD保护器件寄生电容过大
这坑比较隐蔽。为了省事,我最初在10Gbps差分线上用了一颗常见ESD保护阵列,规格书标称电容1.2pF。结果就是USB 3.2 Gen2无法协商成功,主机最多识别为Gen1 5Gbps,甚至直接不识别。
原理很简单:10Gbps信号的上升沿很快,线上的寄生电容会严重劣化信号完整性。1.2pF对Gen1来说也许还能接受,但Gen2就非常勉强。后来换成了寄生电容约0.3pF的TVS阵列,问题立刻消失。选高速ESD器件时,先看寄生电容,再看耐压,这个顺序不能反。
8.3 坑三:PCB底层走线破坏了参考平面
有一版测试中,HUB下行口接移动硬盘时偶发性掉盘,用示波器看波形,SS信号眼图的裕量很低。最后定位到问题出在PCB底层:为了走线方便,我在底层的高速差分区域下面走了几根电源线,直接把参考地平面撕裂了。
解决方法是调整Layout,把底层那几根线挪走,同时在差分信号换层的位置加回流地过孔。改完后眼图明显变好,掉盘问题再也没出现。高速信号区域下方必须是完整的地平面,这是不能妥协的红线。
8.4 坑四:负载开关使能时序不对导致枚举失败
最初的设计里,下行口的VBUS负载开关直接用VL822的GPIO控制,上电瞬间GPIO还没有初始化,负载开关处于不确定状态,导致某些移动硬盘无法枚举。后来在GPIO和负载开关使能脚之间加了一个RC延时,确保5V完全建立后再打开VBUS,这才稳定。简单说,下行口的电源要“晚于”HUB初始化,不能同步更不能超前。
8.5 复刻建议
可以直接去立创开源平台找这个工程文件,但要注意两点:一是留意原作者的版本号,看PCB有没有改版或已知问题修正;二是发板前确认板厂提供的叠层参数,特别是差分阻抗控制能力。如果只改了芯片型号或布局,最好先小批量打样几片验证,别急着一次做几十片。
这个板子目前已经在我主力机上稳定跑了一个多月,日常使用就是一块高速硬盘扩展坞加一块2.5G有线网卡的合体,个人来说是比较满意的。后续我还打算把它改成带独立DC口和金属外壳的量产形态,再优化一下散热结构和PD协商逻辑。如果你也正在做类似的高速HUB或Type-C扩展设备,欢迎直接参考这套方案,少走点弯路。