四口USB拓展坞为何不能按四份电流来算
给拓展坞接上键盘和鼠标,一切正常。再插一个启动电流较大的设备,其他接口却一起掉线。排查这类现象时,先别急着重装驱动,沿着供电线走一遍,往往比盯着四组数据线更有用。
四个插座表示四条下游数据连接,并不表示板上有四份独立电源。接口数量、限流阈值和上游允许取用的电流,是三件需要分别核对的事。
下面用一块 CH334R 四口 USB 2.0 板,把供电关系拆开,再做一个可直接运行的预算工具。讨论限定在供电审查与电荷计算,不把数值模型当作真实插拔波形。
图1 依据实际网表重绘的供电关系。CH334R 自耗位于总开关上游,四个接口位于总开关下游。
先把两条电源网分清
这块板的输入叫 +5V,输出给外设的网络叫 VBUS。两个名字之间隔着 U2,也就是 CH217K 电源开关。
网表给出的连接很明确。U2 的 6 脚 VIN 接 +5V,1 脚 VOUT 接 VBUS;USB2、USB3、USB4、USB5 的 1 脚都接在同一个 VBUS 上。C5、C6、C7、C8 各为 100µF,也都跨接在这条母线与地之间。U1 的 12 脚 V5 则直接取自开关前的 +5V。
因此,下游外设的电流要相加,四只电容的充电电荷也要相加。某个端口把共用母线拉低时,其他端口同样会受到影响;故障是否发生,还取决于负载、线缆和上游保护,不能只凭拓扑断言它一定掉线。
图2 CC1、CC2 分别由 R1、R2 的 5.1kΩ 下拉至地。图为实际工程导出,非重新绘制的接线方案。
Type-C 的外形容易让人联想到大电流,但两个下拉电阻只说明这里按受电端配置。当前电路没有读取上游 Rp 电流通告的控制器,也没有 PD 协商电路。不能看见 Type-C 插座,就给预算表自动填上 1.5A 或 3A。
上游预算应来自实际连接模式、允许取电条件及所用电源/线缆的约束。若这些条件尚未确认,就先把允许电流列为待核实输入,而不是拿电源铭牌最大值替代。USB 2.0 的 480Mbit/s 同样是上行链路速率,不会因为多了四个插座就变成四倍。
60kΩ设定的是总开关的名义限流
图3 R3=60kΩ;EN# 接地,FLAG# 未连接。引脚号可以和手册逐一对应。
CH217 手册给出的设定关系为 Iset(A) = 60000 / Rset(Ω)。R3 为 60kΩ,对应约 1A 的名义设定。这是流经一颗 U2 的总电流,不是每个插座各有 1A,也不是板上会主动把电流平均分成四份。
还有一个容易漏掉的细节。手册电气参数表中限流的最小、典型、最大值带有测试条件,其中一组使用 Rset=30kΩ。不能把那一组数值简单除以二,就宣称得到 60kΩ 下已经保证的上下限。元件公差、温度、压降及热条件仍要纳入设计;下文的 0.8A 只是演示用设计预算,不是厂商保证值。
图3 中 EN# 为低有效,直接接地后,U2 处于使能条件;FLAG# 是开漏故障输出,却没有接到其他电路。再核对 CH334 型号表,CH334R 本身不支持过流检测和电源控制。于是,“电源开关具有保护”与“电脑能够收到端口过流报告”之间,并没有现成的信号通路。
如果产品需要故障上报和端口控制,应另选支持相应功能的 HUB 方案,并完成电源开关、反馈和配置的整体设计。给 FLAG# 随便拉一根线,并不能让当前 CH334R 多出不存在的功能。
四只100µF会一起参与启动
图4 USB5 旁的 C5 是其中一只电容。C6~C8 同为 100µF,连接在同一 VBUS 网络。
只算这四只板载电容,名义总容值为 400µF。从 0V 充到 5V,需要的电荷是 Q = C × ΔV = 2mC,储存能量为 E = C × V² / 2 = 5mJ。外接设备自己的输入电容尚未计入。
做一次明确的假设计算。若电容按名义值上浮 20% 包络,总容值变成 480µF,需要 2.4mC 电荷。假设输出电压线性上升,在 5ms 内到达 5V,仅电容的平均充电电流就有 2.4mC / 5ms = 0.48A。再加上假设的四口合计 0.40A 负载,总开关平均需要通过 0.88A。
图5 合成输入的电荷预算。蓝色为假设恒定的外设电流,黄色为线性电压斜坡所需的平均电容电流。
这些假设是为了把账算清。真实外设在低电压时未必消耗恒定电流,CH217K 的短路折返也会改变可用电流。图中没有模拟器件控制环路,不表示实测波形,更不证明 USB 启动时序符合要求。
把预算写成三个量,会更容易发现瓶颈。
- 下游可用预算
B = min(上游允许电流 − 上游侧自耗, 总开关设计预算)。 - 充电余量
H = B − 四口负载之和。 - 当 H 大于零时,
t ≥ Q / H给出恒定负载、全部余量用于充电条件下的乐观时间下界。
例如,假设上游允许 0.50A,HUB 与上游侧自耗合计 0.08A,四口负载各 0.10A,总开关设计预算取 0.80A。下游 B 只有 0.42A,充电余量只剩 0.02A。给 480µF 充到 5V 的乐观下界是 120ms。
若仅把已确认的上游预算改为 1.50A,B 仍被演示的 0.80A 开关预算限制;H 为 0.40A,下界变成 6ms。这里的 6ms 是电荷约束下的理想下界,不能写成 CH217K 的实际启动时间。反过来看,要求 5ms 的例子需要开关平均 0.88A、上游平均 0.96A,仍不通过这两组假设预算。
把预算做成可以重复修改的工具
下面是完整的 hub_budget.py v1.0.0,使用 Python 3.12 标准库。保存后执行 python hub_budget.py,会输出上述两组假设结果。不需要安装第三方库,也没有硬件控制或自动协商功能。
ports_a 与 caps_uf 都按四个接口输入;cap_factor 应换成实际电容公差包络,外设附加电容也应加入对应端口。upstream_a、hub_a、switch_budget_a 必须用经核实的预算替换。程序中的 0.08A 自耗、每口 0.10A 及 0.80A 开关预算全部是合成示例,不能当作这块板的测试参数。
"""USB hub power planning, v1.0.0. Python 3.12, standard library only.
Inputs are design assumptions, not automatically negotiated USB permissions.
The charge-time result is an optimistic lower bound, not a switch simulation.
"""
from math import fsum, isfinite
def number(value, name, positive=False):
value = float(value)
if not isfinite(value) or value < 0 or (positive and value == 0):
raise ValueError(name + " must be finite and " +
("positive" if positive else "nonnegative"))
return value
def four(values, name):
values = tuple(number(x, name) for x in values)
if len(values) != 4:
raise ValueError(name + " needs four values")
return values
def plan(upstream_a, hub_a, switch_budget_a, ports_a, caps_uf,
target_v=5.0, cap_factor=1.2, ramp_ms=5.0):
upstream = number(upstream_a, "upstream_a", True)
hub = number(hub_a, "hub_a")
switch = number(switch_budget_a, "switch_budget_a", True)
ports = four(ports_a, "ports_a")
caps = four(caps_uf, "caps_uf")
voltage = number(target_v, "target_v", True)
factor = number(cap_factor, "cap_factor", True)
ramp = number(ramp_ms, "ramp_ms", True) / 1000
if factor < 1:
raise ValueError("cap_factor must be at least one")
load = fsum(ports)
available = min(upstream - hub, switch)
headroom = available - load
if abs(headroom) < 1e-12: # Ignore sub-picoamp floating-point noise.
headroom = 0.0
capacitance = fsum(caps) * factor * 1e-6
charge = capacitance * voltage
return {
"port_load_a": load,
"downstream_budget_a": available,
"charge_headroom_a": headroom,
"steady_budget_pass": headroom >= 0,
"capacitance_uf": capacitance * 1e6,
"charge_mc": charge * 1000,
"stored_energy_mj": 0.5 * capacitance * voltage**2 * 1000,
"optimistic_min_ramp_ms": (charge / headroom * 1000
if headroom > 0 else None),
"ramp_average_upstream_a": hub + load + charge / ramp,
"ramp_average_switch_a": load + charge / ramp,
"ramp_average_budget_pass": (headroom >= charge / ramp),
}
if __name__ == "__main__":
# Synthetic planning inputs. Replace every budget with verified values.
for source in (0.5, 1.5):
result = plan(source, 0.08, 0.8, (0.1,) * 4, (100,) * 4)
print("assumed_upstream_A", source)
for key, value in result.items():
print(key, f"{value:.6f}" if isinstance(value, float) else value)
输出中的 steady_budget_pass 只检查静态总预算;ramp_average_budget_pass 检查指定线性斜坡的平均电荷需求。即使二者为 True,也不能据此判断峰值电流、最低电压、器件温升或 USB 合规性。余量为零或负数时,程序不给出有限的充电时间下界。
本次在 Python 3.12.14 下运行,使用高精度 Decimal 按电压小步长累计电荷,交叉核对了 200 组容值、负载、电压和斜坡输入;与工具结果的最大电流差约为 4.45×10⁻¹⁶A。另检查了零余量、超预算、斜坡放慢及 8 类非法输入。这验证的是计算关系和输入处理,不是电路板实测。
回到PCB上看电流从哪里走
图6 同一 PCB 的顶面和底面,来自 EDA 分层导出;底面按底视方向显示。整体图用于对应布局,细节见下图。
总开关位于输入附近,VBUS 再沿板边分配给四个接口。审图时要分别跟踪开关前的 +5V 和开关后的 VBUS,尤其关注焊盘出口、转角及进入接口前的最窄铜段。大面积铺铜并不自动消除这些局部瓶颈。
图7 输入、CH217K、60kΩ 设定电阻及附近旁路区域的实际局部,未更改铜线或焊盘。
电源检查还要把地返回路径、线缆与连接器接触电阻一起考虑。压降可以先用 ΔV = I × R 分配预算,损耗用 P = I² × R 估算;R 必须包含实际路径,不能只填芯片某个典型导通电阻。单凭截图无法认证载流、温升或高速阻抗。
若后续做实板验证,建议先在受控限流电源和 USB 测试转接条件下确认静态供电,再逐步加负载。示波器同时观察 U2 的 VIN、VOUT 和输入电流,记录四口空载上电、逐口热插拔及组合负载时的最低电压与恢复过程。具体合格阈值应来自目标供电模式和产品要求,不能拿本文的演示数值当验收线。
需要验证故障上报时,还应分别检查“开关有没有动作”和“主机有没有可读取的状态”。当前图中的 FLAG# 未接,不能把软件未弹提示反推为没有发生限流。不要直接用电脑端口做硬短路试验。
如果下一版要服务耗电更高的外设,先明确总功率、上游允许电流和启动条件,再决定外供电、防反灌、软启动与分口保护的整体方案;仅调小 R3 提高名义限流,并不能同时提高线缆、铜线和上游端口的能力。
四口拓展坞最值得先做的计算,是把同一时刻流过总开关的电流加起来。把静态负载、启动电荷和故障反馈分别核对,许多“偶尔掉线”的排查才有了可测量的方向。
资料与验证范围
工程与 EDA 图取自 EDA课程案例团队《【铝合金外壳】USB2.0拓展坞》,OpenAtom OHL 1.0。本文只采用 CH334R芯片-TYP-C口 / Schematic1 / P1 V1.0 及对应 PCB1,图页更新于 2026-09-17;未混用工程中的其他子板。图纸经白底渲染、局部裁剪和保真缩放,未改变电路。独立增量为供电预算推导、v1.0.0 工具、交叉验证与审查步骤,未修改原硬件,未进行实体、热或 USB 合规测试。
项目与上游工程入口 https://oshwhub.com/course-examples/lv-ke-tuo-zhan-wu
实际 EDA https://pro.lceda.cn/editor#id=001dac7d6aa5488db20ce857ea383152
WCH《CH217手册》V1.3(2026-04-08) https://www.wch.cn/downloads/CH217DS1_PDF.html
WCH《CH334/CH335数据手册》V3.0(2026-10-19) https://www.wch.cn/downloads/CH334DS1_PDF.html
技术交流,欢迎关注微信公众号:美男子玩编程。



