USB 与 Type-C

本页目录

一根标称 240 W 的 USB-C 线,传文件仍可能只有 USB 2.0 速度;笔记本能从扩展坞充电,也不保证该端口支持显示输出。连接器、数据传输、视频和供电是相互关联但分别声明的能力。本篇先拆开这些概念,再沿设备枚举与电源协商解释“插上以后发生什么”。

数据480M / 5G / 10G / 20G / 40G / 80G供电方向、协商电压、电流与线缆额定视频DP Alt Mode 或 USB4 视频隧道角色数据 Host/Device 与电源 Source/Sink同一个 USB-C 外形,四种能力必须分别确认端口、线缆、扩展坞和设备形成一条链;任一段階缺少目标模式,都可能降低可用能力。
想确认的能力查阅入口必须一起核对
文件能传多快数据模式与有效吞吐主机、线缆、Hub、设备及共享上行
为什么系统不识别枚举与端点数据线、电源稳定、描述符、配置、驱动
USB-C 正反插如何工作引脚分组与 CC方向检测、布线与高速复用
能否充到目标功率PD 合同Source、Sink、线缆、电源路径与温度
能否带显示器DP Alt Mode 与 USB4lane 数、速率、色深、压缩与设备支持

连接器名称不能代替数据模式

Type-A、Type-B、Micro-B、Type-C 是连接器类型,不是速率。传统 USB 2.0 Type-A 有 VBUS、D−、D+、GND 四个触点;SuperSpeed Type-A 增加五个触点,其中四个组成两对高速差分信号,另一个为参考触点。增加的是五个触点,绝不是五对差分线。

USB-C 插座的完整定义有 24 个触点,但只实现 USB 2.0 的产品可不连接高速数据通道;某些简化连接器也不提供全部触点。不能因为插座外形相同,就推断实现了完整数据或视频功能。

常见数据能力对应模式示例理解边界
1.5 / 12 / 480 Mbit/sUSB 低速 / 全速 / 高速USB 2.0 设备不必支持 480 Mbit/s
5 Gbit/sUSB 3.0、USB 3.1 Gen 1、USB 3.2 Gen 1×1不同规范中的同级速率名称
10 Gbit/sUSB 3.1 Gen 2、USB 3.2 Gen 2×1USB 3.2 另有双通道组合,不只看 Gen 数字
20 Gbit/sUSB 3.2 Gen 2×2 或 USB4 20Gbps相同标称速率不代表相同链路模式
40 / 80 Gbit/s对应 USB4 能力端口和线缆需支持相应模式

USB-IF 的用户侧命名以 USB 5/10/20/40/80Gbps 表达性能。USB4 Version 2.0 已扩展到 80 Gbit/s 级别,因此把 USB4 一律写成最高 40 Gbit/s 已不完整;版本名称仍不等于每个产品都实现所有可选能力。USB-IF:数据性能命名、USB4 概览

这些是链路速率,不能直接当作文件速度。以 5 Gbit/s、8b/10b 编码为例,仅编码后就只剩 5×8/10=4 Gbit/s,即 500 MB/s;包头、流控、重试、USB 存储协议、主控和介质还会继续消耗预算。不要把它当作实测磁盘一定能达到的吞吐,也不要把双向速率简单相加后宣传为单向速度。

一个 USB4 端口连接 USB 3.2 Gen 2×2 设备时,仍要看是否共同支持 Gen 2×2;“主机数字更大”不保证所有较低数字的链路组合都能运行。Hub 的多个下行口也共享上行带宽,不会每增加一个接口就凭空增加主机通道。

USB 2.0 与 SuperSpeed 的线路并不相同

USB 2.0 使用 D+/D− 进行半双工传输。低速和全速的上拉位置用于连接/速度识别;高速设备通过复位阶段的握手进入高速模式,不能仅看 D+ 上拉就区分全速与高速。高速信号电气条件与低/全速不同,不能统一写成“USB 2.0 差分 3.3 V”。

SuperSpeed 使用独立发送与接收差分通道,并有链路训练、电源状态与流控。USB-C 的高速对还需按插入方向和使用模式复用。USB4 则进一步通过路由与隧道组织支持的协议流;它不是把 USB 2.0 D+/D− 直接加速,也不能把所有 USB 世代的连接检测都画成 D+ 上拉。

传统 USB 总线以主机/根 Hub 为根形成分层树,Hub 扩展下游连接。主机控制传输调度,设备通过端点提供功能;这不等于设备永远不能发送任何链路通知或请求唤醒,而是普通功能数据不能像任意对等网络那样自行抢占总线。

枚举:从有电到驱动可用,中间有多个状态

以普通 USB 2.0 外设说明:设备连接后,主机进行端口复位,使用默认地址 0 的控制端点读取初始信息、分配地址,再获取完整描述符和选择配置。不同系统的读取顺序可有差别,但默认控制端点、地址和配置是不同阶段。

连接与复位检测连接;高速能力在复位握手阶段协商默认地址 0读取所需初始描述信息;端点 0 已可用于控制传输分配设备地址SET_ADDRESS 完成后,按新地址继续通信读取完整描述符设备、配置、接口、端点与必要的类描述符选择配置与驱动绑定SET_CONFIGURATION;类/厂商驱动准备相应接口USB 2.0 设备建立数据通路:端点 0 先承担控制请求这是教学主线;主机实现可重复读取或调整请求顺序,不能把“已分配地址”等同于业务可用。
对象描述什么常见误解
DeviceVID/PID、版本、配置数等VID/PID 不是唯一的驱动匹配规则
Configuration接口集合与相应属性读到描述符不等于已选中该配置
Interface / Alternate setting一项功能及其端点组合一个物理设备可以有多个接口与驱动
Endpoint方向、传输类型、包长等端点不是连接器上的独立电线

IN/OUT 始终以主机视角命名:IN 是设备到主机,OUT 是主机到设备。端点 0 承担默认控制传输;其他端点由配置和接口描述符声明。一个复合设备可以同时有键盘接口和厂商数据接口,并分别绑定驱动,不应把“加载一个设备驱动”当作所有设备的固定模型。Microsoft:USB 端点与管道

四种传输类型承诺的并非同一种“可靠”

类型主要用途与调度特征不能保证什么
Control枚举、配置、控制请求,有错误处理请求内容一定被业务接受
Bulk尽力利用可用带宽,适用数据完整性优先场景固定吞吐或最坏延迟
Interrupt周期服务机会,适合小量及时数据外设用硬中断直接抢占主机总线
Isochronous为实时流保留服务机会,错过的数据不按普通事务重试追回每个数据单元都必达

端点调度约束与应用收到数据的时间仍隔着控制器、驱动、缓冲和系统调度。音视频可以接受少量丢失来维持时间连续性;文件传输通常选择完整性优先。USB 传输成功也不等于应用已把数据持久化,设备内部缓存和命令完成语义需另行确认。Linux:USB 主机 API 与传输模型

常见类包括 HID、Mass Storage、CDC ACM/NCM、Audio、Video、DFU。所谓“免驱”通常是操作系统已有兼容类驱动;版本、描述符、设备子类和厂商扩展仍会影响支持。CDC 是一组通信类定义,不能把 CDC 全部标成需驱动、再把其中 ACM 标成不需驱动;实际一直有驱动,只是是否需要用户额外安装不同。

Type-C 引脚按功能分组

引脚组作用实现注意点
VBUS / GND供电与回流多触点分流、电流能力及电源路径控制
D+ / D−USB 2.0 数据插座两面的对应同名触点按参考设计连接
四对高速信号USB 3.x、USB4 或模式复用方向检测、差分阻抗和合适的 MUX/retimer
CC1 / CC2连接、方向、电流通告、PD 相关通信两个 CC 不可直接短接
SBU1 / SBU2模式相关边带信号例如 DP Alt Mode 的 AUX,不是通用第二组 USB 数据

这里按信号功能解释,不提供可能混淆正面/背面的焊盘坐标;画 PCB 必须按所选连接器的数据手册、观察方向和封装脚号核对。

CC 检测的是连接与电源角色,角色可继续协商

常见 Source 提供 Rp,Sink 提供 Rd;插入后由有效 CC 路径检测连接和方向。简单固定 Sink 插座在 CC1、CC2 上分别设置独立 Rd,常用标称 5.1 kΩ;两个引脚不能合用一个电阻短接,也不能只装一侧导致某个方向异常。需要完整角色、电流检测或 PD 时应使用适当控制器与电源路径设计。TI:Type-C 工程指南

Type-C 电流通告包括 USB Default、1.5 A、3 A 等 5 V 能力。USB Default 要结合相应 USB/充电规则判断,不能一律当成“插上就可取 500 mA”,更不能因为看到两个 Rd 就默认可以取 3 A。Sink 需按实际通告和协议限制取电。

数据角色 Host/Device 与电源角色 Source/Sink 应分开。例如笔记本可以作为数据主机管理扩展坞,同时作为 Sink 从坞站充电;支持 PD 的设备可按能力进行角色交换。未用于当前 CC 通信的相应触点还可能承担 VCONN,为线缆电子器件供电,VCONN 与大功率 VBUS 不是同一条供电路径。

PD:先建立合同,再按合同供电

普通 Type-C 连接首先完成安全的连接检测和默认供电流程,不能一插入就施加任意高压。PD 通过 CC 上的消息交换请求新的供电条件;Source 提供能力,Sink 根据自身、电缆和系统限制提出 Request。固定 PDO 示例流程如下。

SourceSinkSource_Capabilities:例如提供 5 V / 3 A、9 V / 3 ARequest:请求 9 V / 2 AAccept:同意该请求PS_RDY:切换完成,电源已就绪供电切换窗口:不得把 Accept 当作新电压已经稳定固定 PDO 协商:Accept 是接受请求,PS_RDY 才报告电源就绪省略 GoodCRC 等协议细节;此例是固定供电合同,不是 PPS,也没有自动进入 EPR。

Source 发送 Accept 只表示接受请求,电源还需要切换并稳定,再以 PS_RDY 报告就绪。PPS 是可编程电源能力,不能当作 Accept 后的通用状态。Request 可能被拒绝,供电能力也可能因多口共享或温度变化而重新协商,设备必须处理协商失败和合同变化。

功能解决什么需要避免的推断
SPR 固定电压常见 5/9/15/20 V 等合同,范围可达 100 W每个充电器都提供所有电压和 5 A
EPR扩展电压范围,包含 28/36/48 V,最高 240 W普通旧 5 A 线自动支持 48 V
PPS在声明范围内请求可编程电压/电流设备内部无需充电管理或功率转换

PD 3.1 引入的 EPR 把上限扩展到 48 V×5 A=240 W,需要端口、线缆和电源路径共同具备相关能力;标称 PD 版本并不能替代具体能力声明。USB-IF:USB Power Delivery

PPS 可让电源输出更适合设备充电链路,减少某些转换损耗,但电池仍需要受控电压/电流、保护和热管理,常见系统仍使用降压或电荷泵等电路。PPS Request 的编程粒度也不等于实测电压精度或电流纹波;充电速度由电池状态和整机策略共同限制。

功率算例:接口输入功率不是电池功率

假设协商到 20 V、3 A,接口上限为 60 W;在 3 A 负载、完整供电回路电阻 0.10 Ω 的教学条件下,线缆压降为 0.30 V、损耗 0.90 W,接收端约得到 59.1 W。若设备自身消耗 10 W,余下功率再经过假设 90% 效率的充电路径,电池得到约 (59.1−10)×0.9=44.19 W。

这是分配预算,不是某台手机或电脑的实测效率。提高协商功率也不保证设备持续按上限吸收;端口共享、电池充电阶段和温控都可能改变实际值。

Accept 之后,能立即按新电压取电吗?

先尝试Reject,原来的就绪条件保持;再接受一次请求,电源状态进入“转换中”,不会立刻展示目标电压已经可用。这里保留请求、应答、就绪的因果顺序,按钮对应协议事件,不能任意跳过前置条件。

正在呈现知识画面
Accept 之后,能立即按新电压取电吗?

Accept只接受请求;等待电源完成转换并报告PS_RDY,才把新供电条件交付为就绪。

线缆标识与视频能力要分别核对

USB-IF 的 USB-C 线缆认证标识区分数据性能和功率能力。USB 2.0 数据线同样可以支持较高 PD 功率,因此“240 W”不是高速线的证明;e-marker 是线缆能力识别的一部分,也不能仅凭有芯片便判断支持所有速率。USB-IF:线缆与连接器、Type-C 产品说明指南

DP Alt Mode 可把高速信号对分配给 DisplayPort:常见两条 DP lane 方案保留另一组 USB 3.x 收发连接,四条 DP lane 方案则把高速对用于视频,USB 2.0 D+/D− 仍可使用。分辨率并非仅由 lane 数决定,还取决于链路速率、消隐、刷新率、色深、色度抽样及 DSC 支持,不能固定写成“两 lane 就是 4K60”。VESA:DisplayPort Alt Mode

USB4 中的视频隧道是在 USB4 连接内分配带宽,与把连接器高速对直接切换为原生 DP 的 Alt Mode 不同。Thunderbolt 也有自身版本和认证要求,不能把所有 USB4 产品直接等同于某一代 Thunderbolt。

按失败阶段定位,比反复换“更贵的线”更明确

现象先分辨哪一层核对重点
C-to-C 不上电,A-to-C 能用CC 连接检测Rd、方向、Source/Sink 配置、电源开关
能充电,系统看不到设备数据与枚举线缆数据能力、D+/D−、高速路径、描述符与日志
只在一个方向工作插座与方向复用两侧 CC、USB 2.0 对应触点、高速 MUX
USB-C 显示无输出视频能力与模式主机端口、线缆、坞站、显示器和模式协商
传文件慢实际链路与共享负载协商速率、Hub 上行、存储介质及协议开销
充电达不到铭牌功率供电合同和整机策略PDO、线缆额定、多口分配、温控及电池阶段

复算带宽与功率

from math import isclose

encoded_byte_rate = 5e9*(8/10)/8
assert encoded_byte_rate == 500e6  # 尚未扣除包与存储协议开销
voltage, current, loop_r = 20, 3, 0.10
loss = current**2*loop_r
received = (voltage-current*loop_r)*current
assert isclose(loss, 0.9) and isclose(received, 59.1)
assert isclose(received+loss, voltage*current)
assert isclose((received-10)*0.9, 44.19)
assert 48*5 == 240
print('编码吞吐、线缆压降、功率分配与 EPR 上限算式检查通过')

继续查阅