Linux USB DRD 双角色解决方案

RTL8730E USB 是双角色设备(DRD)控制器,既可作为 USB 主机也可作为 USB 设备工作。工作角色通过设备树属性 dr_mode 结合下述角色切换方式来选择。

OTG

dr_mode = "otg" 时,驱动启动时会同时初始化主机和设备两种角色。在标准 USB OTG 设计中,角色由 Micro-AB / Type-C 连接器的 OTG ID 引脚自动决定:ID 引脚接地选择主机模式,ID 引脚悬空选择设备模式。

DRD

在 QFN100 上,角色不通过 OTG ID 引脚,而是通过 Realtek USB PHY 的 force_mode 机制由软件选择。该机制通过 sysfs 参数 /sys/module/phy_rtk_usb/parameters/usb_force_mode 控制:

  • 1:强制 USB 主机模式

  • 2:强制 USB 设备模式

该功能由设备树属性 rtk,usb-force-role-en 使能。

备注

当 QFN100 在 OTG 场景下,需通过 force_mode 手动指定角色。

使用时机:

  • Device 模式:完成 insmod 及 ConfigFS 配置后,在使能 UDC(参见 如何使能与禁用 Gadget)之前设置:

    echo 2 > /sys/module/phy_rtk_usb/parameters/usb_force_mode
    
  • Host 模式:完成 insmod 后设置:

    echo 1 > /sys/module/phy_rtk_usb/parameters/usb_force_mode