支持作者,点击京东购买作者创作书籍《Yocto项目实战教程:高效定制嵌入式Linux系统》
USB(Universal Serial Bus)是现代嵌入式系统和通用计算平台中的关键通信接口,它以其即插即用、统一协议、多种速率等级和强大的主从控制能力成为设备通信的核心。本文聚焦 USB 的硬件原理与电气架构,旨在为工程师提供准确、完整的底层知识体系。
一、USB 接口与物理连接
1.1 USB 接口类型
USB 接口主要分为以下几种:
类型 | 常见形态 | 用途 |
---|---|---|
USB-A | 主机侧接口,矩形 | 台式电脑、嵌入式主板 Host 口 |
USB-B | 设备侧接口,方形 | 打印机、工业控制设备 |
Micro-USB / Mini-USB | 小型设备接口 | 老式手机、嵌入式板卡 |
USB-C | 可正反插、支持 OTG/PD | 新一代手机、开发板、笔记本 |
![]() |
1.2 USB 线缆结构
- VBUS(红线):主机供电,5V
- GND(黑线):地线
- D+(绿线) / D-(白线):差分数据线
- ID(可选):Micro-USB OTG 模式识别
二、USB 电气与信号传输
2.1 差分信号与 NRZI 编码
USB 使用 D+/D- 进行差分传输,有效提高抗干扰能力,采用 NRZI 编码 和 位填充(bit stuffing) 技术。
- Full-Speed(USB 1.1):12 Mbps
- High-Speed(USB 2.0):480 Mbps
- SuperSpeed(USB 3.0/3.1):5 Gbps / 10 Gbps,新增 TX/RX 对(USB 3.x 不再复用 D+/D-)
2.2 上拉电阻与速度识别
USB 设备在插入总线时,会通过 D+ 或 D- 上拉电阻向主机宣告其速率:
- D+ 上拉 → Full Speed(12 Mbps)
- D- 上拉 → Low Speed(1.5 Mbps)
- SuperSpeed 通过额外引脚检测
三、USB 控制器与协议机制
3.1 USB 控制器结构
SoC 中的 USB 控制器是 USB 子系统的核心,主要分为:
- Host Controller:控制 USB 总线(如 EHCI、xHCI、DWC3)
- Device Controller:响应主机控制(如 ChipIdea、DWC2)
- Dual Role Controller:支持 OTG 动态切换(如 NXP i.MX 的 USB OTG)
3.2 Endpoint 与 Pipe
- Endpoint(端点):USB 设备上的逻辑通道,如 ep0(控制端点)
- Pipe(管道):主机与端点之间的通信通道,由主机控制
每个 USB 设备有最多 16 个端点(IN/OUT 各 16),每个端点具有独立的 FIFO、缓冲控制和状态寄存器。
四、USB 架构:主机与设备模型
4.1 主从结构(Host-Device)
-
主机(Host) 负责:
- 供电(VBUS)
- 轮询枚举设备
- 控制总线传输
-
设备(Device) 负责:
- 上电后通过上拉电阻被主机检测
- 回复主机控制请求
- 通过 Endpoint 进行传输
4.2 USB 枚举过程
- 主机检测新设备连接(上拉电阻变化)
- 向设备地址 0 发送
GET_DESCRIPTOR
- 分配设备地址
- 请求设备配置,设置端点
- 驱动匹配成功,启动通信
五、OTG 硬件机制与角色切换
OTG(On-The-Go)是一种允许 USB 设备在 Host/Device 之间动态切换的标准,其硬件基础依赖:
- ID 引脚:在 Micro-USB 中决定角色(接地为 Host,悬空为 Device)
- VBUS 检测:检测供电状态判断当前角色
- OTG 控制器:支持 SRP(Session Request Protocol)和 HNP(Host Negotiation Protocol)角色切换
OTG 的核心应用场景包括:
- 手机与 USB 外设(如 U 盘)
- 嵌入式板卡进入烧录模式(如 NXP i.MX 使用 UUU 工具)
六、USB 硬件调试与识别
在 Linux 系统中,可以通过如下工具进行硬件识别与调试:
lsusb # 查看所有 USB 设备
lsusb -t # 查看 USB 层级与速度
usb-devices # 查看每个设备详细信息
dmesg | grep usb # 查看 USB 连接日志
常见调试问题:
问题 | 原因 |
---|---|
无法识别设备 | 控制器未初始化 / PHY 电源未打开 |
枚举失败 | VBUS 电压不足 / 设备端未上拉 |
SuperSpeed 无法识别 | 线缆不兼容 / USB3.0 PHY 驱动未加载 |
结语
USB 的硬件结构看似简单,实则隐藏着丰富的控制逻辑、电气机制与协议设计。从控制器选择、PHY 配置,到主从角色转换,每一个环节都对系统稳定性有重要影响。理解 USB 硬件原理,是掌握 USB 驱动开发与系统设计的第一步。
下一篇将进入 USB 的软件结构与驱动开发框架,解析 USB 栈的注册、匹配、通信与用户态接口实现。