深入解析RK3568 USB3.0控制器:DWC3驱动在Host与OTG模式下的设备树配置实战
RK3568作为Rockchip新一代中高端处理器,其USB3.0控制器基于Synopsys DesignWare Core (DWC3) IP实现,支持Host和OTG两种工作模式。在实际嵌入式开发中,正确配置设备树是确保USB功能正常工作的关键。本文将深入分析usbdrd30(OTG)和usbhost30(Host)两个DWC3控制器节点的配置差异,帮助开发者从"复制粘贴"进阶到"理解定制"。
1. RK3568 USB3.0控制器架构概览
RK3568芯片内部集成了两个独立的USB3.0控制器,分别标记为USB3.0 OTG Controller和USB3.0 Host Controller。这两个控制器虽然都基于DWC3 IP核,但在硬件连接和功能定位上有明显区别:
- USB3.0 OTG Controller:支持OTG功能,可动态切换Host/Device角色
- USB3.0 Host Controller:专用于Host模式,提供更稳定的主机功能
硬件连接上,两个控制器分别对应不同的PHY:
- OTG控制器连接
combphy0_us(USB3.0 PHY)和u2phy0_otg(USB2.0 PHY) - Host控制器连接
combphy1_usq(USB3.0 PHY)和u2phy0_host(USB2.0 PHY)
// OTG控制器PHY连接示例 phys = <&u2phy0_otg>, <&combphy0_us PHY_TYPE_USB3>; phy-names = "usb2-phy", "usb3-phy"; // Host控制器PHY连接示例 phys = <&u2phy0_host>, <&combphy1_usq PHY_TYPE_USB3>; phy-names = "usb2-phy", "usb3-phy";2. 设备树关键配置参数解析
2.1 工作模式配置(dr_mode)
dr_mode属性决定控制器的工作模式,是Host与OTG配置最核心的差异点:
| 模式 | 适用控制器 | 描述 |
|---|---|---|
| "host" | usbhost30 | 强制作为Host使用,不能切换为Device |
| "otg" | usbdrd30 | 支持角色切换,可根据ID引脚或协议协商决定Host/Device角色 |
| "peripheral" | usbdrd30 | 强制作为Device使用 |
// Host模式配置示例 usbhost_dwc3: dwc3@fd000000 { compatible = "snps,dwc3"; dr_mode = "host"; // ...其他配置 }; // OTG模式配置示例 usbdrd_dwc3: dwc3@fcc00000 { compatible = "snps,dwc3"; dr_mode = "otg"; // ...其他配置 };2.2 时钟与电源域配置
RK3568的USB3.0控制器涉及复杂的时钟和电源域管理,两个控制器有独立的时钟树:
| 时钟信号 | OTG控制器 | Host控制器 |
|---|---|---|
| 参考时钟(ref_clk) | CLK_USB3OTG0_REF | CLK_USB3OTG1_REF |
| 挂起时钟(suspend_clk) | CLK_USB3OTG0_SUSPEND | CLK_USB3OTG1_SUSPEND |
| 总线时钟(bus_clk) | ACLK_USB3OTG0 | ACLK_USB3OTG1 |
| Pipe时钟(pipe_clk) | PCLK_PIPE | PCLK_PIPE |
电源域方面,两个控制器共享RK3568_PD_PIPE电源域,但PHY可能有独立的电源控制。
2.3 复位信号配置
复位信号是另一个关键差异点,两个控制器使用不同的复位线:
// OTG控制器复位配置 resets = <&cru SRST_USB3OTG0>; reset-names = "usb3-otg"; // Host控制器复位配置 resets = <&cru SRST_USB3OTG1>; reset-names = "usb3-host";注意:复位信号配置错误可能导致控制器无法正常工作,务必与硬件设计核对
3. PHY配置与硬件连接
RK3568的USB PHY配置较为复杂,涉及CombPHY和USB2 PHY的组合使用。以下是典型配置对比:
3.1 OTG控制器PHY配置
phys = <&u2phy0_otg>, <&combphy0_us PHY_TYPE_USB3>; phy-names = "usb2-phy", "usb3-phy";对应的硬件特性:
- 使用CombPHY0作为USB3.0 PHY
- 使用u2phy0的OTG端口作为USB2.0 PHY
- 支持VBUS供电控制
3.2 Host控制器PHY配置
phys = <&u2phy0_host>, <&combphy1_usq PHY_TYPE_USB3>; phy-names = "usb2-phy", "usb3-phy";对应的硬件特性:
- 使用CombPHY1作为USB3.0 PHY
- 使用u2phy0的Host端口作为USB2.0 PHY
- 通常需要外部5V电源管理
3.3 PHY初始化参数调优
在实际应用中,可能需要调整PHY参数以获得更好的信号质量:
&combphy0_us { rockchip,dis-u3otg0-port; rockchip,eye-diagram-param = <0x02828682>; rockchip,otg-port = <0>; }; &combphy1_usq { rockchip,pre-emp-curr-control = <6>; rockchip,eye-vrt = <7>; rockchip,eye-term = <5>; };4. 典型问题排查与调试技巧
4.1 常见启动问题分析
问题现象1:USB3.0设备无法识别,降速到USB2.0
- 检查CombPHY是否成功初始化
- 验证USB3.0 PHY的供电和时钟
- 检查PCB走线是否符合USB3.0阻抗要求
问题现象2:OTG角色切换失败
- 确认ID引脚配置正确
- 检查VBUS供电控制逻辑
- 验证
dr_mode设置为"otg"而非"host"
4.2 内核调试手段
启用相关调试选项可获取更多信息:
# 启用DWC3驱动调试 echo 1 > /sys/module/dwc3/parameters/ep0_trace # 查看PHY状态 cat /sys/kernel/debug/phy/phy*/status # 获取USB设备树信息 cat /proc/device-tree/usb@*4.3 性能优化建议
对于高速数据传输场景,可考虑以下优化:
- 调整DWC3驱动参数,如
snps,usb3_lpm_capability - 优化DMA缓冲区配置
- 根据实际负载调整USB中断的CPU亲和性
usbdrd_dwc3: dwc3@fcc00000 { // 启用高性能模式配置 snps,usb3_lpm_capability; snps,dis-u2-freeclk-exists-quirk; snps,parkmode-disable-ss-quirk; // ...其他配置 };5. 与USB2.0控制器的协同工作
RK3568除了USB3.0控制器外,还包含多个USB2.0控制器(EHCI/OHCI),它们与USB3.0控制器有明确的层级关系:
USB3.0 Host控制器(
usbhost30):- 独立工作,不依赖USB2.0控制器
- 可同时支持USB3.0和USB2.0设备
USB2.0 Host控制器(
usb_host0_ehci等):- 与USB3.0 OTG控制器共享PHY资源
- 当OTG控制器作为Host时,USB2.0控制器可扩展端口数量
// USB2.0 Host控制器示例 usb_host0_ehci: usb@fd800000 { compatible = "generic-ehci"; phys = <&u2phy1_otg>; phy-names = "usb2-phy"; // ...其他配置 };在实际应用中,应根据外设类型合理分配控制器资源:
- 高速存储设备优先连接到USB3.0控制器
- HID类设备可连接到USB2.0控制器
- 需要OTG功能的设备必须连接到OTG控制器