1. USB体系概述
1.1 USB标准演进与物理层差异
USB(Universal Serial Bus)自1996年问世以来,经历了从低速到超高速、从单一功能到多功能复用的演进。物理层(PHY)是USB体系中直接处理电气信号、编码/解码、时钟恢复和线路状态的部分,不同USB标准在物理层上有本质差异。
核心要点:USB 2.0与USB 3.x的物理层完全不兼容——USB 2.0使用半双工差分信号,USB 3.x使用全双工差分对,且增加了独立的发送和接收通道。
1.1.1 USB 2.0 物理层特性
- 信号线:D+ / D- 一对差分数据线
- 传输模式:半双工,同一时刻只能发送或接收
- 速度等级:Low Speed (1.5 Mbps)、Full Speed (12 Mbps)、High Speed (480 Mbps)
- 编码方式:NRZI(Non-Return-to-Zero Inverted)+ 位填充(Bit Stuffing)
- 终端匹配:通过D+/D-上的上拉/下拉电阻识别设备速度
- 供电:VBUS (4.75V–5.25V),最大500mA
1.1.2 USB 3.0 / 3.1 物理层特性
- 信号线:增加 SSTX+/- 和 SSRX+/- 两对差分线,保留D+/D-用于兼容
- 传输模式:全双工,发送和接收可同时进行
- 速度等级:SuperSpeed (5 Gbps)、SuperSpeed+ (10 Gbps)
- 编码方式:8b/10b(USB 3.0)→ 128b/132b(USB 3.1 Gen2)
- 终端匹配:独立阻抗匹配,不再依赖上拉电阻识别速度
- 供电:VBUS,最大900mA(USB 3.0)
1.1.3 USB Type-C 物理层新特性
Type-C连接器并非新的USB标准,而是一种全新的物理接口规范,它重新定义了引脚布局和信号路由方式。
| 特性 | 传统Type-A/B | Type-C |
|---|---|---|
| 引脚数量 | 4 (USB 2.0) / 9 (USB 3.0) | 24 |
| 正反插 | 不支持 | 支持(CC1/CC2检测) |
| 供电能力 | 最大5V/2A | 最大20V/5A(USB PD) |
| 备用模式 | 不支持 | 支持DisplayPort/Thunderbolt |
| 信号复用 | 固定分配 | 通过CC通道协商 |
实战提示:在设备树中配置Type-C PHY时,必须描述CC逻辑的GPIO连接和PD控制器,否则系统无法正确识别插入方向和供电能力。
1.2 USB主机控制器与设备控制器
在嵌入式系统中,USB控制器分为主机侧(Host Controller)和设备侧(Device Controller/Peripheral Controller)两大类。两者在硬件架构、寄存器接口和驱动模型上存在显著差异。
1.2.1 主机控制器(Host Controller)
- EHCI:Enhanced Host Controller Interface,支持USB 2.0 High Speed
- OHCI/UHCI:支持USB 1.x Full/Low Speed,OHCI更常见于嵌入式
- xHCI:eXtensible Host Controller Interface,支持USB 3.x/2.0/1.x全兼容
- 职责:管理总线调度、处理传输描述符、处理中断、控制根集线器
1.2.2 设备控制器(Device Controller)
- 常见IP:Synopsys DWC2(USB 2.0 OTG)、DWC3(USB 3.0/3.1 DRD)
- 职责:响应主机请求、管理端点(Endpoint)、处理控制/批量/中断/等时传输
- 寄存器模型:通常包含端点寄存器、FIFO控制、DMA引擎、中断状态
| 对比维度 | 主机控制器 | 设备控制器 |
|---|---|---|
| 总线角色 | 发起传输、调度事务 | 响应传输、提供端点 |
| 驱动模型 | usb_hcd → usb_bus_type | usb_gadget → usb_udc |
| 中断触发 | 根集线器状态变化、传输完成 | 端点事件、复位、挂起 |
| 设备树兼容字符串 | “generic-ehci”, “generic-ohci” | “snps,dwc2”, “snps,dwc3” |
| 典型应用 | 嵌入式主板、开发板 | 手机、平板、IoT设备 |
常见陷阱:在设备树中同时描述主机和设备功能时,必须正确设置dr_mode属性。如果dr_mode = "host"但PHY配置为设备模式,控制器将无法正确初始化。
1.3 OTG与DRD模式
OTG(On-The-Go)和DRD(Dual-Role Device)是嵌入式USB设备支持主机/设备角色切换的两种技术方案。理解它们的差异对于正确配置设备树和PHY至关重要。
1.3.1 OTG(USB 2.0时代)
- 硬件特征:增加ID引脚(Mini/Micro-AB连接器),通过ID电平判断角色
- 协议特征:支持SRP(Session Request Protocol)和HNP(Host Negotiation Protocol)
- 典型IP:Synopsys DWC2 OTG
- 限制:角色切换需要断开USB总线重新枚举,切换延迟较大
1.3.2 DRD(USB 3.0+时代)
- 硬件特征:基于Type-C CC逻辑,通过CC引脚协商角色
- 协议特征:支持Role Swap,无需断开总线即可切换
- 典型IP:Synopsys DWC3 DRD
- 优势:切换速度快,支持USB 3.x超高速,兼容Type-C
| 对比维度 | OTG | DRD |
|---|---|---|
| 适用标准 | USB 2.0 | USB 3.0 / 3.1 / Type-C |
| 角色检测 | ID引脚电平 | CC引脚协商 |
| 切换协议 | HNP / SRP | Role Swap / Try.SRC / Try.SNK |
| 切换时是否断开 | 是(需重新枚举) | 否(无缝切换) |
| 设备树dr_mode | "otg" | "peripheral" / "host" / "otg" |
| PHY需求 | 单PHY(UTMI/ULPI) | 双PHY或组合PHY |
实战提示:在设备树中配置DWC3 DRD时,通常需要同时绑定usb2-phy和usb3-phy两个PHY节点。如果只绑定一个PHY,控制器将降级到对应速度模式。
1.4 设备树中USB控制器与PHY的绑定模型
在嵌入式Linux中,设备树(Device Tree)是描述硬件拓扑和资源配置的标准方式。USB控制器和PHY的绑定遵循固定的节点结构和属性约定。
1.4.1 基本绑定结构
/* USB 2.0 OTG控制器(DWC2)设备树节点示例 */
usb_otg: usb@49000000 {
compatible = "snps,dwc2";
reg = <0x49000000 0x10000>;
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clk_usb_otg>;
clock-names = "otg";
resets = <&rst USB_OTG_RESET>;
phys = <&usb2_phy>;
phy-names = "usb2-phy";
dr_mode = "otg";
g-np-tx-fifo-size = <512>;
g-rx-fifo-size = <1024>;
status = "okay";
};
/* USB PHY节点示例 */
usb2_phy: phy@4a000000 {
compatible = "ti,am335x-usb-phy";
reg = <0x4a000000 0x1000>;
clocks = <&clk_usb_phy>;
clock-names = "phy";
#phy-cells = <0>;
status = "okay";
};
1.4.2 关键属性说明
| 属性名 | 含义 | 可选值 |
|---|---|---|
| compatible | 驱动匹配字符串 | "snps,dwc2", "snps,dwc3", "generic-ehci" |
| reg | 寄存器基地址和范围 | 物理地址 + 长度 |
| interrupts | 中断号及触发类型 | GIC_SPI / GIC_PPI + 中断号 |
| phys | 引用的PHY节点列表 | <&phy_node> 或 <&phy2 &phy3> |
| dr_mode | 双角色模式 | "host", "peripheral", "otg" |
| #phy-cells | PHY说明符的单元数 | 0(无参数)或 1(带索引) |
关键提醒:PHY节点的#phy-cells属性必须与控制器节点的phys属性中的参数数量匹配。例如,#phy-cells = <0>时,phys = <&phy>;#phy-cells = <1>时,phys = <&phy 0>。
1.5 本章小结
- USB 2.0与USB 3.x物理层在信号线数量、编码方式、传输模式上存在根本差异,设备树中需要为不同PHY分配独立的资源
- 主机控制器(EHCI/xHCI)和设备控制器(DWC2/DWC3)使用不同的驱动模型和设备树兼容字符串
- OTG(USB 2.0)和DRD(USB 3.x/Type-C)在角色切换机制上不同,设备树中通过dr_mode属性控制
- Type-C连接器引入了CC逻辑和PD供电,需要在设备树中描述额外的GPIO和电源管理节点
- 正确的PHY绑定是USB控制器正常工作的前提,必须确保phys、#phy-cells和时钟/复位资源完整