1. USB 协议概述:从诞生到 Type-C 的演进之路

大家好,欢迎来到这门课的第一章。咱们今天不聊枯燥的寄存器配置,先聊聊 USB 这个协议本身是怎么一路走到今天的。我做了十几年固件,从 USB 1.1 时代就开始跟它打交道,说实话,看着它从 12 Mbps 发展到 40 Gbps,还是挺感慨的。

USB 的全称是 Universal Serial Bus,中文叫通用串行总线。但你别被「串行」两个字骗了,觉得它慢。现在的 USB4,速度已经能跟雷电接口掰手腕了。

1.1 USB 的发展历史:三个关键节点

USB 标准的演进,说白了就是一部「速度与兼容」的博弈史。我把它分成三个阶段来讲:

阶段 代表版本 速率 核心变化
奠基期 USB 1.0 / 1.1 1.5 Mbps / 12 Mbps 取代串口并口,统一外设接口
普及期 USB 2.0 480 Mbps 引入微帧、高速模式,成为绝对主流
爆发期 USB 3.x / USB4 5 Gbps ~ 40 Gbps 全双工、双总线、Type-C 物理层统一

嗯,这里有个细节我想强调一下。USB 1.0 其实是个「半成品」,1996 年发布时连 Host Controller 的规范都没定死。真正可用的产品是 1998 年的 USB 1.1,那时候我还在学校,第一次用上 USB 鼠标,感觉比 PS/2 口方便太多了。

个人经验: 我在做嵌入式 Linux 驱动时,经常遇到 USB 1.1 设备在 USB 3.0 端口上枚举失败的情况。原因往往是线缆质量太差,或者设备端的终端电阻匹配有问题。别迷信「向下兼容」这四个字,硬件上的坑多着呢。

1.2 USB 2.0 标准:半双工的巅峰

USB 2.0 发布于 2000 年,把速率从 12 Mbps 直接拉到 480 Mbps。你想想看,40 倍的提升,这在当时简直是飞跃。

但有个问题——USB 2.0 是半双工的。什么意思?就是同一时刻只能有一方在发数据。主机发设备收,或者设备发主机收,不能同时进行。这一点跟后面的 USB 3.0 有本质区别。

USB 2.0 定义了三种速率模式:

  • 低速(Low Speed): 1.5 Mbps,用于鼠标、键盘等 HID 设备
  • 全速(Full Speed): 12 Mbps,用于音频、HID 等中等带宽设备
  • 高速(High Speed): 480 Mbps,用于存储、视频等大带宽设备

我刚开始做 USB 固件时,踩过一个坑:高速设备在枚举时,会先以全速模式握手,然后通过「Chirp J/K」信号切换到高速模式。如果硬件上 D+/D- 的走线不等长,这个切换就可能失败。设备会一直卡在全速模式,性能大打折扣。

避坑指南: 我曾经在一个项目中,USB 2.0 高速设备的批量传输速率死活上不去。查了两天才发现,是 PCB 上 D+ 和 D- 的差分阻抗没控制好,导致信号质量差,频繁重传。记住:USB 2.0 高速模式对 PCB 走线的要求比全速高一个数量级。

1.3 USB 3.x 标准:全双工的革命

USB 3.0 发布于 2008 年,代号 SuperSpeed。它最大的变化是什么?从半双工变成了全双工。

怎么做到的?很简单——加了一组独立的差分对。USB 2.0 只有 D+/D- 一组差分线,收发共用。USB 3.0 额外增加了 SSTX+/SSTX-(发送对)和 SSRX+/SSRX-(接收对),再加上地线,总共 9 根线。

这样一来,主机和设备可以同时收发数据,理论吞吐量翻倍。USB 3.0 的速率是 5 Gbps,USB 3.1 Gen 2 翻到 10 Gbps,USB 3.2 通过双通道达到 20 Gbps。

版本 商业名称 速率 编码方式
USB 3.0 SuperSpeed 5 Gbps 8b/10b
USB 3.1 Gen 2 SuperSpeed+ 10 Gbps 128b/132b
USB 3.2 Gen 2x2 SuperSpeed+ 双通道 20 Gbps 128b/132b

这里有个容易混淆的地方:USB 3.0、3.1、3.2 的物理层其实是一样的,只是协议层做了优化。我建议你在做固件开发时,直接把它们当成「不同速率等级的同一套硬件」来理解,这样设计驱动时思路会更清晰。

1.4 USB4 标准:融合与统一

USB4 是 2019 年发布的,它基于 Intel 的 Thunderbolt 3 协议。说白了,USB4 就是把雷电 3 的协议栈拿过来,改了个名字,然后强制要求兼容 USB 2.0 和 USB 3.x。

USB4 的核心特性:

  • 速率: 20 Gbps(Gen 2)或 40 Gbps(Gen 3)
  • 隧道协议: 支持 USB 3.x、DisplayPort、PCIe 在同一根线上传输
  • 主机到主机: 支持两台主机直连通信
  • 动态带宽分配: 根据应用需求实时调整各隧道带宽

我个人觉得,USB4 最大的意义不是速度,而是「统一」。你想想看,以前笔记本上要有 USB-A、HDMI、DP、雷电口,现在一个 Type-C 全搞定。这对固件开发者来说,意味着要处理更复杂的协议栈,但硬件设计反而简化了。

关键点: USB4 的隧道机制要求固件能够同时管理多个协议栈的调度。如果你只做过单纯的 USB 设备驱动,第一次接触 USB4 时可能会觉得头大。别慌,后面我们会专门用一章来拆解 USB4 的隧道协议。

1.5 USB Type-C 与 PD 协议简介

Type-C 是物理接口,不是协议标准。这一点很多人搞混。Type-C 接口可以跑 USB 2.0、USB 3.x、USB4、雷电 3/4,甚至只用来充电。

Type-C 的物理特性:

  • 正反可插: 24 个引脚对称分布,CC 引脚用于方向检测
  • 支持大电流: 默认 3A,通过 PD 协议可达 5A
  • 支持 Alternate Mode: 可以传输 DisplayPort、HDMI、Thunderbolt 等信号

PD(Power Delivery)协议是 Type-C 的「充电大脑」。它通过 CC 引脚通信,协商电压和电流。PD 3.0 支持最高 240W(48V/5A)的功率传输。

我在做 PD 固件时,遇到过最头疼的问题是「协议死锁」。比如,两个设备都认为自己该当 Source,结果一直协商不成功。后来发现是 CC 引脚的上拉/下拉电阻配置错了。嗯,这种问题用示波器抓 CC 引脚的波形,一眼就能看出来。

调试技巧: 如果你在做 Type-C 的 PD 开发,建议先买一个 CC 逻辑分析仪。几百块钱的东西,能帮你省下至少一周的调试时间。我当年就是靠它定位了一个 PD 协议栈的时序 bug。

1.6 本章知识体系总览

下面这张图,把 USB 协议栈的演进脉络和核心概念串在了一起。你可以把它当作本章的「思维导图」来用。

USB 协议栈演进与核心概念总览 USB 协议栈演进与核心概念总览 USB 1.0/1.1 1.5 / 12 Mbps USB 2.0 480 Mbps USB 3.x 5~20 Gbps USB4 20~40 Gbps 核心特性演进 半双工 → 全双工 轮询 → 异步通知 单通道 → 多通道 隧道协议 Type-C 与 PD 协议 Type-C 物理接口 正反插 · 24 引脚 · Alt Mode PD 协议 CC 通信 · 电压协商 · 最高 240W 调试要点 CC 波形 · 上拉/下拉电阻 说明:本图展示了 USB 协议栈从 1.0 到 USB4 的演进脉络,以及 Type-C 和 PD 协议的核心位置。

这张图里,我特意把「半双工→全双工」和「轮询→异步通知」这两条演进线标了出来。为什么?因为这是理解 USB 协议栈设计思想的关键。后面的章节,我们会反复回到这两个概念上。