- USB 控制器
- 主控制器是 Synopsys DesignWare Core SuperSpeed USB 3.x 控制器(Gen1/Gen2)。
- 两个用于 USB SuperSpeed 和 DisplayPort 的 Qualcomm 多用途 PHY(QMP)实例。
- 用于高速 USB 的 Synopsys PHY。
- 副控制器是 Synopsys DesignWare Core 高速 USB 2.0 控制器。
- 用于高速 USB 的 Synopsys PHY
- 第三控制器是 Synopsys DesignWare Core 高速 USB 2.0 控制器。
- 用于高速 USB 的 Synopsys PHY。
- Dragonwing IQ-9075 具有三个 USB 控制器(主 USB 3.2、副 USB 3.2、第三 USB 2.0)
- 主控制器是 Synopsys DesignWare Core SuperSpeed USB 3.x 控制器(Gen1/Gen2)。
- Synopsys DesignWare Core SuperSpeed USB 3.x 控制器特性
- Synopsys DesignWare Core SuperSpeed USB 3.x 控制器是符合 USB SuperSpeed 规范的控制器,可配置为以下方式之一:
- 仅外设(Peripheral-only)配置
- 仅主机(Host-only)配置
- 双角色(Dual-role)配置
- 支持所有传输类型(控制、批量、中断和同步传输)
- 支持 SuperSpeed 批量流(bulk streams)
- 符合可扩展主机控制器接口(xHCI)规范
- 主机模式支持 SuperSpeed(5 Gbps)、高速(480 Mbps)、全速(12 Mbps)和低速(1.5 Mbps)操作。
- 设备模式支持 SuperSpeed(5 Gbps)、高速(480 Mbps)和全速(12 Mbps)操作,最多支持 16 个双向端点(包括控制管道
ep0)。 - 链路电源管理
- Synopsys DesignWare Core SuperSpeed USB 3.x 控制器是符合 USB SuperSpeed 规范的控制器,可配置为以下方式之一:
- USB PHY 访问方法
- 通过 AHB2PHY 的寄存器级接口,用于执行 PHY 相关操作。
- USB Type-C
- 使用 PM7325B PD 控制器支持 USB Type-C 和电力传输(Power Delivery)。
- 完全符合 USB Type-C 3.0 电力传输规范。
- 在传输控制器确定所连接链路伙伴的 Type-C 方向、角色和模式后,支持根据 UCSI 框架更新 PM7325B 软件驱动。
- 仅用于主 USB 控制器。
时钟
下表列出了 USB 控制器以及高速和 SuperSpeed PHY 正常工作所需的时钟和工作频率。 表: USB 控制器时钟
表:
高速 PHY 时钟
表:
SuperSpeed PHY 时钟
电压轨
下表列出了高速(HighSpeed)和 SuperSpeed PHY 所需的电压轨。 表: USB 电压轨
Dragonwing IQ-9075 USB 电压轨
- HS PHY:L7A(0.88 V)、L6C(1.8 V)、L9A(3.3 V)
- SS PHY:L1C、L7A
中断
下表列出了 USB 控制器用于通知事件的各种中断。 表: USB 控制器中断互连
下表列出了 USB 控制器使用的各种互连。 表: USB 互连使用时钟控制复位 USB 控制器
下表列出了用于 USB 控制器和 PHY 的复位方法。 表: USB 时钟复位方法使用寄存器进行 USB 控制器软件复位
下表列出了用于复位 USB 控制器的寄存器选项。 表: USB 控制器复位
Dragonwing IQ-9075 控制器复位寄存器
- HS:GCC_USB2_PHY_PRIM_BCR
- SS:GCC_USB3_PHY_PRIM_BCR/ GCC_USB3PHY_PHY_PRIM_BCR
- GCC_USB3_PHY_TERT_BCR
- USB30_PRIM_GDSC
- USB30_SEC_GDSC
- USB20_PRIM_GDSC
- GCC_USB20_SEC_BCR
- GCC_QUSB2PHY_SEC_BCR
- GCC_USB2_PHY_SEC_BCR
USB 控制器与 SoC 集成
USB 控制器的知识产权(IP)和 PHY 按下图所示集成到 SoC 中。 图:USB 控制器 PHY 与 SoC 集成USB 3.xcontrollerSoCType-C connectorAHB 2PHYDisplay port controllerSS0_1DPPHY (QMP)SS0_0DPPHY (QMP)EUDHS0PHY(SNPS)PipeUTMISSHS Synopsys DesignWare Core SuperSpeed USB 3.0 知识产权仅控制核心功能,而不控制设备规格,例如时钟、互连、稳压器和 GDSC。Synopsys DesignWare Core 知识产权被嵌入在Qscratch 封装器(知识产权和软件驱动)内部,该封装器负责在探测(probe)、挂起或恢复状态期间管理所需资源(时钟、互连、中断、GDSC 和稳压器)。这两个驱动共存以确保 USB 功能正常。
有关 USB Qscratch 封装器驱动的信息,请参阅 https://github.com/torvalds/linux/blob/master/drivers/usb/dwc3/dwc3-qcom.c。有关控制器核心驱动的信息,请参阅 https://github.com/torvalds/linux/blob/master/drivers/usb/dwc3/core.c。
xHCI 支持
xHCI 规范描述了 USB 2.0 及更高版本的寄存器级主机控制器接口。USB 控制器符合 xHCI 规范,在主机模式下支持 SuperSpeed(5 Gbps)、高速(480 Mbps)、全速(12 Mbps)和低速(1.5 Mbps)操作。 Linux 标准 xHCI 驱动用于在主机模式下操作 USB 控制器。USB Type-C 连接器系统软件接口(UCSI)
注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 USB Type-C 功能。- USB Type-C 连接器系统软件接口作为库在 Linux 内核中提供。它定义了一组寄存器和数据结构,用于与系统上的 USB Type-C 连接器交互。平台上的 USB Type-C 连接器被称为平台策略管理器(PPM),系统软件组件被称为 OS 策略管理器(OPM)。
- Qualcomm 参考设计使用 UCSI
Glink驱动,通过 PMIC GLINK 处理应用处理器上的 OPM 与 PPM(即运行在远程子系统(aDSP)上的充电器固件)之间的通信。 - USB Type-C DisplayPort 备用模式(alternate mode)增加了支持额外线缆细节的能力,例如 DPAM 版本和线缆的信号方式。Qualcomm 参考设计支持通过 Type-C 使用 DisplayPort,并支持 USB SuperSpeed 与 DisplayPort 并发,DisplayPort 最多使用两条通道(两条通道用于 USB SuperSpeed,两条通道用于 DisplayPort)。
- USB Type-C 电力传输由 PM7325B PD 控制器支持,完全符合 USB PD 3.0 规范。通过 UCSI 接口,支持 USB 数据角色交换和电源角色交换。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持通过 Type-C 连接器进行数据和电源角色交换。
- 以下是相关驱动的参考链接:
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/typec/ucsi/ucsi.c?h=v6.6.2
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/typec/ucsi/ucsi_glink.c?h=v6.6.2
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/typec/ucsi/displayport.c?h=v6.6.2
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/phy/qualcomm/phy-qcom-qmp-combo.c?h=v6.6.2
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/dwc3/dwc3-qcom.c?h=v6.6.2
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/soc/qcom/pmic_glink.c?h=v6.6.2
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/soc/qcom/pmic_glink_altmode.c?h=v6.6.2
USB 特性
Qualcomm 芯片硬件 SoC 允许在双角色设备(DRD)模式下工作。DRD 同时支持设备和主机角色。设备动态检测应切换到的角色,并相应地对控制器进行编程。支持自动挂起(autosuspend)功能,可在拔出线缆时关闭 USB 控制器。支持视频、音频、网络共享、文件传输、媒体传输和充电等功能接口。 表: USB 特性:Linux运行时电源管理
可以根据您的需求启用运行时电源管理功能。LPM 支持已作为 https://lore.kernel.org/all/20231017131851.8299-1-quic_kriskura@quicinc.com/ 的一部分添加。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 USB Type-A 端口的运行时电源管理。 默认情况下,运行时的 USB 挂起和恢复处于禁用状态。要启用这些功能,请运行以下命令:sysfs 命令:
xhci-hcd.X.auto 值,其中 X = 0、1、2。它表示连接到 USB 的设备数量。已连接的设备列在 /sys/bus/platform/devices/xhci-hcd.X.auto/usb1/<node number> 下。<node number> 值取决于连接到 USB 端口的设备数量。
要为 LS 光电鼠标启用远程唤醒,请运行以下命令:
软件特性
软件支持以下 USB 特性。 表: USB 软件特性USB 架构
Qualcomm USB 软件架构大致由两个组件组成,一个基于纯上游(upstream),另一个是包含部分待合入特性相关更改的沙箱(sandbox)。纯上游部分直接取自最新的稳定内核长期支持版本(LTS)6.6.2。该架构使用 Yocto(4.0 版)配方(recipe)来创建二进制文件。 图:USB 软件架构/dev/ffs-xxx//dev/ffs-xxx//dev/ffs-xxx//sys/kernel/config/usb_gadget/…/sys/bus/usb/…Function driverFunction driverGadget frameworkconfigfs, UDC coreDevice controller driverClassdriverClassdriverUSB coreHost controller driverdwc3-qcomDWC3 core driversFemto phy driverQMP phy driverUCSIPMIC GLINKPM7325BaDSP corecharger firmwareVBUS, CC, D+,D-HSSS/sys/class/typec/port0/…Dual-role class driverType-C role swapdiag-routerport-bridgeadbd.serviceUSB peripheral mode configurationRuntime power management controlUser-space servicesVFSKernel-spaceType-C connector 沙箱实现了以下 Qualcomm 特有特性。- USB_DWC3_QCOM:主 glue 驱动,根据所连接的设备负责主机和设备两种模式下的 USB 功能。glue 驱动的设备树条目包含时钟、电源轨和中断等资源。该特性将 DWC3 核心驱动作为库使用,由后者控制 DWC3 控制器的实际功能。有关详细信息,请参阅 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/dwc3/dwc3-qcom.c?h=v6.6.2。
- Synopsys femto PHY:Qualcomm Synopsys femto PHY 是高速 USB PHY,负责控制 D+/D- 线路,并在实现数据传输的同时进行充电器检测。有关详细信息,请参阅 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c?h=v6.6.2。
- QMP DisplayPort 组合 PHY:Qualcomm 多用途 PHY(QMP)DisplayPort 组合 PHY 为通用用途而设计。USB 的一个示例用例是 SuperSpeed 和 SuperSpeed-plus 功能,其中 Rx+/Rx- 和 Tx+/Tx- 可用于数据传输。当显示器可以占用一对通道用于镜像功能而 USB 以 SuperSpeed 工作时,该 PHY 支持显示备用模式。有关详细信息,请参阅 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/phy/qualcomm/phy-qcom-qmp-combo.c?h=v6.6.2。
USB 接口
USB 支持多种接口来传输音频、视频、调试信息和网络共享。以下每种 USB 接口的通信协议各不相同,除标准 USB 协议外还各自拥有专属协议。- Android 调试桥(ADB)
- USB ADB 是一个调试接口,通过 USB 连接提供对系统的访问。有关 ADB 的更多信息,请参阅 https://developer.android.com/tools/adb。
- 这些文件名是
dev节点的虚拟eps名称。有关f_fs.c的更多信息,请参阅 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/gadget/function/f_fs.c?h=v6.6.2。 - 用户空间服务:用户空间守护进程
adbd.service操作 ADB,负责在底层内核驱动与主机 PC 之间建立连接。
- 诊断(diag)
- Diag 是一个诊断框架,用于从各个子系统收集日志数据并进行调试。Diag 数据通过 USB 传输到主机 PC。
- 内核驱动:Diag 使用
f_fs.c暴露/dev/ffs-diag节点,由用户空间服务对其进行各种操作。该dev节点包含以下三个文件:ep0:控制操作ep1:读取操作ep2:写入操作 这些文件名是dev节点的虚拟eps名称。有关f_fs.c的更多信息,请参阅 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/gadget/function/f_fs.c?h=v6.6.2。
- 大容量存储
- 提供带大容量存储驱动的通用接口驱动,使设备可以充当通用存储设备。
- 内核驱动:
mass_storage功能由f_mass_storage.c驱动管理。该驱动暴露dev node[revisit],由主机 PC 控制。有关大容量存储的更多信息,请参阅 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/gadget/function/f_mass_storage.c?h=v6.6.2。
- 远程网络驱动接口规范(RNDIS)
- RNDIS 是 Microsoft 为动态即插即用 I/O 总线(如 USB)上的网络设备开发的规范。
- 内核驱动:它使用上游 Linux 内核中的
f_rndis驱动,直接与网络接口或网络栈通信。
- 网络控制模型(NCM)
- NCM 是一种协议,旨在提供比 RNDIS 更先进的特性和能力。
- 它常见于 USB 设备必须处理高要求网络任务的应用中。
- USB 音频类 2(UAC2)
- UAC2 是管理 USB 音频设备与计算机之间通信的标准。
- UAC2 支持更高的音频数据传输速率,从而改善音频质量并降低延迟。
- USB 视频类(UVC)
- UVC 是一项标准,定义了视频流设备(如网络摄像头)如何通过 USB 与计算机通信。
- UVC 为视频设备提供即插即用功能。
USB 工具
下表列出了几个常用的 USB 工具。 表: USB 工具及下载详情配置 USB 引导加载程序
可以使用 Qualcomm DeviceTree 编辑器(QDTE)工具修改引导加载程序中用于调优高速和 SuperSpeed USB 信号质量的设备树参数。 QDTE 工具通过编辑 xbl_config.elf 文件来配置设备树二进制 blob,如下图所示。有关如何配置设备树 blob 的更多信息,请参阅 QDTE 部分。Linux 主机上的设备树文件路径为 /boot_images/boot/Settings/Soc/<Chipset>/Core/WiredConnectivity/USB/usb.dtsi。 图:设备树布局 下表列出了用于调优 HS-USB PHY 和 SS USB PHY 信号质量的属性。 表: USB 配置属性配置 USB 摄像头
Qualcomm Linux 设备为符合 USB 视频类(UVC)标准的 USB 网络摄像头提供驱动支持。Linux 内核的uvcvideo 驱动支持摄像头。有关 uvcvideo 驱动的更多信息,请参阅 https://www.kernel.org/doc/html/v4.19/media/v4l-drivers/uvcvideo.html。
uvcvideo 驱动将这些摄像头暴露为 V4L2 视频设备,可通过字符设备节点(如 /dev/videoX)访问。
在用户空间中,应用程序可以使用 v4l2src GStreamer 插件管理 USB 摄像头,该插件与 Qualcomm 智能多媒体 SDK(IM SDK)捆绑提供。或者,Yavta(yet another V4L2 test application)等程序可直接与 V4L2(Video4Linux2)接口交互,以测试和控制摄像头设备。
当前版本默认不包含 Yavta 程序。要在主机设备上获取并交叉编译 Yavta,请执行以下操作:
- 可以使用以下任一方法建立交叉编译环境。
- 方法 1:要设置交叉编译环境,请运行以下命令。
- 方法 2:要设置交叉编译环境,请运行以下命令:
- 下载交叉编译器。
- 解压交叉编译器。
- 通过运行以下命令设置交叉编译环境。
- 下载交叉编译器。
- 方法 1:要设置交叉编译环境,请运行以下命令。
- 克隆 Yavta 仓库并切换目录。
- 交叉编译该工具。
- 要将 Yavta 推送到 Qualcomm Linux 硬件 SoC,请执行以下操作:
- 以宽容(permissive)模式打开 SSH shell 或使用 ADB shell。有关如何运行 SSH 的更多信息,请参阅使用 SSH 部分。
- 挂载文件系统。
- 使用 SCP 或类似工具传输文件。
例如,
scp yavta root@10.92.162.185:/usr/bin - 为 Yavta 分配执行权限。
前提条件:获取图像格式和尺寸
无论是通过 Yavta 还是 GStreamer 配置 USB 摄像头,以下步骤都是必需的。- 要了解枚举详情,请插入 USB 摄像头并运行以下命令。
将显示以下输出。
- 从串行控制台识别创建为 /dev/videoX 的 USB 摄像头视频节点。
注意:
1-1/1-1:1.0值会根据所连接的 USB 设备而变化。 将显示以下输出。 - 要使用 Yavta 查看支持的输出格式和尺寸,请运行以下命令:
其中
X值取决于节点。 例如:将显示以下输出。 - 从步骤 3 中选择所需的图像格式和尺寸。
使用 Yavta 配置 USB 摄像头
前提条件:确保已交叉编译 Yavta,并已确定输出格式和尺寸。- 要选择 1280x720 输出尺寸、30 fps 的 MJPEG 格式,在 /tmp/ 下捕获 10 帧、文件名为 testmjpeg-00000*.bin,请运行以下命令。
将显示以下输出。
- 要选择 1280x960 输出尺寸、30 fps 的 YUV 格式,在 /tmp/ 下捕获 10 帧,生成的文件名为 testyuv-00000*.bin,请运行以下命令。
注意:使用命令
#setenforce 0启用宽容(Permissive)模式。 将显示以下输出。
在 Qualcomm IM SDK 中使用 GStreamer 配置 USB 摄像头
Qualcomm IM SDK 使用 GStreamer(一个开源多媒体框架)在多媒体和机器学习领域提供易用的 API 和插件。有关安装 Qualcomm IM SDK 的信息,请参阅快速入门部分。 Qualcomm IM SDK 包含v4l2src 插件,它允许以选定格式接收来自 USB 摄像头的输入。waylandsink 插件负责在 Wayland 显示器上渲染视频输出。
注意:前提条件:
- 确保已交叉编译 Yavta,并已确定输出格式和尺寸。
- 要下载或更新固件,请参阅下载 PCIe 转 USB 控制器固件。
- 要为 Wayland 显示器设置环境变量,请在串行控制台中运行以下命令。
- 使用 GStreamer 命令将摄像头视频流传输到 UI。确保设置了正确的设备 ID(
/dev/videoX),并根据 USB 摄像头检测结果选择正确的格式。 注意:在 GStreamer 中,YUYV 颜色格式被称为 YUY2。因此,在设置管线时必须指定 YUYV 格式,并在 caps filter 中使用 YUY2。- 对于 720p,请运行以下命令:
将显示以下输出。
- 对于 1080p,请运行以下命令:
- 对于 720p,请运行以下命令:
自定义 USB 设备
本节介绍 USB 软件中各种配置和自定义的要求。包含 diag 和 ADB 接口的 USB 组合示例 shell 脚本
通过 QUSB 服务更改 USB 组合
usb.service 在 /usr/bin/qusb 处启动 QUSB 服务,为用户提供配置 USB gadget 的灵活性。它完全免除了通过 configfs 手动执行命令来初始化 USB 的麻烦。
前提条件:通过运行以下命令启用 SELinux。
启用和配置 UVC 用例
USB 视频设备类(亦称 USB 视频类或 UVC)是一种 USB 设备类,用于描述能够进行视频流传输的设备,例如网络摄像头、数码摄像机、转码器、模拟视频转换器和静态图像相机。 USB 视频类规范的最新修订版为 v1.5。USB 实施者论坛(USB implementers forum)在 v1.5 中描述了基本协议和不同的负载格式。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 UVC 用例。 测试 UVC 的工具和流程如下:- UVC gadget(设备侧):这是一个用于测试
f_uvc功能驱动的示例应用程序。它打开由uvc_gadget创建的视频节点,并以指定的帧率发送 MJPEG 帧。该应用程序需为 DUT 交叉编译。 注意:确保主机上已安装交叉编译 64 位 Arm® 技术编译器所需的软件包和工具。- 可以使用以下任一选项建立交叉编译环境。
- 选项 A:运行以下命令。
- 选项 B:要设置交叉编译环境,请运行以下命令:
- 下载交叉编译器。
- 解压交叉编译器。
- 通过运行以下命令设置交叉编译环境。
- 下载交叉编译器。
- 选项 A:运行以下命令。
- 要构建 UVC gadget 工具,请执行以下操作。
- 克隆
uvc-gadget仓库。 - 修改
Makefile以进行静态构建。 - 为
arm64交叉编译以生成uvc‑gadget可执行文件。
- 克隆
- 可以使用以下任一选项建立交叉编译环境。
- UVC 查看器(主机侧):要接收 UVC 数据,请在计算机上打开任意 USB 网络摄像头应用程序。
- 要进行验证,将 UVC gadget 应用程序和示例图像文件推送到设备,请执行以下操作:
- 以宽容模式打开 SSH shell 或使用 ADB shell。有关如何运行 SSH 的更多信息,请参阅使用 SSH 部分。
- 挂载文件系统。
- 使用 SCP 或类似工具传输文件。
例如,
scp uvc-gadget root@10.92.175.138:/usr/bin - 分配执行权限。
- 切换到任意 UVC 组合(90DF 或 90CB)。例如,
- 要进行验证,将 UVC gadget 应用程序和示例图像文件推送到设备,请执行以下操作:
uvc_gadget 应用程序。
- YUYV
- 将
image-720.yuv图像文件推送到/root或/etc。 - 使用
uvc-gadget工具验证image-720.yuv图像。- 其中
X表示组合切换后创建的新视频节点 - 其中
-f为格式,取值如下:0= V4L2_PIX_FMT_YUYV1= V4L2_PIX_FMT_MJPEG
- 其中
- 将
- MJPEG
- 将
image-720.jpg图像文件推送到/root或/etc。 - 使用
uvc-gadget工具验证image-720.jpg图像。- 其中
X表示组合切换后创建的新视频节点 - 其中
-f为 <format>,取值如下:0= V4L2_PIX_FMT_YUYV1= V4L2_PIX_FMT_MJPEG
- 其中
- 将
- 有关用法信息,请运行以下命令。
将显示以下输出。
UAC 用例
USB 音频使用同步、中断和控制传输。所有音频数据均使用同步传输方式传输。中断传输用于传递音频时钟可用性的相关信息,控制传输用于设置音量和请求采样率。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 UAC 用例。 要进行验证,请选择包含 UAC 功能的 USB 组合。rootfs 中提供的 tinyutils 应用程序,例如 tinyplay/tinycap。当 UAC 驱动绑定成功后,该应用程序会打开在 /dev/snd/ 中创建的 PCM 节点。
以下是一些示例命令。
- 在 Linux 主机上列出声卡。
- 播放音频文件。
- 要从设备向主机播放音频,请推送具有匹配音频配置的
file.wav文件。以下是示例配置。输出:输出:输出:输出:输出:输出:注意:要修改音频配置,请在将 USB 组合设置为 90CA 之前调整上述参数。 - 在 SSH shell 上运行以下命令,或使用 ADB shell。
将显示以下输出。
- 在 Linux 主机上使用
arecord等应用程序运行以下命令以捕获音频。
- 要从设备向主机播放音频,请推送具有匹配音频配置的
- 录制音频文件。
- 在 Linux 主机上使用
aplay等应用程序运行以下命令以播放音频。 - 在设备的 SSH shell 上运行以下命令,或使用 ADB shell。
将显示以下输出。
- 在 Linux 主机上使用
USB 电力传输中的数据角色交换
数据角色交换(DR_SWAP)是使用 USB Type-C 连接器在端口伙伴之间交换 DFP(主机)和 UFP(设备)角色。电源角色交换(PR_SWAP)在端口伙伴之间交换源(source)和汇(sink)角色。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持使用 Type-C 连接器进行数据和电源角色交换。- 数据角色
- 要将数据角色从主机交换为设备,请运行以下命令:
将显示以下输出。将显示以下输出。
- 要将数据角色从设备交换为主机,请运行以下命令:
将显示以下输出。将显示以下输出。
- 要将数据角色从主机交换为设备,请运行以下命令:
- 电源角色
- 要将电源角色从汇交换为源,请运行以下命令:
将显示以下输出。将显示以下输出。
- 要将电源角色从源交换为汇,请运行以下命令:
将显示以下输出。将显示以下输出。
- 要将电源角色从汇交换为源,请运行以下命令:
使用 configfs 进行自定义
configfs 文件系统提供与 sysfs 相反的功能。多种接口可以配置 Linux USB gadget,每个接口代表一个 USB 功能。
qusb 可执行文件使用以下命令配置 configfs USB gadget。
- 创建
configfs并挂载functionfs。 - 启动
adbd/diag服务。 - 将
configfs与 USB gadget 应用程序绑定。 - 停止或解绑 USB gadget 应用程序。
- 设置 diag 和 ADB 组合。
- 列出可用的 USB 组合。
USB 组合如下。
A4A1 NCM4EE7 ADB900E DIAG901C DIAG + UAC2901D DIAG + ADB9015 MASS_STORAGE + ADB9024 RNDIS + ADB902A RNDIS + MASS_STORAGE902B RNDIS + ADB + MASS_STORAGE902C RNDIS + DIAG902D RNDIS + DIAG + ADB902F RNDIS + DIAG + MASS_STORAGE9060 DIAG + QDSS + ADB908C NCM + ADB90CA DIAG + UAC2 + ADB90CB DIAG + UVC + ADB90CC DIAG + UAC2 + UVC + ADB90DF DIAG + UVC90E0 DIAG + UAC2 + UVCF000 MASS_STORAGEF00E RNDIS
验证 USB 设备
下表列出了验证 USB 设备和主机模式的各种方法。 表: USB 设备和主机模式验证调试 USB 问题
本节提供获取调试日志的各种方法的信息。调试方法包括regdumps、调试 ftraces、configfs 节点。在调试低功耗模式进入/退出、SMMU 故障、无时钟访问等问题时,这些日志可提供事件和控制器状态详情的可见性。
注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 USB Type-C 功能。
跟踪 USB
debugfs 跟踪可深入查看 USB 线路上的每个事务。要查看跟踪列表,请运行以下命令。
debugfs 已挂载。如果未挂载,请运行以下命令挂载 debugfs。
USB regdump
USBdebugfs 提供以下信息。
注意:a600000.usb 地址因芯片组而异。
- 工作模式。
示例输出:
- 设备模式下所有端点的状态和传输环形缓冲区(TRB)队列。
- 当前链路状态。
示例输出。
- 列表处理器(LSP)转储。
示例输出:
regdump 命令提供以下寄存器的寄存器空间当前状态:
- 设备模式寄存器,例如 DCTL、DSTS 和 DCFG
- 全局寄存器,例如 GCTL 和 GSTS

