1. USB基础回顾:体系架构、速率等级、协议栈分层

各位同学,咱们正式开始。做USB OTG性能调优,说白了就是跟数据吞吐量较劲。但较劲之前,你得先搞清楚USB这玩意儿的底子长什么样。我刚开始接触USB时,看协议栈就像看天书,后来踩了无数坑才摸清门道。这一节我们先打好地基,把体系架构、速率等级、协议栈分层这三块讲透。

1.1 USB体系架构:主从与OTG的进化

传统的USB架构是典型的主从模型。一个主机(Host)对应多个设备(Device),所有通信必须由主机发起。你在PC上插个U盘,PC就是主机,U盘就是设备。这模型简单可靠,但到了移动设备上就尴尬了——你想让手机直接读相机里的照片,手机必须当主机,相机必须当设备。那谁来协商?

所以就有了OTG(On-The-Go)。OTG引入了一个双角色能力,设备可以在Host和Device之间动态切换。我早期的一个项目是做车载互联模块,当时客户要求手机既能在车机上投屏(手机当Host,车机当Device),又能从车机读文件(手机当Device,车机当Host)。嗯,OTG就是那个解药。

OTG的核心:一根USB线,两端都能当主机,也能当设备。关键靠ID引脚和HNP(Host Negotiation Protocol)来完成角色协商。

USB体系里还有几个重要角色:集线器(Hub)负责扩展端口,但超高速下每个Hub都会引入额外延迟,性能调优时要特别注意路径上的Hub数量。我个人习惯在OTG设计中尽量直连,去掉中间Hub。

  • Host:发起传输,管理总线调度
  • Device:响应传输,可以是功能设备(如存储、摄像头)或Hub
  • OTG双角色设备(DRD):可动态切换角色,依赖ID引脚/事件触发
  • 集线器:扩展拓扑,但额外增加延迟和信号损耗

1.2 速率等级:从1.5 Mbps到20 Gbps的跨度

USB的速率等级直接决定了你能跑什么应用。我遇到过好几个人,信誓旦旦说自己做的USB 3.0设备能到5 Gbps,结果测出来不到2 Gbps。为什么?瓶颈往往在PHY配置、线缆质量和协议开销上。先看看这些等级的理论极限:

版本 市场名称 理论最大速率 编码方式 我常注意的点
USB 1.0 低速(Low Speed) 1.5 Mbps NRZI + 位填充 只用于人机交互设备
USB 1.1 全速(Full Speed) 12 Mbps NRZI + 位填充 兼容性高,但延迟大
USB 2.0 高速(High Speed) 480 Mbps NRZI + 位填充 半双工,适合批量传输
USB 3.x 超高速(SuperSpeed) 5 Gbps / 10 Gbps / 20 Gbps 8b/10b (Gen1), 128b/132b (Gen2) 全双工,瓶颈常在线缆和控制器

看到没有?USB 2.0用NRZI加位填充,编码效率低,有效带宽只有理论值的80%不到。而USB 3.0用8b/10b,开销20%。USB 3.2 Gen2×2用128b/132b,效率直接拉高。我记得去年调试一个USB 3.1 Gen2的摄像头项目,一直抱怨达不到10 Gbps,最后发现是线缆用的便宜货,屏蔽层不够,误码率飙高,重传吃掉带宽。

实际可用带宽 ≈ 理论速率 × 编码效率 − 协议开销 − 重传损失。调优目标是让重传损失控制在5%以内。

1.3 协议栈分层:物理层、链路层、协议层

USB的协议栈是分层设计的,跟OSI模型有点神似,但更简化。我习惯把调试过程也分层:先查物理层,再看链路层,最后确认协议层。顺序不能乱,否则你会疯掉。

物理层(PHY)

物理层管信号眼图、差分电压、阻抗匹配。USB 2.0用差分DP/DM,电压摆幅400mV;USB 3.0用 SSTX/SSRX 差分对,摆幅更低。我在一个项目中踩过坑:PCB走线没控制好特性阻抗(要求90Ω差分),导致眼图闭合,高速根本跑不起来。嗯,这是一笔血泪教训。

  • 信号完整性:阻抗控制、端接匹配、回流路径
  • 电气特性:差分电压、抖动、位填充
  • 检测机制:设备插入/拔出检测、速率协商

链路层(Link Layer)

链路层负责包的封装、错误检测和流量控制。USB 2.0用的是包框架:令牌包、数据包、握手包。USB 3.0引入了链路命令和链路训练。我记得刚开始搞USB 3.0时,不理解为什么链路层要做链路训练,后来发现是為了信号在5 Gbps下对齐锁相环,不然根本没法稳定通信。

  • 包类型:令牌()、数据(Data)、握手(Handshake)、特殊(Special)
  • 错误检测:CRC(循环冗余校验)
  • 流量控制:NACK机制、NRDY(USB 3.0)
  • 链路训练:USB 3.0启动时需完成极性、扰码、均衡协商

协议层(Protocol Layer)

协议层定义端点、管道、传输类型。USB有四种传输类型:控制传输(Control)、批量传输(Bulk)、中断传输(Interrupt)、等时传输(Isochronous)。你做OTG性能调优,最关心的就是批量传输,因为它承担大部分数据吞吐。

  • 控制传输:0号端点,用于配置和命令
  • 批量传输:大块数据,保证交付但不保证延迟(适合存储)
  • 中断传输:小数据、低延迟(适合HID)
  • 等时传输:实时数据,不保证交付(适合音视频)
性能调优中,等时传输的丢包率要特别小心。我有个朋友做USB麦克风,等时传输出错率高,音频有爆音,最后发现是主机没有预留足够的带宽。记住,等时传输需要预先分配总线时间。

好了,USB基础回顾大概就是这些。你可能会问,这些分层跟实际的OTG性能调优有什么关系?我举一个实际场景:你在调试手机外接U盘时发现速度慢,第一步应该测物理层的眼图,看信号有没有塌陷;第二步用逻辑分析仪抓链路层的重传率;第三步看协议层的端点配置是否过大或过小。一步步来,定位问题就快了。

USB全貌:架构-速率-分层 USB核心体系(第1章知识结构) USB体系架构 • 主从模型(Host ↔ Device) • OTG双角色(ID + HNP) • 集线器(Hub)扩展 • 单主多从,主机调度 速率等级 • LS: 1.5 Mbps • FS: 12 Mbps • HS: 480 Mbps • SS: 5 Gbps ~ 20 Gbps 协议栈分层 • 物理层(PHY) • 链路层(Link) • 协议层(Protocol) • 传输类型 4种 调优主线 1. 先确认物理层信号质量(眼图、抖动) → 2. 再检查链路层重传率 → 3. 最后优化协议层端点配置 OTG性能调优 = 架构选择 + 速率匹配 + 分层调试 USB基础回顾:三大支柱一图看懂