ARTICLE DETAIL

资讯详情

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

自研Type-C扩展坞:VL822+RTL8156B实现10Gbps USB与2.5G网卡硬件设计全解析

自研Type-C扩展坞:VL822+RTL8156B实现10Gbps USB与2.5G网卡硬件设计全解析 这些年折腾过不少Type-C扩展设备一个很直接的感受是市面上的扩展坞要么贵要么阉割得厉害。你说笔记本就剩两三个Type-C口一边要插NVMe硬盘盒跑数据一边还想接2.5G有线网卡结果一查带2.5G网口的高速扩展坞动辄五六百起步便宜的又全是USB 3.0 5Gbps的口插上10Gbps硬盘盒直接限速到500MB/s看着就憋屈。所以后来我在立创开源平台上传了一个基于VL822RTL8156B的扩展盒设计用一颗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-CUSB 3.2 Gen210Gbps下行USB口多个Type-A/Type-C支持10Gbps网卡接口RJ452.5Gbps/1Gbps/100Mbps自适应网卡芯片RTL8156BUSB 3.2 Gen1接口HUB芯片VL822USB 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 Gen15Gbps总线绰绰有余完全没必要占10Gbps的通道。1.3 这张板子适合谁对三类人最有用想深入了解USB HUB和USB网卡硬件设计的电子工程师手头有大量10Gbps外设、又一定要接有线网的笔记本用户想基于开源工程二次开发、做带网口的高速扩展坞产品的前期验证。2. 双核心芯片选型VL822与RTL8156B的分工和对比选芯片是整个项目最关键的一步。为什么偏偏是这两个型号我对比过好几颗同类芯片下面把逻辑理清楚。2.1 VL822为什么能做10Gbps HUBVL822是威锋电子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 TranslatorMTT在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接口规格适用场景RTL81531GbpsUSB 3.2 Gen1千兆网卡经典老将RTL8156B2.5GbpsUSB 3.2 Gen12.5G网卡主流性价比之选RTL81575GbpsUSB 3.2 Gen25G网卡要求万兆NAS等极端场景可以看出RTL8156B正好卡在一个甜点位置速率够用2.5G刚好是现在NAS和主流主板的标配USB总线需求又不高发热和成本都控制得不错。RTL8157虽然能跑到5Gbps但需要占用USB 3.2 Gen2通道HUB的带宽压力大得多对整个PCB布置的要求也上一个台阶。2.3 为什么不选雷电Thunderbolt方案雷电扩展坞的体验确实好但硬件设计门槛和成本都高需要Intel/AMD的认证、需要额外的雷电控制器比如JHL7440这类、PCB层数和阻抗控制更严格而且非雷电设备兼容性受限。这个项目的目标是“主流Type-C设备即插即用”VL822RTL8156B的组合能把BOM成本压到一个很舒服的范围同时性能完全够日常使用。3. VL822的HUB链路设计高速USB端口扩展的细节从这一章开始进入具体电路设计。先把VL822这一侧的模块拆解清楚上行Type-C座子、下行USB口、时钟复位、以及和RTL8156B的连接方式。3.1 硬件连接框图用文字描述整体连接关系Type-C上行口 │ ├── CC逻辑CC1/CC2、eMarker检测 │ └── USB 3.2 Gen2SSTX/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线”的体验。方案CUSB PD诱骗供电。通过上行Type-C口和PD适配器协商让适配器输出20V/3A甚至20V/5A再用DC-DC降压到5V和3.3V。这个方案既保留单线连接又能提供充足功率推荐。以20V/3A60W为例整机供电能力远大于实际需求留足了余量。当然PD诱骗需要一颗PD快充协议芯片如CH224K它通过CC线路与适配器协商电压后拉高VBUS。5.2 电压轨的设计整板通常需要几路电源电压轨主要负载说明5V主轨VL822 VBUS、下行口VBUS、RTL8156B USB接口由PD输入降压而来3.3VVL822 IO、LED、EEPROM等可由5V LDO降压或DC-DC1.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.3VVL822复位释放延时几十毫秒后再逐路使能下行口的负载开关。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/s4K随机读取约40-60 MB/s这个成绩达到了Gen2设备该有的水平基本没有受HUB转发影响。网卡测速使用iperf3打流测试方向吞吐单向 TX约2.35 Gbps单向 RX约2.38 Gbps双向同时合计约2.45 Gbps2.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扩展设备欢迎直接参考这套方案少走点弯路。
返回列表