1. USB体系概述:USB 2.0/3.0/3.1/Type-C物理层差异、USB主机与设备控制器、OTG与DRD模式

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控制器,否则系统无法正确识别插入方向和供电能力。
USB物理层演进对比图 USB 2.0 PHY D+ / D- 半双工 NRZI编码 480 Mbps USB 3.0 PHY SSTX+/− + SSRX+/− 8b/10b编码 5 Gbps USB 3.1 PHY 128b/132b编码 10 Gbps Gen2 USB Type-C 连接器 24引脚 · 正反插 · CC协商 · PD供电 关键差异总结 • USB 2.0与3.x PHY不兼容,需要独立的PHY IP或组合PHY • Type-C不改变USB协议,但改变了物理连接和供电管理方式 • 设备树中需要为每个PHY实例分配独立的reg和时钟资源

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配置为设备模式,控制器将无法正确初始化。
USB主机与设备控制器架构 主机控制器(Host) • xHCI / EHCI / OHCI • 管理总线调度 • 处理传输描述符(TD) • 根集线器(Root Hub) 设备控制器(Device) • DWC2 / DWC3 / ChipIdea • 端点管理(EP0–EP15) • FIFO与DMA引擎 • 中断与复位处理 USB总线 USB PHY(物理层) UTMI / ULPI / PIPE3 接口 设备树绑定要点 主机控制器使用usb-phy属性引用PHY节点;设备控制器使用phys = <&usb2_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,控制器将降级到对应速度模式。
OTG与DRD角色切换流程 OTG 角色切换流程 ID引脚检测 HNP协商 断开总线 重新枚举 DRD 角色切换流程 CC引脚协商 Role Swap 无缝切换 保持连接 设备树配置对比示例 OTG设备树(DWC2): dr_mode = "otg"; g-np-tx-fifo-size = <512>; g-rx-fifo-size = <1024>; DRD设备树(DWC3): dr_mode = "otg"; usb2-phy = <&usb2_phy>; usb3-phy = <&usb3_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和时钟/复位资源完整