USB 2.0 扩展坞这东西,看起来简单,真动手做的时候才发现坑不少。市面上成品从十几块到上百块都有,但内部用的什么主控、供电怎么处理、晶振走线有没有讲究,基本没人告诉你。我这次用 SL2.1A 这颗主控芯片从头搭了一个一拖四的 USB 2.0 扩展坞,从选型、画板、打样到实测跑数据,完整走了一遍。SL2.1A 是一颗四端口 USB 2.0 HUB 主控,QFN 封装,外围器件少,支持自供电和总线供电两种模式,很适合个人小批量自制。这篇文章适合有基本焊接能力、想搞清楚扩展坞内部到底怎么回事的硬件爱好者,也适合想拿它当练手项目的新手。我会把选型逻辑、电路设计要点、PCB 布局的坑、以及实测带宽数据全部摊开讲,你照着做基本能少走八成弯路。
1. 为什么选 SL2.1A 而不是拆一个成品板
1.1 成品扩展坞拆开之后我看到了什么
手头正好有几个不同价位的成品 USB 2.0 扩展坞,我全拆了对比。十几块的那种,里面通常是一颗打磨掉丝印的 COB 封装芯片,直接黑胶点在板子上,连型号都查不到。稍微贵一点的用 GL850G 或者 FE1.1s,这两颗都是经典的四口 HUB 主控,资料多、便宜、好买。但问题在于,成品板为了压成本,供电部分往往极其敷衍——有的直接用一根细走线从上行口取 5V 分给四个下行口,连个像样的滤波电容都不舍得多放。你插一个移动硬盘上去,电压直接掉到 4.5V 以下,硬盘反复重启。
我拆的那几个板子还有一个共性问题:晶振走线又长又细,有的甚至从晶振到芯片引脚绕了半个板子。USB 2.0 对时钟精度的要求是 ±500ppm,晶振走线太长会引入寄生电容和干扰,轻则枚举不稳定,重则直接不识别。这些细节成品厂不会告诉你,但你自己做的时候如果也这么干,就会遇到一模一样的问题。
1.2 SL2.1A 的核心参数与选型理由
SL2.1A 是 CoreChips(和芯)出的一颗 USB 2.0 四口 HUB 控制器,我选它的理由很直接:
- 封装友好:QFN-28,引脚间距 0.5mm,手工焊接用热风枪或者铁板烧都能搞定,比 BGA 友好太多。
- 外围精简:只需要一颗 12MHz 晶振、几个去耦电容、一个复位电路,不需要外挂 EEPROM(默认配置就够用)。
- 供电灵活:支持自供电(Self-Powered)和总线供电(Bus-Powered)两种模式,通过引脚配置切换,做扩展坞的时候可以根据你的电源方案灵活选。
- 资料相对齐全:数据手册能拿到,引脚定义清晰,参考电路不复杂。
对比一下常见的几颗:
| 型号 | 封装 | 晶振 | 外围器件 | 资料获取难度 | 价格区间 |
|---|---|---|---|---|---|
| SL2.1A | QFN-28 | 12MHz | 少 | 中等 | 低 |
| GL850G | SSOP-28 | 12MHz | 少 | 容易 | 低 |
| FE1.1s | SSOP-28 | 12MHz | 少 | 容易 | 低 |
| SL2.1A | QFN-28 | 12MHz | 少 | 中等 | 低 |
GL850G 和 FE1.1s 确实更常见,资料也更多,但我想试一颗不太一样的,而且 SL2.1A 的 QFN 封装体积更小,做出来的板子可以更紧凑。如果你是完全新手,我建议先用 GL850G 练手,SSOP 封装更容易焊。但如果你已经焊过 QFN 或者想挑战一下,SL2.1A 完全值得一试。
1.3 总线供电还是自供电,这个选择决定了后面一半的设计
这是很多人做扩展坞时最容易忽略的一个决策点。总线供电意味着整个扩展坞的电流全部来自上行口(也就是插电脑的那个口),USB 2.0 规范规定上行口最大提供 500mA。四个下行口如果都插满,平均每个口只能分到 125mA,连一个 2.5 寸移动硬盘(启动电流通常 700mA~1A)都带不动。
自供电则是扩展坞自己接一个外部电源(比如 5V DC 插座或者从别的地方取电),下行口的电流由外部电源提供,每个口可以给到 500mA 甚至更多。我这次做的是自供电方案,因为我的使用场景里经常要插移动硬盘和多个 USB 设备,总线供电根本不够用。
注意:如果你选总线供电,SL2.1A 的配置引脚要拉到对应电平,同时下行口的过流检测电阻要选对,否则芯片会误判过流保护。
2. 电路设计里那些数据手册不会强调的细节
2.1 晶振电路:12MHz 不是随便放上去就行
SL2.1A 需要一颗 12MHz 的无源晶振,配合两个负载电容。数据手册上通常写 22pF,但实际取值要根据晶振的负载电容规格来算。公式是:
CL = (C1 × C2) / (C1 + C2) + Cstray
其中 Cstray 是 PCB 走线的寄生电容,一般取 3~5pF。如果你用的晶振标称负载电容是 12pF,那么 C1 和 C2 应该选 18~20pF 左右,而不是无脑上 22pF。我第一版用了 22pF,结果枚举偶尔失败,换成 18pF 之后稳定了。
晶振的走线要尽可能短,最好控制在 10mm 以内,并且包地处理。晶振下面不要走任何其他信号线,尤其是 USB 差分对。我第二版把晶振挪到了芯片背面正下方,走线长度不到 5mm,效果明显更好。
2.2 USB 差分对的阻抗控制:90 欧姆不是闹着玩的
USB 2.0 高速模式(480Mbps)要求差分对阻抗控制在 90Ω±10%。这个在四层板上比较容易实现,但如果你用两层板,就要靠走线宽度和间距来凑。以常见的 1.6mm 厚 FR-4 板材为例,两层板想要做到 90Ω 差分阻抗,走线宽度大约 0.3mm,间距 0.15mm 左右,具体数值要用阻抗计算工具算。
我第一版用的是两层板,差分对走线宽度 0.25mm、间距 0.2mm,算下来阻抗大概 100Ω 出头,实测高速设备(比如 USB 3.0 的 U 盘插在 2.0 口上)枚举成功率只有七成左右。第二版改成四层板,差分对走线宽度 0.2mm、间距 0.15mm,参考层完整,阻抗控制在 90Ω 附近,枚举成功率直接拉到百分之百。
提示:如果你只是做全速(12Mbps)设备,阻抗要求没那么严格,但既然 SL2.1A 支持高速,没理由不做好。
2.3 供电部分的去耦电容布局
SL2.1A 的电源引脚需要去耦电容,数据手册一般建议 0.1μF 和 10μF 组合。但关键在于布局位置:0.1μF 必须尽可能靠近芯片的电源引脚,最好在 2mm 以内,否则高频噪声滤不掉。10μF 可以稍微远一点,放在电源入口附近。
我第一版把 0.1μF 放在了芯片旁边 5mm 左右的位置,结果插上设备后偶尔出现掉线。后来把电容挪到紧贴引脚,问题消失。这个细节看起来小,但实际影响很大。
另外,自供电模式下,外部 5V 电源进来之后要先经过一个肖特基二极管(防止电流倒灌回电脑),然后接一个大容量电解电容(我用了 470μF)做储能,再分给四个下行口。每个下行口的 VBUS 引脚也要加 0.1μF 去耦。
2.4 过流检测与电源开关
SL2.1A 支持过流检测,但需要你在每个下行口的 VBUS 上串一个采样电阻,或者用专用的电源开关芯片。我为了简化设计,用了两个双通道的电源开关芯片(比如 MIC2025 之类的),每个通道负责两个下行口。这样过流的时候芯片会自动切断输出,保护主控和上行口。
如果你不想用电源开关芯片,也可以直接用电阻采样,但精度和响应速度都不如专用芯片。我建议至少用电阻采样,不要直接把 VBUS 短接过去,否则一旦某个口短路,整个扩展坞都可能挂掉。
3. PCB 布局:那些让我返工两次的坑
3.1 第一版布局的错误:差分对跨分割
第一版板子我为了走线方便,把 USB 差分对从地平面的一个缺口上方跨了过去。结果就是高速设备枚举极不稳定,有时候插上去要等好几秒才识别。后来查资料才知道,差分对跨分割会导致阻抗突变,信号反射严重。第二版我把地平面做成完整的,差分对下面没有任何分割,问题解决。
这个坑其实很典型:很多人画两层板的时候,地平面被各种走线割得七零八落,差分对跨过去自己还不知道。我的建议是,如果做 USB 2.0 高速,尽量用四层板,第二层完整地平面,差分对走在顶层,参考第二层。这样阻抗可控,信号质量也有保障。
3.2 晶振与 USB 差分对的距离
晶振是板上最大的干扰源之一,它的谐波可能会耦合到 USB 差分对上。我第二版把晶振放在了板子的一角,距离最近的 USB 差分对超过 15mm,并且中间用地线隔开。实测眼图比第一版干净很多。
如果你实在空间紧张,至少要在晶振周围包一圈地线,并且晶振下面不要走任何信号线。晶振的两个负载电容也要紧贴晶振引脚,走线尽量短。
3.3 电源走线的宽度计算
自供电模式下,外部 5V 电源要给四个下行口供电,总电流可能达到 2A 甚至更多。PCB 走线宽度要按电流来算。以 1oz 铜厚为例,1mm 宽的走线大约能过 1A 电流(温升 10°C 左右)。如果你要过 2A,走线宽度至少 2mm,或者用铺铜的方式。
我第一版电源走线只用了 0.5mm,结果插满设备之后走线发热明显,压降也大。第二版改成 2mm 宽,并且在下行口附近铺了大面积铜皮,压降从 0.3V 降到了 0.1V 以内。
注意:压降太大会导致设备供电不足,尤其是移动硬盘这种对电压敏感的。USB 规范要求 VBUS 电压在 4.75V~5.25V 之间,如果压降超过 0.25V,加上线缆本身的压降,设备端可能就只有 4.5V 了。
3.4 连接器选型与固定
USB-A 母座我选的是直插式的,虽然比贴片式的占空间,但机械强度好很多。贴片式的用久了容易松动,尤其是经常插拔的场景。直插式的焊盘大,焊接也更容易。
固定方面,我在板子四角留了 M3 螺丝孔,准备装在一个 3D 打印的外壳里。如果你不打算做外壳,至少要在板子背面贴一层绝缘垫,防止短路。
4. 焊接与调试:从裸板到能用的完整过程
4.1 QFN 封装的手工焊接方法
SL2.1A 是 QFN-28,引脚在芯片底部四周,没有伸出引脚。手工焊接的步骤:
- 涂锡膏:用针管把锡膏涂在焊盘上,量不要多,薄薄一层就行。
- 放芯片:用镊子把芯片放到焊盘上,注意方向(引脚 1 的位置看数据手册)。
- 热风枪加热:风枪温度设 280~300°C,风量调小,对着芯片周围均匀加热。看到锡膏融化、芯片自动归位(有轻微的“塌陷”感)就差不多了。
- 检查连锡:用放大镜看引脚之间有没有连锡,如果有,用助焊剂加烙铁拖一下。
我焊第一颗的时候风量开太大,把芯片吹跑了,浪费了一颗。后来把风量调到最小,慢慢加热,成功率就上来了。
4.2 上电前的检查清单
焊接完之后不要急着上电,先做这几项检查:
- 用万用表测电源和地之间的电阻,确认没有短路。正常应该在几百欧姆以上,如果接近 0 欧姆,说明有短路。
- 检查晶振引脚有没有连锡。
- 检查 USB 差分对有没有和相邻引脚短路。
- 确认所有去耦电容都焊好了,没有虚焊。
我第一版就是没测短路直接上电,结果 5V 电源直接拉低,芯片发烫。后来发现是一个 0.1μF 电容焊反了(其实是无极性电容,但焊盘设计有问题导致短路)。从那以后我每次上电前都测一遍。
4.3 枚举测试与常见问题排查
上电之后,把扩展坞的上行口插到电脑上,看设备管理器里有没有识别出 USB HUB。如果识别到了,再插设备测试。
常见问题:
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 完全不识别 | 供电问题、晶振没起振 | 测 5V 和 3.3V 电压,用示波器看晶振 |
| 识别但不稳定 | 差分对阻抗不对、晶振走线太长 | 检查 PCB 布局,换负载电容 |
| 插设备掉线 | 供电不足、去耦电容位置不对 | 测 VBUS 电压,挪电容 |
| 某个口不工作 | 该口焊接不良、电源开关损坏 | 换口测试,检查焊接 |
我遇到过一次插上设备后电脑提示“USB 端口电涌”,原因是下行口的 VBUS 和地短路了,电源开关芯片保护了。后来发现是 USB 母座的焊盘和地铺铜太近,焊接的时候连锡了。
5. 性能实测:SL2.1A 到底能不能跑满 480Mbps
5.1 测试环境与方法
测试平台:
- 电脑:一台带 USB 3.0 接口的笔记本(扩展坞插在 3.0 口上,但扩展坞本身是 2.0 的)
- 测试设备:一个 USB 3.0 的固态 U 盘(插在扩展坞上会协商到 2.0 高速模式)、一个 USB 2.0 的读卡器、一个 2.5 寸移动硬盘
- 测试软件:CrystalDiskMark、HD Tune、以及自己写的一个批量读写脚本
测试方法:分别测试直连电脑和通过扩展坞连接的速度,对比差异。每个设备测三次取平均值。
5.2 带宽数据:高速模式下的实际表现
先看 U 盘的数据:
| 测试项目 | 直连电脑 | 通过扩展坞 | 差异 |
|---|---|---|---|
| 顺序读取 | 42.3 MB/s | 41.8 MB/s | -1.2% |
| 顺序写入 | 38.7 MB/s | 37.9 MB/s | -2.1% |
| 4K 随机读取 | 8.2 MB/s | 7.9 MB/s | -3.7% |
| 4K 随机写入 | 6.5 MB/s | 6.1 MB/s | -6.2% |
USB 2.0 高速模式的理论带宽是 480Mbps,换算成字节是 60MB/s,但实际有效载荷因为协议开销,通常只能跑到 40MB/s 左右。从数据看,通过扩展坞之后速度损失很小,顺序读写基本在 2% 以内,4K 随机性能损失稍大,但也在可接受范围内。
移动硬盘的数据:
| 测试项目 | 直连电脑 | 通过扩展坞 | 差异 |
|---|---|---|---|
| 顺序读取 | 35.6 MB/s | 34.9 MB/s | -2.0% |
| 顺序写入 | 32.1 MB/s | 31.2 MB/s | -2.8% |
移动硬盘的速度受限于机械盘本身,USB 2.0 的带宽足够,所以损失更小。
5.3 多设备同时读写的带宽分配
这是很多人关心的问题:四个口同时插设备,带宽怎么分?USB 2.0 HUB 的架构是所有下行口共享上行口的 480Mbps 带宽。也就是说,如果你同时读写两个设备,总带宽不会超过 480Mbps。
我实测了一下:同时插两个 U 盘,互相拷贝文件。总速度大约在 38MB/s 左右,两个设备各分到 19MB/s。如果只插一个设备,可以跑到 41MB/s。所以多设备场景下,带宽是实打实被分掉的。
提示:如果你需要同时高速读写多个设备,USB 2.0 HUB 满足不了,得上 USB 3.0 HUB。但 USB 2.0 的好处是兼容性好,几乎不会遇到驱动问题。
5.4 供电能力实测:带移动硬盘稳不稳
自供电模式下,我用一个 5V/3A 的电源适配器给扩展坞供电。实测四个口同时插设备:
- 口 1:2.5 寸移动硬盘(启动电流约 800mA)
- 口 2:U 盘(约 100mA)
- 口 3:读卡器(约 200mA)
- 口 4:手机(充电约 500mA)
总电流约 1.6A,5V 电源完全带得动。测每个口的 VBUS 电压,最低的也有 4.92V,在规范范围内。移动硬盘启动的时候没有出现掉盘或者异响。
如果换成总线供电,移动硬盘根本起不来,电脑会直接提示“USB 端口电涌”或者设备反复重启。所以如果你要做扩展坞,自供电是必须的。
5.5 长时间运行的稳定性
我让扩展坞连续跑了 48 小时,四个口都插着设备,每隔一段时间用脚本读写数据。期间没有出现掉线、枚举失败或者速度骤降的情况。芯片表面温度用红外测温枪测大约 42°C,摸上去温热但不烫手。电源开关芯片温度稍高,大约 48°C,也在正常范围内。
注意:如果你把扩展坞放在密闭外壳里,温度会更高,建议留散热孔或者加个小散热片。
6. 几个让我印象深刻的调试经历
6.1 那颗让我怀疑人生的晶振
第一版板子焊好之后,插上电脑完全不识别。我测了电压,5V 和 3.3V 都正常;测了晶振,用示波器看发现没有起振。换了一颗晶振还是不行。后来查了半天,发现是负载电容焊错了——我用了 22pF,但晶振的负载电容是 12pF,算下来应该用 18pF。换掉之后立刻起振,电脑也识别了。
这件事让我明白,数据手册上的“典型值”不一定适合你手头的物料,一定要根据实际晶振的规格来算。
6.2 差分对走线引发的枚举不稳定
第二版板子刚焊好的时候,插 U 盘有时候能识别,有时候要插拔好几次。我用示波器看差分信号,发现眼图张开度不够,有明显的过冲和振铃。检查 PCB 发现差分对有一段跨了地平面的分割。用刀片把分割处刮开,补了一根飞线让地平面完整,问题立刻改善。后来重新打样了一版,把地平面做完整,就再也没出现过。
6.3 电源开关芯片的选型教训
我一开始为了省钱,用了某款便宜的电源开关芯片,结果发现它的导通电阻比较大(约 100mΩ),在 1A 电流下压降有 0.1V。加上线缆和连接器的压降,设备端电压只有 4.7V 左右,移动硬盘偶尔会掉盘。后来换了导通电阻更小的芯片(约 50mΩ),压降降到 0.05V,问题解决。
这个教训是:电源路径上的每一个器件都要算压降,不能只看价格。
7. 做这个项目我学到的几件事
SL2.1A 这颗芯片本身很靠谱,外围简单,性能也够用。但扩展坞这个东西,芯片只是其中一环,PCB 布局、供电设计、连接器选型、焊接工艺,每一个环节都能决定最终成败。我前后打了三次板,第一次差分对跨分割,第二次晶振走线太长,第三次才把所有问题都解决。
如果你也想自己做,我的建议是:先用 GL850G 或者 FE1.1s 练手,SSOP 封装好焊,资料也多。等有经验了再上 SL2.1A 这种 QFN 封装的。PCB 尽量用四层板,差分对阻抗控制好,晶振走线短且包地,电源走线够宽,去耦电容紧贴引脚。做到这几点,基本就能一次成功。
实测数据也说明,SL2.1A 做的扩展坞在高速模式下的性能损失很小,顺序读写基本在 2% 以内,带移动硬盘也稳。如果你需要一个稳定可靠的 USB 2.0 扩展坞,这个方案完全值得一试。