1. USB协议基础:总线架构、物理层信号、电气特性与连接器规范

大家好,我是你们这堂课的主讲。做USB驱动开发这么多年,我最大的感受就是——协议基础不牢,后面调试会哭。尤其是物理层和电气特性这块,很多人觉得枯燥跳过,结果板子调不通的时候,连从哪下手都不知道。

这一章,咱们就把USB的“底裤”扒开看看。从总线怎么搭的,到信号怎么跑的,再到插头长啥样,一次性讲透。

1.1 USB总线架构:从Host到Device的层级关系

USB总线是个主从结构。说白了,所有通信都由Host(主机)发起,Device(设备)只能被动响应。你想想看,U盘插到电脑上,它不会主动跟电脑说“嘿,我来了”,而是电脑先问“谁在那?”,U盘才回答。

整个架构分三层:

  • Host(主机):唯一的总线控制器,负责调度所有传输。PC、手机做主模式时都是Host。
  • Hub(集线器):负责扩展端口,转发Host的请求。我遇到过不少新手把Hub当成中继器,其实Hub会参与协议层的包转发,不是简单的信号放大。
  • Device(设备):功能设备,比如鼠标、键盘、摄像头。每个Device内部还有一个或多个Endpoint(端点),这才是真正的数据收发单元。

关键概念:USB采用轮询式通信。Host按固定时间片(Frame/Microframe)轮询各个Device的端点。设备不能主动发数据,只能等Host来“取”。

我刚开始做驱动时,总想当然地认为设备可以主动发中断给Host,结果死活调不通。后来翻协议才发现——USB的中断传输,其实是Host定期轮询设备的中断端点,设备有数据就回复,没有就NAK。嗯,这个坑我替你们踩过了。

1.2 USB物理层信号:差分传输与编码

USB物理层用的是差分信号,两根线:D+ 和 D-。信号靠两根线的电压差来传递,不是单端对地电平。这样做的好处是抗干扰能力强,共模噪声会被抵消掉。

USB 2.0及以下用的是NRZI编码(Non Return to Zero Inverted)。规则很简单:

  • 数据位为0时,信号翻转
  • 数据位为1时,信号保持不变

但有个问题——如果连续传输多个1,信号就不变了,接收端没法同步时钟。所以USB引入了位填充(Bit Stuffing):连续6个1之后,强制插入一个0,让信号强制翻转一次。

个人经验:调试USB信号时,示波器看D+和D-的差分波形,别只看单根线。我曾经被一根虚焊的D-线坑了整整两天,单根看波形都正常,差分对就是没信号。

1.3 USB电气特性:电压、电流与电平标准

USB的供电和信号电平,不同版本差别挺大。我整理了一张表,方便大家对照:

参数 USB 1.x / 2.0 USB 3.x USB Type-C (PD)
信号电压 3.3V(差分摆幅约400mV) 差分对,摆幅更低 同USB 3.x
VBUS电压 4.75V ~ 5.25V 5V(标准),可协商更高 5V ~ 20V(PD协商)
最大电流 500mA(USB 2.0) 900mA(USB 3.0) 最高5A(PD)
信号速率 1.5Mbps / 12Mbps / 480Mbps 5Gbps / 10Gbps / 20Gbps 取决于版本

这里有个容易忽略的点:USB 2.0高速模式(480Mbps)的差分摆幅只有400mV左右,比全速(12Mbps)的3.3V摆幅低很多。我见过有人用全速的线缆跑高速,结果眼图一塌糊涂。

避坑指南:USB线缆不是随便什么线都能用的。高速信号对线缆的阻抗(90Ω ±15%差分阻抗)、屏蔽、长度都有严格要求。我曾经为了省成本,用普通排线飞了一根USB 2.0高速线,结果信号反射严重,根本枚举不过。

1.4 USB连接器与线缆规范

连接器这块,种类不少,但核心就几种。我按接口类型给大家捋一遍:

  • Type-A:最常见的方形口,Host端专用。4针(USB 2.0)或9针(USB 3.0)。
  • Type-B:方形但带斜角,Device端用。打印机、显示器上常见。
  • Mini-USB / Micro-USB:老式手机、嵌入式设备常用。Micro-USB有5针,多了一根ID线用于OTG识别。
  • Type-C:24针,正反可插,支持PD快充、高速数据、音视频交替模式。现在几乎一统天下了。

线缆内部结构也有讲究:

  • USB 2.0线缆:4根线——VBUS(红)、D-(白)、D+(绿)、GND(黑),外加屏蔽层。
  • USB 3.0线缆:9根线——多了SSTX+/-、SSRX+/-两对差分线和一根GND。
  • Type-C全功能线缆:内部有eMarker芯片,用于识别线缆能力(电流、速率、版本)。

我建议:做嵌入式USB设备时,尽量用Type-C接口。虽然焊接难度大一点,但正反插、支持PD、高速信号完整性更好。Micro-USB的寿命和可靠性真的不行,我手头好几块开发板都是Micro-USB座子先坏。

1.5 知识结构总览:一张图看懂USB协议基础

下面这张SVG图,把USB协议基础的核心知识点串起来了。从总线架构到物理层,再到连接器,一目了然:

USB协议基础知识结构图 USB协议基础核心知识结构 USB总线架构 Host(主机) Hub(集线器) Device(设备)→ Endpoint 主从结构,轮询式通信 物理层信号 差分信号(D+ / D-) NRZI编码 + 位填充 同步域(SYNC) 连续6个1后插入0 电气特性 VBUS: 5V(标准) 电流: 500mA~5A 差分摆幅: ~400mV(HS) 阻抗: 90Ω差分 连接器与线缆规范 Type-A / Type-B / Mini / Micro / Type-C 线缆: VBUS, D+, D-, GND (+ SSTX/SSRX) Type-C: 24针, eMarker芯片, PD协商 阻抗匹配、屏蔽、长度限制 理解这四层,USB驱动开发就有了地基。后面章节会逐层深入。

1.6 小结:这一章你该带走什么?

USB协议基础,说白了就是搞明白三件事:

  1. 谁说了算——Host永远是老大,设备只能听话。
  2. 信号怎么跑——差分对、NRZI编码、位填充,这些是物理层的硬规矩。
  3. 接口长啥样——Type-A、Type-C、线缆颜色、阻抗要求,做硬件选型时一个都不能错。

我个人习惯是,每接触一个新USB芯片,先把它的物理层配置(电压、终端电阻、信号摆幅)和参考设计里的连接器型号核对一遍。很多驱动调不通,根因其实在硬件层。