NotePublic/Ecology/LubanCat2/RK3568_USB3_OTG_说明.md

3.7 KiB
Raw Blame History

RK3568 USB3 OTG 说明

RK3568 USB3 OTG 可以作为 A 类型(主机)或 B 类型外设设备使用。USB3 有两个地址0xfe8a0000 作为 External Connector 使用,实际上为 USB PHY0xfcc00000 作为 USB Dual Role Device 使用。

USB3 OTG 使用 170 脚 USB3_OTG0_ID 来判断自己工作在 A 模式还是 B 模式,该引脚为高电平时为 B 模式,为低电平时为 A 模式。

用于连接主机的 USB 接口Type A为 4 线D+、D-、VBUS 和 GND因此 USB3_OTG0_ID 悬空RK3568 工作在 B 模式。

flowchart LR
subgraph OTG
    OTG_Gnd
    OTG_ID
    OTG_D+
    OTG_D-
    OTG_VCC
end

subgraph USB
    USB_Gnd
    USB_D+
    USB_D-
    USB_VCC
end

OTG_Gnd --- USB_Gnd
OTG_D+ --- USB_D+
OTG_D- --- USB_D-
OTG_VCC --- USB_VCC

USB OTG 扩展 HUB 的线束中 CC1 或 CC2 下拉接地,导致与其相连的 USB3_OTG0_ID 也被下拉,此时 RK3568 进入 A 模式。

flowchart LR
subgraph OTG
    OTG_Gnd
    OTG_ID
    OTG_D+
    OTG_D-
    OTG_VCC
end

subgraph USB
    USB_Gnd
    USB_D+
    USB_D-
    USB_VCC
end

OTG_Gnd --- USB_Gnd
OTG_D+ --- USB_D+
OTG_D- --- USB_D-
OTG_VCC --- USB_VCC
OTG_ID --- USB_Gnd

使用软件可以强制 USB3 OTG 工作在 A、B 或 OTG 模式,方法如下:

#Force host mode 主机
echo host > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

#Force device mode 从机
echo peripheral > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

#Force otg mode 根据硬件识别自动切换
echo otg > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

当 USB3 OTG 工作在 B 模式时可以模拟多种外设:

  • usb_adb_en - ADB 调试
  • usb_rndis_en - RNDIS USB模拟以太网
  • usb_acm_en - ACM USB虚拟串口
  • usb_ums_en - UMS 虚拟存储设备
  • usb_uac1_en - UAC 虚拟声卡
  • usb_uac2_en - UAC 虚拟声卡

这些模式的切换可以通过修改 /tmp/.usb_config 使其临时生效或修改 /etc/init.d/.usb_config 进行持久化,并且可以组合使用。

修改后需要执行:

/usr/bin/usbdevice restart

使其生效。

ADB 调试

.usb_config 文件如下:

usb_adb_en

RNDIS USB模拟以太网

.usb_config 文件如下:

usb_rndis_en

ACM USB虚拟串口

.usb_config 文件如下:

usb_acm_en

USB Mass StorageUMSDevice 虚拟存储设备

使用该模式可以将板卡文件系统中的一个分区或一个 img 镜像挂载到 PC 上。

.usb_config 文件如下:

# For VBUS_ALWAYS_ON usb otg is not support ums
# Since the block to ums is always occupated by USB due to no disconneted state
usb_ums_en
# 配置挂载的镜像文件地址
ums_block=/ums_shared.img
# 设置镜像文件大小,单位为 MB
ums_block_size=256
# 设置文件系统格式为 fat
ums_block_type=fat
# 设置断开UMS后自动挂载到 /mnt/ums 目录
# ums_block_auto_mount=on
# 读写权限控制
# UMS_RO=0

注:实测开启 ums_block_auto_mount 后主机无法挂载虚拟存储设备,似乎跟硬件电路有关。

ums_shared.img 镜像文件的手动生成方式为:

dd if=/dev/zero of=./ums_shared.img count=256 bs=1024k
mkfs.vfat ums_shared.img

UMS 设备与主机的连接和断开可以通过检测 /sys/class/android_usb/android0/state 文件来实现,当文件内容为 CONFIGURED 时与主机的连接配置已完成,当文件内容为 DISCONNECTED 时说明与主机的连接已断开。

UAC 虚拟声卡

UAC 分为 UAC1 和 UAC2UAC2 和 UAC1 有以下区别: UAC2 比 UAC1 具有更高的带宽(各平台实现略有不同,以实测为准) Windows7 及部分 Windows10 系统默认不支持 UAC2需要手动安装驱动但都支持 UAC1。

.usb_config 文件如下:

usb_uac1_en
# 或
# usb_uac2_en