USB(Universal Serial Bus,通用串行总线)是计算机和外部设备通信的标准化接口协议。自1996年发布USB 1.0以来,已经发展出多个版本(USB 2.0、USB 3.x、USB4),并广泛应用于PC、移动设备、嵌入式系统等领域。
1. USB协议版本及关键特性
版本 | 发布时间 | 最大速率 | 关键改进 |
---|---|---|---|
USB 1.0 | 1996 | 1.5 Mbps(Low Speed) 12 Mbps(Full Speed) | 首次标准化,支持热插拔 |
USB 2.0 | 2000 | 480 Mbps(High Speed) | 广泛兼容,支持OTG |
USB 3.0 | 2008 | 5 Gbps(SuperSpeed) | 全双工传输,提高能效 |
USB 3.1 | 2013 | 10 Gbps(SuperSpeed+) | 引入Type-C接口 |
USB 3.2 | 2017 | 20 Gbps(SuperSpeed+ 2x2) | 多通道传输 |
USB4 | 2019 | 40 Gbps(基于Thunderbolt 3) | 兼容雷电3,支持DP Alt Mode |
2. USB物理接口类型
USB接口形态多样,主要分为:
(1) 传统接口(USB-A / USB-B)
-
USB-A(Host端,如PC)
-
USB-B(Device端,如打印机)
-
Mini-USB / Micro-USB(旧款手机、移动设备)
(2) USB Type-C(现代标准)
-
对称设计(正反可插)
-
支持USB 3.1/3.2/USB4
-
支持Alternate Mode(如DisplayPort、Thunderbolt 3)
-
供电能力增强(USB PD,最高240W)
3. USB通信架构
(1) 拓扑结构
-
Host(主机):PC、手机(OTG模式下)
-
Device(设备):U盘、键盘、鼠标
-
Hub(集线器):扩展USB接口
(2) 数据传输模式
传输类型 | 用途 | 示例 |
---|---|---|
控制传输(Control) | 设备枚举、配置(Endpoint 0) | USB设备初始化 |
中断传输(Interrupt) | 低延迟、小数据量 | 键盘、鼠标 |
批量传输(Bulk) | 大数据量,无实时性要求 | U盘、打印机 |
等时传输(Isochronous) | 实时流数据(无重传) | 摄像头、音频设备 |
4. USB协议栈
(1) 物理层(PHY)
-
负责信号调制(NRZI编码、差分信号D+/D-)
-
USB 2.0:单通道差分对(D+/D-)
-
USB 3.0+:增加超高速差分对(SSRX+/SSTX+等)
(2) 链路层(Link Layer)
-
数据包(Packet)封装:
-
SYNC(同步)
-
PID(包标识,如DATA0/DATA1)
-
CRC(校验)
-
(3) 协议层(Protocol Layer)
-
设备枚举(Enumeration):Host识别Device并分配地址。
-
事务(Transaction):IN(Host读)、OUT(Host写)、SETUP(控制命令)。
(4) 应用层
-
设备类(Class):标准化接口(如HID、CDC、MSC)。
示例: - HID(Human Interface Device):键盘、鼠标 - CDC(Communication Device Class):虚拟串口 - MSC(Mass Storage Class):U盘
5. USB设备开发关键点
(1) 硬件设计
-
USB控制器(如STM32的USB OTG IP、FTDI的USB转串口芯片)。
-
ESD防护:TVS二极管防止静电损坏(如USBLC6-4SC6)。
-
阻抗匹配:USB 2.0差分线90Ω阻抗控制。
(2) 软件实现
-
设备描述符(Descriptor):定义设备类型、接口、端点。
// USB HID键盘描述符示例:
-
const uint8_t HID_ReportDescriptor[] = { 0x05, 0x01, // Usage Page (Generic Desktop) 0x09, 0x06, // Usage (Keyboard) 0xA1, 0x01, // Collection (Application) 0x05, 0x07, // Usage Page (Key Codes) 0x19, 0xE0, // Usage Minimum (0xE0) 0x29, 0xE7, // Usage Maximum (0xE7) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x08, // Report Count (8) 0x81, 0x02, // Input (Data, Var, Abs) };
-
协议栈选择:
-
嵌入式:LibUSB、STM32 USB库。
-
Linux:
usbcore
内核模块 + Gadget驱动。
-
(3) 调试工具
-
USB协议分析仪(如TotalPhase Beagle、Wireshark + USB抓包)。
-
逻辑分析仪(解码USB 2.0低速/全速信号)。
6. USB常见问题
(1) 兼容性问题
-
供电不足:USB 2.0设备插在USB 3.0端口可能因电流限制无法工作。
-
协议版本混淆:USB 3.0线缆必须支持超高速信号,否则降级为USB 2.0。
(2) 信号完整性
-
长线衰减:USB 2.0建议线长<5m,USB 3.0<3m。
-
EMI干扰:差分线需平行走线,避免跨分割。
(3) 软件配置
-
驱动缺失:Windows需安装INF驱动(如自定义HID设备)。
-
枚举失败:描述符错误导致Host拒绝设备。
7.USB OTG(on-the-go)
USB OTG(On-The-Go)是USB标准的扩展,允许设备(如手机、平板、嵌入式设备)在**主机(Host)和外设(Device)**模式之间动态切换,从而无需依赖PC即可直接与其他USB设备通信。
7.1. USB OTG 核心概念
(1) 与传统USB的区别
特性 | 传统USB | USB OTG |
---|---|---|
角色固定 | 主机(Host)或设备(Device)固定 | 可在Host/Device间动态切换(Dual-Role) |
供电方式 | 主机供电(5V/500mA) | 可协商供电(支持电池供电设备) |
典型应用 | PC连接U盘、键盘等 | 手机读取U盘、相机连接打印机等 |
(2) 关键术语
-
A-device(默认Host):提供VBUS电源(如手机连接U盘时)。
-
B-device(默认Device):消耗VBUS电源(如U盘被手机读取时)。
-
HNP(Host Negotiation Protocol):允许设备动态切换Host/Device角色。
-
SRP(Session Request Protocol):用于唤醒或协商供电。
7.2. USB OTG 硬件设计
(1) ID 引脚识别
-
Micro-USB/Mini-USB接口的ID引脚决定初始角色:
-
ID接地(0V) → 设备作为A-device(Host)(如OTG手机连接U盘)。
-
ID悬空/接高电平 → 设备作为B-device(Device)(如手机连接PC)。
-
-
Type-C接口:通过CC(Configuration Channel)引脚协商角色,无需ID引脚。
(2) VBUS供电管理
-
A-device需提供5V VBUS电源(通常通过PMIC或专用OTG芯片如TPS65133)。
-
B-device检测VBUS电压(>4.4V)以确认连接。
(3) 典型电路设计
Micro-USB OTG 连接示例: ┌───────────────┐ ┌───────────────┐ │ OTG设备 │ │ 外设(U盘) │ │ │ │ │ │ VBUS ────────┼───────┼─► VBUS │ │ D+ ────────┼───────┼─► D+ │ │ D- ────────┼───────┼─► D- │ │ GND ────────┼───────┼─► GND │ │ ID ────┐ │ │ │ │ ˅ │ │ │ │ (接地) │ │ │ └───────────────┘ └───────────────┘
7.3. USB OTG 协议与软件支持
(1) 协议栈
-
USB 2.0 + OTG补充协议:支持HNP/SRP协商。
-
Linux/Android:通过
dwc2
/dwc3
驱动支持OTG(如/sys/kernel/debug/usb/
目录下的角色切换)。 -
嵌入式系统(STM32等):需启用USB OTG库(如STM32Cube的
HAL_PCD
和HAL_HCD
)。
(2) 常见应用场景
场景 | 角色切换 | 示例 |
---|---|---|
手机读取U盘 | 手机(Host) ↔ U盘(Device) | 通过OTG线连接FAT32格式U盘。 |
两台手机互传文件 | 动态切换Host/Device(需HNP支持) | 通过USB OTG + 文件传输协议(MTP)。 |
嵌入式设备调试 | MCU(Host) ↔ PC(Device) | STM32通过USB CDC虚拟串口输出日志。 |
7.4. USB OTG 常见问题
(1) 兼容性问题
-
电压不足:部分设备VBUS输出电流不足(如<500mA),导致外设无法工作。
解决方案:外接供电或使用带电源的USB Hub。 -
协议不支持:旧设备可能仅支持USB 2.0,无法触发OTG模式。
(2) 软件配置
-
Android设备:需内核启用OTG驱动,部分厂商可能禁用此功能。
-
嵌入式MCU:需正确配置USB时钟和引脚复用(如STM32的
PA11/PA12
)。
(3) 物理接口
-
Type-C替代Micro-USB:Type-C通过CC引脚实现更灵活的DRP(Dual-Role Power)模式。
8. 总结
-
USB协议是分层设计的复杂标准,涵盖物理接口、数据链路、协议栈和应用层。
-
关键设计点:
-
硬件:接口类型(Type-C/A/B)、ESD防护、阻抗控制。
-
软件:设备描述符、协议栈(HID/CDC/MSC)、Host/Device角色管理。
-
-
未来趋势:USB4/Thunderbolt 4统一高速接口,支持40Gbps + DP Alt Mode。