1. USB协议基础:USB发展史、USB物理层与电气特性、USB拓扑结构、USB数据流模型

大家好,我是你们的硬件工程师老张。今天咱们开始第一课,聊聊USB协议的基础。说实话,USB这东西,我们天天用,但真正把它吃透的人不多。我当年刚入行时,也踩过不少坑。这节课,我就把那些年积累的经验,掰开了揉碎了讲给你们听。

1.1 USB发展史:从1.0到4.0的演进

USB的全称是Universal Serial Bus,通用串行总线。1994年,Intel、IBM、Microsoft等七家公司联合搞出了这个标准。为啥要搞它?说白了,就是当时电脑后面的接口太乱了——串口、并口、PS/2、游戏口...插个鼠标都要对半天。

USB 1.0/1.1(1996-1998):速度只有1.5Mbps(低速)和12Mbps(全速)。我记得第一次用USB鼠标时,感觉整个世界都清爽了——终于不用关机插拔了!

USB 2.0(2000):速度飙到480Mbps,也就是高速模式。这个版本生命力极强,到现在很多设备还在用。我做过一个项目,客户非要坚持用USB 2.0,说“够用就行”。嗯,有时候确实是这样。

USB 3.0/3.1/3.2(2008-2017):速度从5Gbps一路干到20Gbps。这里有个坑要注意——USB 3.0后来改名叫USB 3.1 Gen1,USB 3.1改叫USB 3.1 Gen2...命名乱得很。我建议你们直接看速度:5Gbps、10Gbps、20Gbps,别管它叫什么。

USB4(2019):基于Thunderbolt 3协议,最高40Gbps。Type-C接口一统天下。说实话,到了这个阶段,USB已经不是一个简单的“串行总线”了,它更像是一个万能的数据管道。

核心要点:USB版本的命名虽然混乱,但记住一个规律——看速度,别看名字。5Gbps就是USB 3.0,10Gbps就是USB 3.1,20Gbps就是USB 3.2,40Gbps就是USB4。

1.2 USB物理层与电气特性

物理层,说白了就是信号怎么在线上跑。USB用差分信号传输,D+和D-两根线。为什么用差分?抗干扰能力强啊!你想想看,如果外界有噪声,两根线上受到的干扰差不多,一减就没了。

电气特性关键参数:

参数 低速/全速 高速 超高速
信号电压 3.3V(差分) 400mV(差分) 800mV-1.2V
终端电阻 15kΩ上拉 45Ω对地 差分阻抗90Ω
线缆长度 5米 5米 3米

这里有个我踩过的坑。有一次做USB 2.0高速设备,信号死活不稳定。查了两天,最后发现是D+和D-的走线长度差了3mm。高速模式下,信号上升沿只有几百皮秒,这点长度差就导致时序出问题了。所以,差分对等长布线,这是铁律。

警告:USB 2.0高速模式下,D+和D-的走线长度差不要超过5mm。我曾经因为3mm的误差,让整个项目延期了一周。别问我怎么知道的...

再说说终端电阻。低速和全速设备,在D+或D-上有个15kΩ的上拉电阻,用来告诉主机“我是什么速度”。高速设备则是在D+上有个1.5kΩ的上拉,但工作起来后要切掉。嗯,这个切换过程叫“高速握手”,挺复杂的,后面章节会细讲。

1.3 USB拓扑结构:星形网络

USB的拓扑结构是星形的。一个主机(Host),下面挂集线器(Hub),集线器再挂设备。最多支持127个设备(包括Hub本身)。

为什么是星形?不是菊花链?我个人的理解是:USB设计之初就是为了替代PC上的各种外设接口,星形结构最符合“一个主机带多个外设”的使用场景。你想想看,谁会把打印机、键盘、鼠标串成一串?

拓扑结构的关键角色:

  • 主机(Host):唯一的主控者,所有通信由它发起。PC、手机、平板都可以是Host。
  • 集线器(Hub):负责扩展端口,转发数据。分上游端口和下游端口。
  • 设备(Device):被控者,只能响应主机的请求。
  • OTG(On-The-Go):可以切换角色,手机既能当Host也能当Device。

这里有个容易混淆的点:USB不支持设备间直接通信。两个U盘插在同一个Hub上,它们之间不能直接传数据,必须经过主机中转。为什么?因为USB是主从架构,所有数据流都要经过主机。这个设计简化了协议,但也限制了灵活性。

小技巧:如果你需要设备间直接通信,可以考虑USB OTG或者USB-C的Alternate Mode。但记住,这已经不是标准的USB协议了。

1.4 USB数据流模型:管道与端点

数据流模型,是USB协议最核心的部分。我当年学这个的时候,绕了好久才搞明白。说白了,就是数据怎么在主机和设备之间流动。

端点(Endpoint):设备上的一个数据缓冲区。每个设备可以有多个端点,编号从0到15。端点0是控制端点,每个设备必须有。其他端点根据设备功能来定。

管道(Pipe):主机和设备端点之间的逻辑连接。管道有两种:消息管道(Message Pipe)和流管道(Stream Pipe)。

传输类型(Transfer Type):

传输类型 特点 应用场景 带宽保证
控制传输 双向,可靠,用于配置 枚举、设置参数 10%保留
批量传输 可靠,无带宽保证 U盘、打印机
中断传输 可靠,有轮询周期 鼠标、键盘 有(按轮询间隔)
同步传输 不可靠,有带宽保证 音频、视频 有(按帧预算)

我举个例子你就明白了。U盘用批量传输,因为数据必须完整无误,慢一点没关系。摄像头用同步传输,因为画面可以丢几帧,但不能卡顿。鼠标用中断传输,因为需要及时响应,但数据量小。

这里有个坑:同步传输没有重传机制。如果数据传错了,就丢了。所以做音频设备时,一定要在应用层做纠错。我曾经做过一个USB麦克风,客户说声音偶尔有爆音,查了半天,就是同步传输丢包导致的。后来加了前向纠错(FEC),问题解决。

核心要点:选择传输类型时,记住这个原则——数据完整性要求高的用批量或控制,实时性要求高的用同步或中断。鱼和熊掌不可兼得。

最后说说帧(Frame)的概念。USB 1.0/2.0中,主机每1ms发送一个SOF(Start of Frame)包,这就是一个帧。高速模式下,帧周期是125μs(微帧)。所有传输都在帧内进行。这个机制保证了总线的公平性——每个设备都有机会传输数据。

好了,第一课就到这里。USB协议基础是后面所有章节的基石,尤其是数据流模型,一定要吃透。下一课我们讲USB枚举过程——设备插上去之后,主机是怎么认识它的。到时候我会分享一个我调试枚举失败的案例,保证让你印象深刻。