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协议基础的核心知识点串起来了。从总线架构到物理层,再到连接器,一目了然:
1.6 小结:这一章你该带走什么?
USB协议基础,说白了就是搞明白三件事:
- 谁说了算——Host永远是老大,设备只能听话。
- 信号怎么跑——差分对、NRZI编码、位填充,这些是物理层的硬规矩。
- 接口长啥样——Type-A、Type-C、线缆颜色、阻抗要求,做硬件选型时一个都不能错。
我个人习惯是,每接触一个新USB芯片,先把它的物理层配置(电压、终端电阻、信号摆幅)和参考设计里的连接器型号核对一遍。很多驱动调不通,根因其实在硬件层。