# USB

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

通用串行总线 (USB) 是一种行业标准，允许在各种类型的电子设备之间进行数据交换和供电。该标准支持多种运行速度，例如 1.5 Mbps 低速、12 Mbps 全速、480 Mbps 高速以及 5 Gbps 超高速。

Synopsys DesignWare® Core 超高速 USB 3.1 用于 Qualcomm SoC 上的 USB 模块，并连接到两个 PHY – USB2 PHY（通过 UTMI 接口连接）和 USB3 PHY（通过 PIPE 接口连接）。这两个 PHY 与物理 Type-C 端口相连，实现与外部世界进行通信。

以下为 USB 的关键硬件组件。
- **USB 控制器**
    - 主控制器为 Synopsys DesignWare Core 超高速 USB 3.1 控制器 (Gen1)
        - 两个 Qualcomm 多用途 PHY (QMP) 实例分别用于 USB 超高速和 DisplayPort
        - Synopsys PHY 用于高速 USB
    - 辅控制器为 Synopsys DesignWare Core 高速 USB 2.0 控制器
        - Synopsys PHY 用于高速 USB
- **Synopsys DesignWare Core 超高速 USB 3.1 控制器特性**
    - Synopsys DesignWare Core 超高速 USB 3.1 控制器是符合 USB 超高速标准的控制器，支持以下多种配置：
        - 仅外设配置
        - 仅主机配置
        - 双角色配置
    - 支持所有传输类型（控制、批量、中断和等时）
    - 支持超高速批量流
    - 符合可扩展主机控制器接口 (xHCI) 规范
    - 主机模式支持超高速 (5 Gbps)、高速 (480 Mbps)、全速 (12 Mbps) 和低速 (1.5 Mbps) 四种运行速度。
    - 设备模式支持超高速 (5 Gbps)、高速 (480 Mbps) 和全速 (12 Mbps) 三种运行速度，并且支持多达 16 个双向端点（包括控制管道 `ep0`）。
    - 链路功耗管理
- **USB PHY 访问方法**
    - 通过 AHB2PHY 实现寄存器级接口，以执行 PHY 相关操作。
- **USB Type-C**
    - 使用 PM7325B PD 控制器支持 USB Type-C 和 Power Delivery。
    - 完全符合 USB Type-C 3.0 Power Delivery 规范。
    - 支持在 Power Delivery 控制器确定所连接链路伙伴的 Type-C 方向、角色和模式后，根据 UCSI 框架来更新 PM7325B 软件驱动程序。
    - USB Type-C Power Delivery 控制器仅用于主 USB 控制器。

### 时钟

下表列出了 USB 控制器以及高速和超高速 PHY 正常工作所需的时钟和工作频率。

Table : USB 控制器时钟

| 时钟名称 | 工作频率 | 说明 |
| --- | --- | --- |
| `gcc_usb30_prim_master_clk "core_clk"` | <ul class="ul" id="usb__ul_dtq_hfk_k1c"><br>                                    <li class="li">200 MHz 超高速</li><br><br>                                    <li class="li">66 MHz 高速</li><br><br>                                </ul> | 与总线时钟异步；设备树节点中定义的时钟速率 |
| `gcc_cfg_noc_usb3_prim_axi_clk "iface_clk"` | <ul class="ul" id="usb__ul_avq_kfk_k1c"><br>                                    <li class="li">200 MHz 超高速</li><br><br>                                    <li class="li">66 MHz 高速</li><br><br>                                </ul> | 辅助总线控制器单元时钟。 |
| `gcc_aggre_usb3_prim_axi_clk "bus_aggr_clk"` | <ul class="ul" id="usb__ul_yjq_lfk_k1c"><br>                                    <li class="li">200 MHz 超高速</li><br><br>                                    <li class="li">66 MHz 高速</li><br><br>                                </ul> | 馈入 `aggregator2` 模块的时钟，控制着从 USB AXI 流入 NoC 的数据 |
| `gcc_usb30_prim_mock_utmi_clk "utmi_clk"` | 19.2 MHz | 用于在 USB 收发器宏单元接口 (UTMI)/UTMI+Low 引脚接口 (ULPI) 待机时生成 ITP 计数器的内部控制器 `ref_clk` |
| `gcc_usb30_prim_sleep_clk "sleep_clk" ` | 32 kHz | 休眠时钟 |
| `gcc_usb3_sec_clkref_clk_en "xo"` | 19.2 MHz | HS-PHY (PMIC) 的外部参考时钟源 |
| `rpmh_cxo_clk "ref_clk_src" ` | 19.2 MHz | HS-PHY 的参考时钟源 |
| ` gcc_usb_phy_cfg_ahb2phy_clk "cfg_ahb_clk"` | 100 MHz | AHB2PHY 块需要的时钟（基于 PNoC 频率的频率） |

Table : 高速PHY时钟

| 时钟名称 | 工作频率 | 说明 |
| --- | --- | --- |
| `rpmh_cxo_clk "ref_clk_src"` | 19.2 MHz | HS-PHY 的参考时钟源 |
| `gcc_usb_phy_cfg_ahb2phy_clk "cfg_ahb_clk"` | 100 MHz | AHB2PHY 块需要的时钟（基于 PNoC 频率的频率） |

Table : 超高速 PHY 时钟

| 时钟名称 | 工作频率 | 说明 |
| --- | --- | --- |
| `gcc_usb3_prim_phy_aux_clk "aux_clk"` | 19.2 MHz | PCI Express PHY 接口 (PIPE) 电源状态辅助时钟 |
| `gcc_usb3_prim_phy_pipe_clk "pipe_clk" ` | 125 MHz | PIPE 的输入源，允许在 PHY 与控制器之间传输数据 |
| `rpmh_cxo_clk "ref_clk_src"` | 19.2 MHz | `ref_clk` 的父时钟 |
| `gcc_usb3_prim_clkref_clk "ref_clk"` | 19.2 MHz | SS-PHY 的参考时钟源 |
| `gcc_usb3_prim_phy_com_aux_clk "com_aux_clk"` | 19.2 MHz | – |

### 电压域

下表列出了高速和超高速 PHY 所需的电压域。

| 电压域 | 电压等级（最大值/标称值/最小值） | 电压等级（最大值/标称值/最小值） | 电压等级（最大值/标称值/最小值） | 设备模式 | 说明 |
| --- | --- | --- | --- | --- | --- |
| VREG L1C | 1.8 | 1.7 | 0 | 主和辅 HS-PHY | 系统中两个 HS-PHY 使用 1.8 V 调压器 |
| VREG L2B | 3.3 | 3.05 | 0 | 主和辅 HS-PHY | 系统中两个 HS-PHY 使用 3.3 V 调压器 |
| VREG L1B | 0.912 | 0.912 | 0 | SS-PHY | SS-PHY VDD 核心 |
| VREG L10C | 0.880 | 0.880 | 0 | 主和辅 HS-PHY 以及 SS-PHY | HS-PHY/SS-PHY VDD 核心 |

### 中断

下表列出了 USB 控制器用于通知事件的各种中断。

| 中断名称 | 中断编号 | 中断事件 PDC 唤醒内核处理 | 中断事件 PDC 唤醒内核处理 | 说明 |
| --- | --- | --- | --- | --- |
| `dp_hs_phy_irq` | 14 | D+ 变化 | – | 仅可用于系统处于 VDD min/XO 关闭的情况下 |
| `dm_hs_phy_irq` | 15 | D- 变化 | – | 仅可用于系统处于 VDD min/XO 关闭的情况下 |
| `ss_phy_irq` | 17 | LFPS 检测 | – | 仅可用于系统处于 VDD min/XO 关闭的情况下 |
| `pwr_event_irq` | 130 | – | USB PHY 电源状态变化<br><br><br>                                    <br>退出/进入 P3/L2 | 用作系统未处于电源深度休眠状态时的主控制器唤醒句柄 |
| `core irq` | 133 | – | <ul class="ul" id="usb__ul_xgw_tkk_k1c"><br>                                        <li class="li">总线事件<ul class="ul" id="usb__ul_pqx_4mn_h1c"><br>                                                <li class="li">待机</li><br><br>                                                <li class="li">恢复</li><br><br>                                                <li class="li">复位</li><br><br>                                            </ul><br></li><br><br>                                        <li class="li">控制器事件完成<ul class="ul" id="usb__ul_qqx_4mn_h1c"><br>                                                <li class="li">传输完成</li><br><br>                                                <li class="li">命令完成</li><br><br>                                            </ul><br></li><br><br>                                    </ul> | 处理所有 USB 控制器事件的主 USB 中断 |

### 互连

下表列出了 USB 控制器使用的各种互连。

| 互连名称 | 控制器 | 目标 | 互连路径带宽 (MBps) |
| --- | --- | --- | --- |
| USB-DDR | `MASTER_USB3_0` | `SLAVE_EBI1` | <ul class="ul" id="usb__ul_xwc_tlk_k1c"><br>                                        <li class="li">USB_MEMORY_AVG_HS_BW MBps_to_icc(240)</li><br><br>                                        <li class="li">USB_MEMORY_PEAK_HS_BW MBps_to_icc(700)</li><br><br>                                        <li class="li">USB_MEMORY_AVG_SS_BW MBps_to_icc(1000)</li><br><br>                                        <li class="li">USB_MEMORY_PEAK_SS_BW MBps_to_icc(2500)</li><br><br>                                    </ul> |
| APPS-USB | `MASTER_APPSS_PROC` | `SLAVE_USB3_0` | <ul class="ul" id="usb__ul_m24_vlk_k1c"><br>                                        <li class="li">APPS_USB_AVG_BW 0</li><br><br>                                        <li class="li">APPS_USB_PEAK_BW MBps_to_icc(40)</li><br><br>                                    </ul> |

### **使用时钟控制对 USB 控制器进行复位控制**

下表列出了用于 USB 控制器和 PHY 的复位方法。

| 时钟名称 | 复位控制 | 说明 |
| --- | --- | --- |
| `GCC_USB3_DP_PHY_PRIM_BCR "global_phy_reset"` | SS-PHY | 复位 SS-PHY 控制和状态寄存器 |
| `GCC_USB3_PHY_PRIM_BCR "phy_reset" ` | SS-PHY | 复位 SS-PHY |
| `GCC_QUSB2PHY_PRIM_BCR "phy_reset" ` | HS-PHY | 复位 HS-PHY |
| `GCC_USB30_PRIM_BCR "core_reset" ` | USB 控制器 | 复位 USB 控制器的时钟控制器输出 |

### 使用寄存器对 USB 控制器进行软件复位

下表列出了用于复位 USB 控制器的寄存器选项。

| USB 控制器寄存器 | USB 寄存器位域 | 复位控制 | 说明 |
| --- | --- | --- | --- |
| DWC3\_DCTL | CSFTRST [位 30] | USB 控制器 | 复位 USB 控制器设备堆栈。 |
| DWC3\_GCTL | CORESOFTRESET [位 11] | - | 对 DWC3 控制器进行全局复位。 |

### USB 控制器与 SoC 集成

USB 控制器的知识产权和 PHY 集成到 SoC 中，如下图所示。 
Figure : USB 控制器 PHY 与 SoC 集成
                    ![](data:image/png;base64,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)

Synopsys DesignWare Core 超高速 USB 3.0 知识产权仅控制核心功能，而不控制平台特定资源，例如时钟、互连、调压器和 GDSC。Synopsys DesignWare Core 知识产权嵌入在 `Qscratch` 封装程序（知识产权和软件驱动程序）中，负责管理在探测、待机或恢复状态期间所需的资源（时钟、互连、中断、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/dwc3-qcom.c)。有关控制器核心驱动程序的信息，可访问 [https://github.com/torvalds/linux/blob/master/drivers/usb/dwc3/core.c](https://github.com/torvalds/linux/blob/master/drivers/usb/dwc3/core.c)。

### xHCI 支持

xHCI 规范描述了 USB 2.0 及更高版本的寄存器级主机控制器接口。USB 控制器符合 xHCI 规范，在主机模式下支持超高速 (5 Gbps)、高速 (480 Mbps)、全速 (12 Mbps) 和低速 (1.5 Mbps) 四种运行速度。

Linux 标准 xHCI 驱动程序用于使 USB 控制器在主机模式下工作。

### USB Type-C 连接器系统软件接口 (UCSI)

- USB Type-C 连接器系统软件接口在 Linux 内核中以库的形式提供。它定义了一组寄存器和数据结构，用于与系统上的 USB Type-C 连接器连接。平台上的 USB Type-C 连接器称为平台策略管理器 (PPM)，系统软件组件称为 OS 策略管理器 (OPM)。
- Qualcomm 参考设计使用 UCSI `Glink` 驱动程序来处理应用处理器上的 OPM 与 PPM 之间的通信，PPM 是通过 PMIC GLINK 在远程子系统 (aDSP) 上运行的充电固件。
- USB Type-C DisplayPort 备用模式增添了新功能以支持其他线缆详细信息，例如 DPAM 版本和线缆相关指示。Qualcomm 参考设计支持基于 Type-C 的 DisplayPort，并同时支持 USB 超高速和 DisplayPort，DisplayPort 最多有两条通道（USB 超高速有两条通道，DisplayPort 有两条通道）。
- USB Type-C Power Delivery 由 PM7325B PD 控制器提供支持，完全符合 USB PD 3.0 规范。通过使用 UCSI 接口，支持 USB 数据角色调换和电源角色调换。
- 以下是上述驱动程序的参考资料：
    - [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.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/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/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/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/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.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](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 功能

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

Qualcomm 芯片组允许在双角色设备 (DRD) 模式下工作。DRD 同时支持设备角色和主机角色。设备可以动态检测要切换的角色，并相应地对控制器进行编程。支持自动待机功能，以便在拔下线缆时关闭 USB 控制器。支持视频、音频、网络共享、文件传输、媒体传输和充电等功能接口。

### Linux

| 功能 | 说明 |
| --- | --- |
| USB\_DWC3 控制器 | Linux 内核默认支持 Synopsys DesignWare Core。 |
| USB\_DWC3\_QCOM | 使用 Synopsys DesignWare Core 实现 USB 功能的 `Qscratch` 封装程序。 |
| RPM | Linux 支持使用软件驱动文件 `dwc3-qcom` 进行运行时功耗管理，以实现低功耗模式操作。 |
| USB LPM | 低功耗模式，用于 HS/SS-PHY 以及控制器的节能选项。 |
| DRD | 双角色设备检测允许 USB 在主机模式和设备模式下工作。 |

### 运行时功耗管理

用户可根据需要启用运行时功耗管理功能。[https://lore.kernel.org/all/20231017131851.8299-1-quic_kriskura@quicinc.com/](https://lore.kernel.org/all/20231017131851.8299-1-quic_kriskura@quicinc.com/) 中添加了对 LPM 的支持。

默认情况下，禁止在运行时待机或恢复 USB。如需启用这些功能，可运行以下命令：

    echo auto > /sys/bus/platform/devices/a600000.usb/power/controlCopy to clipboard

默认自动待机延迟设为 5 秒。要更改延迟，可运行以下 `sysfs` 命令：

    echo 2000 > /sys/bus/platform/devices/a600000.usb/power/autosuspend_delay_msCopy to clipboard

在角色切换期间，DWC3 控制器进入待机状态、切换 GDSC 并复位控制器，以确保主机模式外设枚举成功。

在主机模式下，为了使远程唤醒起作用，应根据用户要求为 xHCI 接口、USB 根集线器和连接的外设启用唤醒和自动待机。

    echo enabled > /sys/bus/platform/devices/xhci-hcd.0.auto/power/wakeup
    cd /sys/bus/usb/devices/
    echo enabled > usb1/power/wakeup
    echo enabled > usb2/power/wakeup
    Copy to clipboard

Note: `xhci-hcd.0` 值表示连接的 USB 设备的数量。例如，`xhci-hcd.3` 表示连接了三个 USB 设备。

要为 LS 光学鼠标启用远程唤醒，应运行以下命令：

    cd /sys/bus/usb/devices/usb1/1-1/
    echo auto > power/control
    echo enabled > power/wakeup
    Copy to clipboard

要查看运行时状态，应运行以下命令：

    cat /sys/bus/platform/devices/a600000.usb/power/runtime_statusCopy to clipboard

为避免在复合设备转换中发生待机，应通过运行以下命令删除活动 UDC 以重新绑定复合设备：

    echo on > /sys/bus/platform/devices/a600000.usb/power/control
    echo auto > /sys/bus/platform/devices/a600000.usb/power/control
    Copy to clipboard

## USB 架构

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

Qualcomm USB 软件架构由两个组件构成，一个组件基于纯上游，另一个组件为存在某些待定功能相关更改的沙盒。纯上游直接从最新的稳定内核 LTS 6.6.2 中选取。该架构使用 Yocto（发行版本 4.0）配方来创建二进制文件。

![](data:image/png;base64,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)

沙盒通过以下 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](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](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 DP 组合 PHY：Qualcomm 多用途 PHY (QMP) DisplayPort 组合 PHY 旨在实现通用性。USB 的示例用例是 SuperSpeed 和 SuperSpeed-plus 功能，这些功能允许使用 Rx+/Rx- 和 Tx+/Tx- 进行数据传输。PHY 支持显示备用模式，当 USB 以 SuperSpeed 速度工作时，显示屏可声明一对通道用于镜像功能。更多详细信息，可访问 [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/phy/qualcomm/phy-qcom-qmp-combo.c?h=v6.6.2)。

## USB 接口

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

USB 支持多种接口，分别用于传输音频、视频、调试信息，以及进行网络共享。每种 USB 接口的通信协议都各不相同，除了标准 USB 协议之外还有各自的协议。

### Android 调试桥 (ADB)

- USB ADB 为调试接口，可通过 USB 连接访问系统。各种 ADB 命令可简化设备操作，例如刷写和安装应用程序与脚本。有关 ADB 的更多详细信息，可访问 [https://developer.android.com/tools/adb](https://developer.android.com/tools/adb)。
- 内核驱动程序：ADB 使用 `f_fs.c` 公开 `/dev/usb-ffs/adb` 节点，以供用户空间服务用于执行各种操作。`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](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](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/gadget/function/f_fs.c?h=v6.6.2)。
- 用户空间服务：名为 `diag-router` 的用户空间服务使用 diag 来调节内核中的 `f_fs` 驱动程序与主机 PC 之间的连接。

### 大容量存储

- 通过使用含大容量存储驱动程序的通用接口驱动程序，设备可充当通用存储设备。
- 内核驱动程序：`mass_storage` 功能由 `f_mass_storage.c` 驱动程序调节。该驱动程序公开 `dev node[revisit]`（由主机 PC 控制）。该驱动程序确保系统充当存储设备或 CR 驱动器，以便无需任何用户空间干预操作。有关大容量存储的更多详细信息，可访问 [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](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）上的网络设备制定的规范。RNDIS 通过抽象控制和数据通道在主机与 RNDIS 设备之间定义了独立于总线的报文协议。RNDIS 足够精确，允许主机计算机上的 RNDIS 设备支持独立于厂商的类驱动程序。
- 内核驱动程序：它使用 `f_rndis` 驱动程序，该驱动程序位于上游 Linux 内核中，直接与网络接口或协议栈进行通信。

### 网络控制模型 (NCM)

- 功能：NCM 是一种协议，旨在提供与 RNDIS 相比更为先进的特性和功能。该协议可以更好地支持高速联网和复杂网络配置。
- 用途：NCM 通常用于需要更高数据传输速率和更复杂网络配置的场景。该协议常见于 USB 设备必须处理高要求网络任务的应用中。

### USB 音频 2 类 (UAC2)

- 目的：UAC2 是一种标准，用于管理 USB 音频设备与计算机之间的通信。该标准是原始 USB 音频类 (UAC) 标准的增强版。
- 改善了音质：UAC2 支持更高的音频数据传输速率，与上一代标准相比可以改善音质并缩短延迟。
- 兼容性：与 UVC 一样，UAC2 也有助于实现即插即用功能，使 USB 音频设备能够被各种操作系统轻松识别和使用，而无需安装额外的驱动程序。

### USB 视频类 (UVC)

- 目的：UVC 是一种标准，用于定义视频流设备（如网络摄像头）如何通过 USB 与计算机通信。
- 即插即用：UVC 有助于实现视频设备的即插即用功能，使其能够被各种操作系统轻松识别和兼容，而无需安装额外的驱动程序。
- 常见用途：UVC 广泛用于涉及视频流或会议的应用，为不同平台的视频设备提供标准化接口。

## USB 软件

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

软件支持以下 USB 功能。

| 功能 | 说明 |
| --- | --- |
| 外设 ADB | 通过 FFS 集成 ADB 功能 |
| 外设大容量存储 | 通用大容量存储功能 |
| 外设 DIAG | 通过 FFS 集成 DIAG 功能 |
| 外设 RNDIS | 基于 Linux 内核的标准 RNDIS 协议 |
| 外设 NCM | 基于 Linux 内核的标准 NCM 协议 |
| 主机 USB 3.0 驱动程序 (xHCI) | 两个 USB 控制器均支持 xHCI 架构 |
| 主机高速 USB | 主机模式下的高速 USB 检测 |
| 主机 HID/MS/集线器驱动程序 | 主机模式下的类驱动程序检测 |
| 主机视频驱动程序 | 在数量有限的网络摄像头模块上进行了 UVC 验证 |
| 主机链路功耗管理 | USB 主机模式低功耗实现 |
| 外设 USB 链路功耗管理 | USB 设备模式低功耗实现 |
| DRD | 可支持双角色设备（支持主机/设备模式） |
| USB Type-C | 受 PM7325B 支持；支持电流充电、CC 逻辑和 SuperSpeed USB 转换器选择，一切均在嵌入式控制器中完成 |
| USB Type-C DisplayPort | 支持 SuperSpeed USB + DP 并行工作（2 条 DP 通道） |
| USB PD 2.0/3.0 充电 | 是否支持 PD 取决于所使用的 PM7325B 解决方案。完全符合 PD 3.0 规范 |
| USB 3.1 第 1 代 | USB 控制器支持 USB 3.1 第 1 代 (5 Gbps) |

## USB 工具

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

| USB 工具 | 下载链接 |
| --- | --- |
| 平台工具 (adb/fastboot) | [https://developer.android.com/tools/releases/platform-tools](https://developer.android.com/tools/releases/platform-tools) |
| UVC LibUVC | <ul class="ul" id="usb-tools__ul_rj4_ccl_j1c"><br>                                    <li class="li"><a href="https://github.com/libuvc/libuvc" target="_blank" class="xref cursorpointer" onclick="Window.BookmapComponent.navigateExternalFile('https://github.com/libuvc/libuvc')">https://github.com/libuvc/libuvc</a></li><br><br>                                    <li class="li"><a href="https://libuvc.github.io/libuvc/" target="_blank" class="xref cursorpointer" onclick="Window.BookmapComponent.navigateExternalFile('https://libuvc.github.io/libuvc/')">https://libuvc.github.io/libuvc/</a></li><br><br>                                </ul> |
| UVC gadget | [https://github.com/wlhe/uvc-gadget](https://github.com/wlhe/uvc-gadget) |
| UVC streamer | [https://github.com/bsapundzhiev/uvc-streamer](https://github.com/bsapundzhiev/uvc-streamer) |
| UVC Video4Linux (v4l2-utils) | [https://linuxtv.org/downloads/v4l-dvb-apis/driver-api/v4l2-core.html](https://linuxtv.org/downloads/v4l-dvb-apis/driver-api/v4l2-core.html) |

## USB bootloader 配置

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

对于 bootloader 中用于调优高速和 SuperSpeed USB 信号质量的设备树参数，可以使用 Qualcomm DeviceTree 编辑器 (QDTE) 工具进行修改。有关 QDTE 的更多信息，可访问 [https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-4Y/qdte-tools.html](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-4Y/qdte-tools.html)。

QDTE 工具用于通过编辑 xbl\_config.elf 文件来配置设备树二进制 blob (DTB)，如下图所示。

Figure : 设备树布局
            ![](data:image/png;base64,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)

下表列出了用于调优 HS-USB PHY 和 SS USB PHY 信号质量的属性。

Table : USB 配置属性

| 属性名称 | 属性说明 | 数据类型 | 可能的值和值范围 | 设备行为 |
| --- | --- | --- | --- | --- |
| `path=/soc/usb0/hs_phy_cfg` | 调优主 USB 控制器 HS-PHY 的 USB 信号质量。 | UINT32-array | <ul class="ul" id="usb-configuration__ul_jml_bfl_l1c"><br>                                <li class="li">该属性为地址数组，值对 &lt;<code class="ph codeph">addr</code>, <code class="ph codeph">val</code>&gt;</li><br><br>                                <li class="li"><code class="ph codeph">addr</code> 的长度为 4 字节。共有 4 个值可供选择：<code class="ph codeph">[0x88E306C, 0x88E3070, 0x88E3074, 0x88E3078]</code></li><br><br>                                <li class="li"><code class="ph codeph">val</code> 的长度为 1 字节，取值范围为：<code class="ph codeph">0x00</code> 到 <code class="ph codeph">0xFF</code></li><br><br>                            </ul> | 改善了主 USB HS-PHY 的 USB 信号质量。 |
| `path=/soc/usb0/ss_phy_cfg` | 改善主 USB 控制器 SS-PHY 的信号质量。 | UINT32-array | <ul class="ul" id="usb-configuration__ul_lml_bfl_l1c"><br>                                <li class="li">该属性为地址数组，值对 &lt;<code class="ph codeph">addr</code>, <code class="ph codeph">val</code>&gt;</li><br><br>                                <li class="li"><code class="ph codeph">addr</code> 的长度为 4 字节。共有 2 个值可供选择：<code class="ph codeph">[0x088E8000, 0x088EB000]</code></li><br><br>                                <li class="li"><code class="ph codeph">val</code> 的长度为 1 字节，取值范围为：<code class="ph codeph">0x00 </code>到 <code class="ph codeph">0xFF</code></li><br><br>                            </ul> | 改善了主 USB SS-PHY 的信号质量。 |
| `path=/soc/usb1/hs_phy_cfg` | 改善辅 USB 控制器 HS-PHY 的 USB 信号质量。 | UINT32-array | <ul class="ul" id="usb-configuration__ul_nml_bfl_l1c"><br>                                <li class="li">该属性为地址数组，值对 &lt;<code class="ph codeph">addr</code>, <code class="ph codeph">val</code>&gt;</li><br><br>                                <li class="li"><code class="ph codeph">addr</code> 的长度为 4 字节。共有 4 个值可供选择： <code class="ph codeph">[0x88E406C,0x88E4070, 0x88E4074, 0x88E4078]</code></li><br><br>                                <li class="li"><code class="ph codeph">val</code> 的长度为 1 字节，取值范围为：<code class="ph codeph">0x00</code> 到 <code class="ph codeph">0xFF</code></li><br><br>                            </ul> | 改善了辅 USB HS-PHY 的信号质量。 |
| `Path = /sw/usb_config/fastboot_core_num` | 选择 Fastboot 的 USB 核心编号（主 = 0/辅 = 1） | UINT32 | 0 或 1 | 根据所选属性在 USB 核心 0 或核心 1 上枚举 Fastboot 设备。 |

## USB 摄像头配置

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

Qualcomm Linux 平台为符合 UVC 标准的 USB 网络摄像头提供驱动程序支持。这类摄像头受 Linux 内核的通用 `uvcvideo` 驱动程序支持，并与 Linux 内核中的通用 `uvcvideo` 驱动程序兼容。有关 `uvcvideo` 驱动程序的更多详细信息，可访问 [https://www.kernel.org/doc/html/v4.19/media/v4l-drivers/uvcvideo.html](https://www.kernel.org/doc/html/v4.19/media/v4l-drivers/uvcvideo.html)。

`uvcvideo` 驱动程序将这类摄像头作为 V4L2 视频设备（可通过字符设备节点（如 /dev/videoX）进行访问）公开。

在用户空间中，应用程序可使用 `v4l2src` GStreamer 插件管理 USB 摄像头，该插件与 Qualcomm 智能多媒体 (QIM) 软件开发套件 (SDK) 捆绑在一起。此外，Yavta (Yet another V4L2 test application) 等程序可直接与 V4L2 (Video4Linux2) 接口交互，以测试和控制摄像头设备。

当前发行版本默认不包含 Yavta 程序。要获取并交叉编译 Yavta，应按照以下步骤操作。
1. 可以使用以下任一方法搭建交叉编译环境。
    - 方法 1：要搭建交叉编译环境，可运行以下命令。

            sudo apt install gcc-aarch64-linux-gnuCopy to clipboard
    - 方法 2：要搭建交叉编译环境，可运行以下命令：
        1. 下载交叉编译器。

                wget https://releases.linaro.org/archive/14.07/components/toolchain/binaries/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux.tar.xz
                Copy to clipboard
        2. 解压获取交叉编译器。

                tar -xf gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux.tar.xzCopy to clipboard
        3. 通过运行以下命令搭建交叉编译环境。

                export PATH=$PATH:`pwd`/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/binCopy to clipboard
2. 克隆 Yavta 存储库并更改目录。

        git clone https://github.com/fastr/yavta.git
        cd yavta
        Copy to clipboard
3. 交叉编译工具。

        make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-Copy to clipboard
4. 要将 Yavta 推送到 Qualcomm Linux 芯片产品，应执行以下操作：
    1. 进入 SSH shell。有关如何操作 SSH 的更多信息，可访问 [https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254Y/how_to.html#how-to-ssh-](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254Y/how_to.html#how-to-ssh-)。
    2. 安装文件系统。

            mount -o remount,rw /Copy to clipboard
    3. 使用 SCP 或类似工具传输文件。有关如何操作 SSH 的更多信息，可访问 [https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254Y/how_to.html#how-to-ssh-](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254Y/how_to.html#how-to-ssh-)。
        例如，`scp yavta root@10.92.162.185:/usr/bin`
    4. 在 Yavta 中分配执行权限。

            chmod 0777 /usr/bin/yavtaCopy to clipboard

### 前提条件：获取图像格式和大小

要通过 Yavta 或 GStreamer 配置 USB 摄像头，必须执行以下步骤。
1. 要了解枚举详细信息，应插入 USB 摄像头并运行以下命令。

        lsusbCopy to clipboard

随即显示以下输出。

        Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
        Bus 001 Device 002: ID 03f0:0959 HP, Inc w200
        Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
        Copy to clipboard
2. 在串行控制台中识别以 /dev/videoX 形式创建的 USB 摄像头视频节点。

        ls /sys/bus/usb/devices/1-1/1-1:1.0/video4linux/Copy to clipboard

Note: `1-1/1-1:1.0` 值因具体连接的 USB 设备而异。

随即显示以下输出。

        video4	video5Copy to clipboard
3. 要使用 Yavta 查看支持的输出格式和大小，应运行以下命令：

        yavta /dev/video4 --enum-formatsCopy to clipboard

随即显示以下输出。

        Device /dev/video4 opened: w200: w200 (usb-xhci-hcd.2.auto-1).
        - Available formats:Format 0: MJPG (47504a4d)Type: Video capture (1)Name: Motion-JPEGFrame size: 1280x720 (1/30, 1/25, 1/20, 1/15, 1/10, 1/5)Frame size: 800x600 (1/30)Frame size: 640x480 (1/30)Frame size: 320x240 (1/30)
        Format 1: YUYV (56595559)Type: Video capture (1)Name: YUYV 4:2:2Frame size: 1280x720 (1/10)Frame size: 800x600 (1/15)Frame size: 640x480 (1/30)Frame size: 320x240 (1/30)
        Copy to clipboard
4. 从第 3 步的显示结果中选择所需的图像格式和大小。

### 使用 Yavta 进行配置的示例

前提条件：确保 Yavta 已完成交叉编译，并且输出格式和大小已确定。

- 要选择 1280x720 输出大小和 30 fps 的 MJPEG 格式，并在 /tmp/ 下捕获 10 帧（文件名为 testmjpeg-00000\*.bin），应运行以下命令。

        yavta -f MJPEG -s 1280x720 -t 1/30 -c10 -F/tmp/testmjpeg /dev/video4Copy to clipboard

随即显示以下输出。

        Device /dev/video4 opened: w200: w200 (usb-xhci-hcd.2.auto-1).
        Video format set: width: 1280 height: 720 buffer size: 1843789
        Video format: MJPG (47504a4d) 1280x720
        Current frame rate: 1/30
        Setting frame rate to: 1/30
        Frame rate set: 1/30
        8 buffers requested.
        length: 1843789 offset: 0
        Buffer 0 mapped at address 0x7fabd5d000.
        length: 1843789 offset: 1847296
        Buffer 1 mapped at address 0x7fabb9a000.
        length: 1843789 offset: 3694592
        Buffer 2 mapped at address 0x7fab9d7000.
        length: 1843789 offset: 5541888
        Buffer 3 mapped at address 0x7fab814000.
        length: 1843789 offset: 7389184
        Buffer 4 mapped at address 0x7fab651000.
        length: 1843789 offset: 9236480
        Buffer 5 mapped at address 0x7fab48e000.
        length: 1843789 offset: 11083776
        Buffer 6 mapped at address 0x7fab2cb000.
        length: 1843789 offset: 12931072
        Buffer 7 mapped at address 0x7fab108000.
        0 (0) [-] 0 57672 bytes 2459.697791 315967245.973463
        1 (1) [-] 1 40816 bytes 2459.730553 315967246.005839
        2 (2) [-] 2 40472 bytes 2459.763517 315967246.039485
        3 (3) [-] 3 41272 bytes 2459.797002 315967246.073073
        4 (4) [-] 4 42232 bytes 2459.830192 315967246.105592
        5 (5) [-] 5 46024 bytes 2459.863253 315967246.139142
        6 (6) [-] 6 47440 bytes 2459.896755 315967246.172384
        7 (7) [-] 7 48840 bytes 2459.930006 315967246.205114
        8 (0) [-] 8 50248 bytes 2459.963235 315967246.238308
        9 (1) [-] 9 53136 bytes 2459.996526 315967246.272690
        Captured 9 frames in 0.300183 seconds (29.981711 fps, 1559555.337911 B/s).
        8 buffers released.
        Copy to clipboard
- 要选择 1280x960 输出大小和 30 fps 的 YUV 格式，并在 /tmp/ 下捕获 10 帧（生成的文件名为 testmjpeg-00000\*.bin），应运行以下命令。

        yavta -f YUYV -s 1280x720 -t 1/30 -c10 -F/tmp/testyuv /dev/video4Copy to clipboard

随即显示以下输出。

        Device /dev/video4 opened: w200: w200 (usb-xhci-hcd.2.auto-1).
        Video format set: width: 1280 height: 720 buffer size: 1843200
        Video format: YUYV (56595559) 1280x720
        Current frame rate: 1/10
        Setting frame rate to: 1/10
        Frame rate set: 1/10
        8 buffers requested.
        length: 1843200 offset: 0
        Buffer 0 mapped at address 0x7f9853e000.
        length: 1843200 offset: 1843200
        Buffer 1 mapped at address 0x7f9837c000.
        length: 1843200 offset: 3686400
        Buffer 2 mapped at address 0x7f981ba000.
        length: 1843200 offset: 5529600
        Buffer 3 mapped at address 0x7f97ff8000.
        length: 1843200 offset: 7372800
        Buffer 4 mapped at address 0x7f97e36000.
        length: 1843200 offset: 9216000
        Buffer 5 mapped at address 0x7f97c74000.
        length: 1843200 offset: 11059200
        Buffer 6 mapped at address 0x7f97ab2000.
        length: 1843200 offset: 12902400
        Buffer 7 mapped at address 0x7f978f0000.
        0 (3) [-] 3 1843200 bytes 2536.837027 315967323.172707
        1 (4) [-] 4 1843200 bytes 2536.937122 315967323.273059
        2 (6) [-] 6 1843200 bytes 2537.136830 315967323.472473
        3 (7) [-] 7 1843200 bytes 2537.237183 315967323.572533
        4 (2) [-] 17 1843200 bytes 2538.237266 315967324.571848
        5 (2) [-] 24 1843200 bytes 2538.936539 315967325.271919
        6 (3) [-] 25 1843200 bytes 2539.036550 315967325.372403
        Warning: bytes used 0 != image size 1843200
        7 (7) [E] 28 0 bytes 2539.336529 3159  325.609436
        Warning: bytes used 0 != image size 1843200
        8 (0) [E] 22 0 bytes 2538.737975 315967325.610149
        Warning: bytes used 0 != image size 1843200
        9 (1) [E] 23 0 bytes 2538.837814 315967325.610622
        Captured 9 frames in 2.438312 seconds (3.691078 fps, 5291529.549951 B/s).
        8 buffers released.
        Copy to clipboard

### 使用 QIM SDK 中的 GStreamer 进行配置的示例

QIM SDK 采用开源多媒体框架 [GStreamer](https://gstreamer.freedesktop.org) 公开了多媒体和机器学习这两个领域简洁的 API 和易用的插件。有关安装 QIM SDK 的信息，参见[编译和刷写 QIM 产品 SDK](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-51Y/install-sdk.html)。

QIM SDK 包含 `v4l2src` 插件，该插件可选择 USB 摄像头的输入格式。`waylandsink` 插件负责在 Wayland 显示界面上渲染视频输出。

前提条件：确保 Yavta 已完成交叉编译，并且输出格式和大小已确定。

1. 要设置 Wayland 显示界面的环境变量，应在串行控制台中运行以下命令。

        export XDG_RUNTIME_DIR=/dev/socket/weston && export WAYLAND_DISPLAY=wayland-1Copy to clipboard
2. 使用 GStreamer 命令将摄像头拍摄的视频流式传输到 UI。确保已设置合适的设备 ID (`/dev/videoX`)，并根据检测到的 USB 摄像头选择正确的格式。
    - 对于 720p，运行以下命令：

            gst-launch-1.0 -e v4l2src io-mode=dmabuf-import device="/dev/video0" ! video/x-raw,format=YUY2,width=1280,height=720,framerate=10/1 ! waylandsink fullscreen=trueCopy to clipboard

随即显示以下输出。

            Y2,width=1280,height=720,framerate=10/1 ! waylandsink fullscreen=true
            Setting pipeline to PAUSED ...
            I/Adreno-UNKNOWN (1985,1985): <ReadGpuID:357>: Reading chip ID through GSL
            GBM_INFO::msmgbm_mapper(262)::gbm mapper instantiated
            gbm_create_device(224): Info: backend name is: msm_drm
            Pipeline is live and does not need PREROLL ...
            Pipeline is PREROLLED ...
            Setting pipeline to PLAYING ...
            New clock: GstSystemClock
            gbm_create_device(224): Info: backend name is: msm_drm
            GBM_ERR::msmgbm_bo_create(870)::DRM_IOCTL_PRIME_FD_TO_HANDLE failed for data fd errono: 22 (Invalid argument) drm fd: 24 data fd: 26
             GBM_ERR::msmgbm_bo_create(923)::DRM_IOCTL_PRIME_FD_TO_HANDLE failed for metadata fd errono: 22 (Invalid argument) drm fd: 24 metadata fd: 27
            GBM_ERR::msmgbm_bo_create(870)::DRM_IOCTL_PRIME_FD_TO_HANDLE failed for data fd errono: 22 (Invalid argument) drm fd: 24 data fd: 29
            GBM_ERR::msmgbm_bo_create(923)::DRM_IOCTL_PRIME_FD_TO_HANDLE failed for metadata fd errono: 22 (Invalid argument) drm fd: 24 metadata fd: 30
            GBM_ERR::msmgbm_bo_create(870)::DRM_IOCTL_PRIME_FD_TO_HANDLE failed for data fd errono: 22 (Invalid argument) drm fd: 24 data fd: 32
            GBM_ERR::msmgbm_bo_create(923)::DRM_IOCTL_PRIME_FD_TO_HANDLE failed for metadata fd errono: 22 (Invalid argument) drm fd: 24 metadata fd: 33
            GBM_ERR::msmgbm_bo_create(870)::DRM_IOCTL_PRIME_FD_TO_HANDLE failed for data fd errono: 22 (Invalid argument) drm fd: 24 data fd: 35
            GBM_ERR::msmgbm_bo_create(923)::DRM_IOCTL_PRIME_FD_TO_HANDLE failed for metadata fd errono: 22 (Invalid argument) drm fd: 24 metadata fd: 36
            Redistribute latency...
            0:00:47.7 / 99:99:99.
            Copy to clipboard
    - 对于 1080p，运行以下命令：

            gst-launch-1.0 -e v4l2src io-mode=dmabuf-import device="/dev/video0" ! video/x-raw,format=YUY2,width=1920,height=1080,framerate=5/1 ! waylandsink fullscreen=true.Copy to clipboard

## USB 定制

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

本节介绍在 USB 软件中进行各种配置和定制的要求。

### 具有 DIAG 和 ADB 接口的 USB 复合设备的 shell 脚本示例

    cd /sys/kernel/config/usb_gadget/adb
    echo on > /sys/bus/platform/devices/a600000.usb/power/control
    echo "" > UDC
    mkdir functions/ffs.diag
    echo "QCOM" > strings/0x409/manufacturer
    echo 0x05c6 > idVendor
    echo 0x901d > idProduct
    echo "Diag_ADB" > configs/c.1/strings/0x409/configuration
    
    if [ ! -d /dev/ffs-diag ]; then
    mkdir -p /dev/ffs-diag
    fi
    if [ ! -e /dev/ffs-diag/ep0 ]; then
    mount -o uid=2000,gid=2000 -t functionfs diag /dev/ffs-diag
    fi
    
    /usr/bin/diag-router &
    
    cd configs/c.1
    rm -r ffs.usb0
    ln -s ../../functions/ffs.diag f1
    ln -s ../../functions/ffs.usb0 f2
    cd ../../ udcname=`ls -1 /sys/class/udc | head -n 1`
    echo $udcname > UDC
    echo auto > /sys/bus/platform/devices/a600000.usb/power/control
    Copy to clipboard

### 通过 QUSB 服务更改 USB 复合设备

`usb.service` 启动 QUSB 服务（位于 /usr/bin/qusb），以便用户灵活地配置 USB gadget。这样可以完全省去使用 `configfs` 手动执行命令初始化 USB 的麻烦。

示例：

    qusb [bind] [unbind] [showpid] [help]
                         [setpid [-p] <PID>] [persist <PID>]
    Copy to clipboard

### 启用和配置 UVC

USB 视频设备类（也是 USB 视频类或 UVC）是一种 USB 设备类，描述可流式传输视频的设备，例如网络摄像头、数码相机、转码器、模拟视频转换器和静态图像相机。

USB 视频类规范的最新版本为 v1.5。该规范由 USB 实施者论坛在一套描述基本协议和不同净荷格式的文档中定义。

下面介绍了用于测试 UVC 的工具和步骤：
- **UVC gadget**（设备端）：用于测试 `f_uvc` 功能驱动程序的示例程序。该示例程序会打开由 `uvc_gadget` 创建的视频节点，并以指定的帧率发送 MJPEG 帧。该示例程序针对 DUT 进行交叉编译。
Note: 确保主机上已安装交叉编译 64 位 Arm® 技术编译器所需的软件包和工具。

    1. 可以使用以下任一方法搭建交叉编译环境。
        - 方法 1：运行以下命令。

                sudo apt install gcc-aarch64-linux-gnuCopy to clipboard
        - 方法 2：要搭建交叉编译环境，可运行以下命令：
            1. 下载交叉编译器。

                    wget https://releases.linaro.org/archive/14.07/components/toolchain/binaries/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux.tar.xz
                    Copy to clipboard
            2. 解压获取交叉编译器。

                    tar -xf gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux.tar.xzCopy to clipboard
            3. 通过运行以下命令搭建交叉编译环境。

                    export PATH=$PATH:`pwd`/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/binCopy to clipboard
    2. 要编译 UVC gadget 工具，应执行以下操作。
        1. 克隆 `uvc-gadget` 存储库。

                git clone https://github.com/wlhe/uvc-gadget.git
                cd uvc-gadget
                Copy to clipboard
        2. 修改 `Makefile` 以进行静态编译。

                git diff
                diff --git a/Makefile b/Makefile
                index ccf5a34..5be54cc 100644
                --- a/Makefile
                +++ b/Makefile
                @@ -2,7 +2,7 @@ CROSS_COMPILE   ?=
                 ARCH           ?= x86
                 KERNEL_DIR     ?= /usr/src/linux
                
                -CC             := $(CROSS_COMPILE)gcc
                +CC             := $(CROSS_COMPILE)gcc -static
                 KERNEL_INCLUDE := -I$(KERNEL_DIR)/include -I$(KERNEL_DIR)/arch/$(ARCH)/include
                 CFLAGS         := -W -Wall -g $(KERNEL_INCLUDE)
                 LDFLAGS                := -g
                Copy to clipboard
        3. 交叉编译 `arm64` 以生成 `uvc‑gadget` 可执行文件。

                make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-Copy to clipboard
- **UVC 查看器**（主机端）：要接收 UVC 数据，应打开计算机上的任意 USB 网络摄像头应用程序。
    1. 要进行验证，将 UVC gadget 应用程序和示例图像文件推送到设备，应执行以下操作：
        1. 进入 SSH shell。有关如何操作 SSH 的更多信息，可访问 [https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254Y/how_to.html#how-to-ssh-](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254Y/how_to.html#how-to-ssh-)。
        2. 安装文件系统。

                mount -o remount,rw /Copy to clipboard
        3. 使用 SCP 或类似工具传输文件。有关如何操作 SSH 的更多信息，可访问 [https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254Y/how_to.html#how-to-ssh-](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254Y/how_to.html#how-to-ssh-)。
            例如,`scp uvc-gadget root@10.92.175.138:/usr/bin`
        4. 分配执行权限。

                chmod 0777 /usr/bin/uvc-gadgetCopy to clipboard
    2. 切换到任意 UVC 复合设备（90CC、90DF 或 90CB）例如，

            qusb setpid 90CCCopy to clipboard

仅当用户空间视频应用程序打开时，才会在 UVC 复合设备中枚举 USB。要进行 USB 枚举，应通过控制台（串行控制台或 SSH shell）启动 `uvc_gadget`应用程序。
- YUYV
    1. 将 `image-720.yuv` 图像文件推送到 `/data`。

            scp image-720.yuv root@10.92.175.138:/dataCopy to clipboard
    2. 使用 `uvc-gadget` 工具验证 `image-720.yuv` 图像。

            uvc-gadget -u /dev/video0 -i /data/image-720.yuv -s 2 -m 2 -n 32  -t 10 -f 0
            Copy to clipboard

其中，`-f`为 &lt;format&gt;，可选择以下值：
        - `0` = V4L2\_PIX\_FMT\_YUYV
        - `1` = V4L2\_PIX\_FMT\_MJPEG
- MJPEG
    1. 将 `image-720.jpg` 图像文件推送到 `/data`。

            scp image-720.jpg root@10.92.175.138:/dataCopy to clipboard
    2. 使用 `uvc-gadget` 工具验证 `image-720.jpg` 图像。

            uvc-gadget -u /dev/video0 -i /data/image-720.jpg -s 2 -m 2 -n 32  -t 10 -f 1
            Copy to clipboard

其中，`-f`为 &lt;format&gt;，可选择以下值：
        - `0` = V4L2\_PIX\_FMT\_YUYV
        - `1` = V4L2\_PIX\_FMT\_MJPEG
- 查看 UVC gadget 帮助

        uvc-gadget -h
        Usage: uvc-gadget [options]
        Available options are
        -b             Use bulk mode
        -d             Do not use any real V4L2 capture device
        -f <format>    Select frame format
                0 = V4L2_PIX_FMT_YUYV
                1 = V4L2_PIX_FMT_MJPEG
        -h             Print this help screen and exit
        -i image       MJPEG image
        -m             Streaming mult for ISOC (b/w 0 and 2)
        -n             Number of Video buffers (b/w 2 and 32)
        -o <IO method> Select UVC IO method:
                0 = MMAP
                1 = USER_PTR
        -r <resolution> Select frame resolution:
                0 = 360p, VGA (640x360)
                1 = 720p, WXGA (1280x720)
        -s <speed>     Select USB bus speed (b/w 0 and 2)
                0 = Full Speed (FS)
                1 = High Speed (HS)
                2 = Super Speed (SS)
        -t             Streaming burst (b/w 0 and 15)
        -u device      UVC Video Output device
        -v device      V4L2 Video Capture deviceCopy to clipboard

### UAC 用例

USB 音频使用等时、中断和控制三种传输类型。所有音频数据均使用等时传输。中断传输用于中继转发与音频时钟可用性有关的信息，控制传输用于设置音量、请求采样率等。

要进行验证，应选择具有 UAC 功能的 USB 复合设备。

    qusb setpid 90CACopy to clipboard

要进行捕获或播放，应使用 `tinyutils` 应用程序，例如 `rootfs` 中提供的 `tinyplay/tinycap`。当 UAC 驱动程序绑定成功后，应用程序将打开在 `/dev/snd/` 中创建的 PCM 节点。

下面给出了一些示例命令。
- 列出声卡。

        arecord -L 
        
        aplay -f S16_LE -r 44100 -c 2 -D front:CARD=SDXLEMURSDMTPSN,DEV=0 441k_16bit_5min_m1dB.wavCopy to clipboard
- 播放音频文件。
    - 要从设备向主机播放音频，应推送音频配置相匹配的 `file.wav`文件。以下为配置示例。
        - cat /sys/kernel/config/usb_gadget/adb/functions/uac2.0/p_chmaskCopy to clipboard

输出：

                3Copy to clipboard
        - cat /sys/kernel/config/usb_gadget/adb/functions/uac2.0/c_chmaskCopy to clipboard

输出：

                3Copy to clipboard
        - cat /sys/kernel/config/usb_gadget/adb/functions/uac2.0/p_srateCopy to clipboard

输出：

                48000Copy to clipboard
        - cat /sys/kernel/config/usb_gadget/adb/functions/uac2.0/c_srateCopy to clipboard

输出：

                64000Copy to clipboard
        - cat /sys/kernel/config/usb_gadget/adb/functions/uac2.0/p_ssizeCopy to clipboard

输出：

                2Copy to clipboard
        - cat /sys/kernel/config/usb_gadget/adb/functions/uac2.0/c_ssizeCopy to clipboard

输出：

                2Copy to clipboard

Note: 要修改音频配置，应先调整上述参数再将 USB 复合设备设为 90CA。
    - 在设备 SSH shell 或串行控制台上运行以下命令。

            tinyplay
            Copy to clipboard

随即显示以下输出。

            Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] [-n n_periods]Copy to clipboard
    - 在装有 `arecord` 等应用程序的 Linux 主机上运行以下命令来捕获音频。

            arecord -f S16_LE -r 44100 -c 2 -D front:CARD=SDXLEMURSDMTPSN,DEV=0 test1.wavCopy to clipboard
- 录制音频文件。
    - 在装有 `aplay` 等应用程序的 Linux 主机上运行以下命令来播放音频。

            aplay -f S16_LE -r 44100 -c 2 -D front:CARD=SDXLEMURSDMTPSN,DEV=0 441k_16bit_5min_m1dB.wavCopy to clipboard
    - 在设备 SSH shell 或串行控制台上运行以下命令。

            tinycap
            Copy to clipboard

随即显示以下输出。

            Usage: tinycap file.wav [-D card] [-d device] [-c channels] [-r rate] [-b bits] [-a 	bits_packed] [-p period_size] [-n n_periods] [-T capture time]Copy to clipboard

### USB Power Delivery 中的角色调换

数据角色调换 (DR\_SWAP) 是指在通过 USB Type-C 连接器连接的两个端口伙伴之间调换 DFP（主机）角色与 UFP（设备）角色。电源角色调换 (PR\_SWAP) 在两个端口伙伴之间调换供电方角色和耗电方角色。

- 数据角色
    - 要将数据角色从主机调换为设备，应运行以下命令：

            cat /sys/class/typec/port0/data_role
            Copy to clipboard

随即显示以下输出。

            [host] deviceCopy to clipboard

            echo device > /sys/class/typec/port0/data_role
            cat /sys/class/typec/port0/data_roleCopy to clipboard

随即显示以下输出。

            host [device]Copy to clipboard
    - 要将数据角色从设备调换为主机，应运行以下命令：

            cat /sys/class/typec/port0/data_role
            Copy to clipboard

随即显示以下输出。

            host [device]Copy to clipboard

            echo host > /sys/class/typec/port0/data_role
            cat /sys/class/typec/port0/data_roleCopy to clipboard

随即显示以下输出。

            [host] deviceCopy to clipboard
- 电源角色
    - 要将电源角色从耗电方调换为供电方，应运行以下命令：

            cat /sys/class/typec/port0/power_role
            Copy to clipboard

随即显示以下输出。

            source [sink]Copy to clipboard

            echo source > /sys/class/typec/port0/power_role
            cat /sys/class/typec/port0/power_roleCopy to clipboard

随即显示以下输出。

            [source] sinkCopy to clipboard
    - 要将电源角色从供电方调换为耗电方，应运行以下命令：

            cat /sys/class/typec/port0/power_role
            Copy to clipboard

随即显示以下输出。

            [source] sinkCopy to clipboard

            echo sink > /sys/class/typec/port0/power_role
            cat /sys/class/typec/port0/power_roleCopy to clipboard

随即显示以下输出。

            source [sink]Copy to clipboard

### 使用 configfs 进行定制

`configfs` 文件系统提供 `sysfs` 功能的逆向操作。Linux USB gadget 可配置多个接口，其中每个接口都代表一个 USB 功能。

`qusb` 可执行文件通过 `configfs`使用以下命令配置 USB gadget。
1. 创建 `configfs` 并安装 `functionfs`。

        qusb initCopy to clipboard
2. 启动 `adbd/diag` 服务。
3. 将 `configfs` 与 USB gadget 应用程序绑定。

        qusb bindCopy to clipboard
4. 停止或解除绑定 USB gadget 应用程序。

        qusb unbindCopy to clipboard
5. 设置 diag 和 ADB 复合设备。

        qusb setpid 901DCopy to clipboard
6. 列出可用的 USB 复合设备。

        qusb showpidCopy to clipboard

USB 复合设备如下所示。
    - `A4A1 NCM`
    - `4EE7 ADB`
    - `900E DIAG`
    - `901C DIAG + UAC2`
    - `901D DIAG + ADB`
    - `9015 MASS_STORAGE + ADB`
    - `9024 RNDIS + ADB`
    - `902A RNDIS + MASS_STORAGE`
    - `902B RNDIS + ADB + MASS_STORAGE`
    - `902C RNDIS + DIAG`
    - `902D RNDIS + DIAG + ADB`
    - `902F RNDIS + DIAG + MASS_STORAGE`
    - `9060 DIAG + QDSS + ADB`
    - `908C NCM + ADB`
    - `90CA DIAG + UAC2 + ADB`
    - `90CB DIAG + UVC + ADB`
    - `90CC DIAG + UAC2 + UVC + ADB`
    - `90DF DIAG + UVC`
    - `90E0 DIAG + UAC2 + UVC`
    - `F000 MASS_STORAGE`
    - `F00E RNDIS`

## USB 验证

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

下表列出了用于验证 USB 设备模式和主机模式的各种方法。

| USB 模式 | 功能 | 说明 |
| --- | --- | --- |
| USB 设备模式 | ADB | 默认情况下，USB 在仅 ADB 复合设备中进行枚举。 |
| USB 设备模式 | DIAG | 参见[具有 DIAG 和 ADB 接口的 USB 复合设备的 shell 脚本示例](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html#usb-customization__section_y3t_dhl_j1c)和[通过 QUSB 服务更改 USB 复合设备](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html#usb-customization__section_nqf_ghl_j1c)。 |
| USB 设备模式 | 大容量存储 | 更改 USB 复合设备（参见[通过 QUSB 服务更改 USB 复合设备](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html#usb-customization__section_nqf_ghl_j1c)），然后选择 mass\_storage 复合设备。 |
| USB 设备模式 | 复合设备转换 | 参见[具有 DIAG 和 ADB 接口的 USB 复合设备的 shell 脚本示例](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html#usb-customization__section_y3t_dhl_j1c)和[通过 QUSB 服务更改 USB 复合设备](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html#usb-customization__section_nqf_ghl_j1c)。 |
| USB 设备模式 | USB LPM 与电缆连接和断开 | 手动断开 USB，以使 `dwc3-qcom` 模块切换到低功耗模式。 |
| USB 设备模式 | NCM | 更改 USB 复合设备（[通过 QUSB 服务更改 USB 复合设备](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html#usb-customization__section_nqf_ghl_j1c)），然后选择 NCM 复合设备。 |
| USB 主机模式 | 主机 HID 类 | 通过将 HID 类设备直接连接到被测设备来切换到主机模式。 |
| USB 主机模式 | 主机 MS 类 | 通过将 MS 类设备直接连接到被测设备来切换到主机模式。 |
| USB 主机模式 | 主机 HUB 类 | 通过将 HUB 类设备直接连接到被测设备来切换到主机模式。 |
| USB 主机模式 | 主机功耗管理 | 当 `dwc3-qcom` 模块在主机模式下切换到低功耗模式时，外设支持主机模式待机（耳机）。 |
| USB 主机模式 | USB LPM 与外设连接和断开 | 当 `dwc3-qcom` 模块在主机模式下切换到低功耗模式时，外设支持主机模式待机（耳机）。 |
| USB 主机模式 | USB L1 LPM 与高速 | 当 `dwc3-qcom` 模块在主机模式下切换到低功耗模式时，高速外设支持主机模式待机（耳机）。 |
| USB 主机模式 | USB 摄像头 | 参见 [USB 摄像头配置](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html#usb-camera-configuration)。 |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |

## USB 调试

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

本节提供有关获取调试日志的各种方法的信息。调试日志包括 `regdump`、调试 `ftraces`、`configfs` 节点等。在调试与进入/退出低功耗模式、SMMU 故障、无时钟访问相关的问题时，可通过上述日志查看事件和控制器状态的详细信息。

### USB 跟踪

使用 `debugfs` 跟踪可以更加深入地了解 USB 线上发生的每一个事务。如需查看跟踪列表，可运行以下命令。
Note: 确保已挂载 `debugfs`。如果尚未挂载，可运行以下命令来挂载 `debugfs`。

    mount -t debugfs none /sys/kernel/debugCopy to clipboard

    ls /sys/kernel/debug/tracing/events/dwc3Copy to clipboard

以下是可用于验证 xHCI/gadget 堆栈/UCSI 中数据传输的跟踪。

    dwc3_alloc_request  dwc3_event              dwc3_gadget_generic_cmd  enable
    dwc3_complete_trb   dwc3_free_request       dwc3_gadget_giveback     filter
    dwc3_ctrl_req       dwc3_gadget_ep_cmd      dwc3_prepare_trb
    dwc3_ep_dequeue     dwc3_gadget_ep_disable  dwc3_readl
    dwc3_ep_queue       dwc3_gadget_ep_enable   dwc3_writel
    Copy to clipboard

如需列出 xHCI/HCD 中的跟踪，可运行以下命令。

    ls /sys/kernel/debug/tracing/events/xhci-hcdCopy to clipboard

以下是可用于验证 xHCI/HCD 中数据传输的跟踪。

    enable                            xhci_handle_cmd_config_ep
    filter                            xhci_handle_cmd_disable_slot
      xhci_add_endpoint                 xhci_handle_cmd_reset_dev
      xhci_address_ctrl_ctx             xhci_handle_cmd_reset_ep
      xhci_address_ctx                  xhci_handle_cmd_set_deq
      xhci_alloc_dev                    xhci_handle_cmd_set_deq_ep
      xhci_alloc_virt_device            xhci_handle_cmd_stop_ep
      xhci_configure_endpoint           xhci_handle_command
      xhci_configure_endpoint_ctrl_ctx  xhci_handle_event
      xhci_dbc_alloc_request            xhci_handle_port_status
      xhci_dbc_free_request             xhci_handle_transfer
      xhci_dbc_gadget_ep_queue          xhci_hub_status_data
      xhci_dbc_giveback_request         xhci_inc_deq
      xhci_dbc_handle_event             xhci_inc_enq
      xhci_dbc_handle_transfer          xhci_queue_trb
      xhci_dbc_queue_request            xhci_ring_alloc
      xhci_dbg_address                  xhci_ring_ep_doorbell
      xhci_dbg_cancel_urb               xhci_ring_expansion
      xhci_dbg_context_change           xhci_ring_free
      xhci_dbg_init                     xhci_ring_host_doorbell
      xhci_dbg_quirks                   xhci_setup_addressable_virt_device
      xhci_dbg_reset_ep                 xhci_setup_device
      xhci_dbg_ring_expansion           xhci_setup_device_slot
      xhci_discover_or_reset_device     xhci_stop_device
      xhci_free_dev                     xhci_urb_dequeue
      xhci_free_virt_device             xhci_urb_enqueue
      xhci_get_port_status              xhci_urb_giveback
      xhci_handle_cmd_addr_dev
    Copy to clipboard

如需列出 UVC gadget 驱动程序的可用事件，可运行以下命令。

    ls /sys/kernel/debug/tracing/events/gadgetCopy to clipboard

随即显示以下输出。

    enable                      usb_gadget_activate
    filter                      usb_gadget_clear_selfpowered
      usb_ep_alloc_request        usb_gadget_connect
      usb_ep_clear_halt           usb_gadget_deactivate
      usb_ep_dequeue              usb_gadget_disconnect
      usb_ep_disable              usb_gadget_frame_number
      usb_ep_enable               usb_gadget_giveback_request
      usb_ep_fifo_flush           usb_gadget_set_remote_wakeup
      usb_ep_fifo_status          usb_gadget_set_selfpowered
      usb_ep_free_request         usb_gadget_vbus_connect
      usb_ep_queue                usb_gadget_vbus_disconnect
      usb_ep_set_halt             usb_gadget_vbus_draw
      usb_ep_set_maxpacket_limit  usb_gadget_wakeup
      usb_ep_set_wedge
    Copy to clipboard

如需列出 UCSI 驱动程序中的可用事件，可运行以下命令。

    ls /sys/kernel/debug/tracing/events/ucsiCopy to clipboard

随即显示以下输出。

    enable  ucsi_connector_change  ucsi_register_port  ucsi_run_command
    filter  ucsi_register_altmode  ucsi_reset_ppm
    Copy to clipboard

### USB 寄存器打印

USB `debugfs`提供以下信息。
- 工作模式。

        cat /sys/kernel/debug/usb/a600000.usb/mode
        Copy to clipboard

随即显示以下输出。

        deviceCopy to clipboard
- 设备模式下所有端点的状态和传输环形缓冲区 (TRB) 队列。
- 当前链路状态。

        cat /sys/kernel/debug/usb/a600000.usb/link_stateCopy to clipboard

随即显示以下输出。

        SleepCopy to clipboard
- 用于深入调试的 LSP 转储。

        cat /sys/kernel/debug/usb/a600000.usb/lsp_dumpCopy to clipboard

随即显示以下输出。

        GDBGLSP[0] = 0x40000000
        GDBGLSP[1] = 0x00003a80
        GDBGLSP[2] = 0x38200000
        GDBGLSP[3] = 0x00802000
        GDBGLSP[4] = 0x126f1000
        GDBGLSP[5] = 0x3a800018
        GDBGLSP[6] = 0x00000a80
        GDBGLSP[7] = 0xfc03f14a
        GDBGLSP[8] = 0x0b803fff
        GDBGLSP[9] = 0x00000000
        GDBGLSP[10] = 0x000000f8
        GDBGLSP[11] = 0x000000f8
        GDBGLSP[12] = 0x000000f8
        GDBGLSP[13] = 0x000000f8
        GDBGLSP[14] = 0x000000f8
        GDBGLSP[15] = 0x000000f8Copy to clipboard

    ls /sys/kernel/debug/usb/a600000.usbCopy to clipboard

随即显示以下输出。

    ep0in    ep11out  ep14in   ep1out  ep4in   ep6out  ep9in       regdump
    ep0out   ep12in   ep14out  ep2in   ep4out  ep7in   ep9out      testmode
    ep10in   ep12out  ep15in   ep2out  ep5in   ep7out  link_state
    ep10out  ep13in   ep15out  ep3in   ep5out  ep8in   lsp_dump
    ep11in   ep13out  ep1in    ep3out  ep6in   ep8out  modeCopy to clipboard

`regdump`命令提供以下寄存器的寄存器空间的当前状态：
- 设备模式的寄存器，例如 DCTL、DSTS 和 DCFG
- 全局寄存器，例如 GCTL 和 GSTS

    cd /sys/kernel/debug/usb/a600000.usb
    cat regdump
    Copy to clipboard

随即显示以下输出。

    GSBUSCFG0 = 0x2222000e
    GSBUSCFG1 = 0x00001700
    GTXTHRCFG = 0x00000000
    GRXTHRCFG = 0x00000000
    GCTL = 0x00102000
    GEVTEN = 0x00000000
    GSTS = 0x7e800000
    GUCTL1 = 0x810c1802
    GSNPSID = 0x5533330a
    GGPIO = 0x00000000
    GUID = 0x00060500
    GUCTL = 0x0d00c010
    GBUSERRADDR0 = 0x00000000
    GBUSERRADDR1 = 0x00000000
    GPRTBIMAP0 = 0x00000000
    GPRTBIMAP1 = 0x00000000
    GHWPARAMS0 = 0x4020400a
    GDBGFIFOSPACE = 0x00420000
    GDBGLTSSM = 0x41090658
    GDBGBMU = 0x20300000
    GPRTBIMAP_HS0 = 0x00000000
    GPRTBIMAP_HS1 = 0x00000000
    GPRTBIMAP_FS0 = 0x00000000
    GPRTBIMAP_FS1 = 0x00000000
    GUCTL2 = 0x0198440d
    VER_NUMBER = 0x00000000
    VER_TYPE = 0x00000000
    GUSB2PHYCFG(0) = 0x00002400
    GUSB2I2CCTL(0) = 0x00000000
    GUSB2PHYACC(0) = 0x00000000
    GUSB3PIPECTL(0) = 0x030e0002
    GTXFIFOSIZ(0) = 0x00000042
    GRXFIFOSIZ(0) = 0x00000305
    GEVNTADRLO(0) = 0xfffff000
    GEVNTADRHI(0) = 0x0000000f
    GEVNTSIZ(0) = 0x00001000
    GEVNTCOUNT(0) = 0x00000000
    GHWPARAMS8 = 0x000007ea
    GUCTL3 = 0x00010000
    GFLADJ = 0x8c80c8a0
    DCFG = 0x00cc08b4
    DCTL = 0x8cf00a00
    DEVTEN = 0x00000257
    DSTS = 0x008a5200
    DGCMDPAR = 0x00000000
    DGCMD = 0x00000000
    DALEPENA = 0x0000000f
    DEPCMDPAR2(0) = 0x00000000
    DEPCMDPAR1(0) = 0xffffe000
    DEPCMDPAR0(0) = 0x0000000f
    DEPCMD(0) = 0x00000006
    OCFG = 0x00000000
    OCTL = 0x00000000
    OEVT = 0x00000000
    OEVTEN = 0x00000000
    OSTS = 0x00000000
    Copy to clipboard

### 主机模式 sysfs 查询

    lsusb
    Copy to clipboard

随即显示以下输出。

    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 002: ID 03f0:134a HP, Inc Optical Mouse
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Copy to clipboard

    cd /sys/bus/usb/devices/
    lsCopy to clipboard

随即显示以下输出。 

    1-0:1.0  1-1  1-1:1.0  2-0:1.0  usb1  usb2
    Copy to clipboard

    cat /sys/kernel/debug/usb/devices
    Copy to clipboard

随即显示以下输出。

    T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 1
    B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0002 Rev= 6.05
    S:  Manufacturer=Linux 6.5.0-rc4 xhci-hcd
    S:  Product=xHCI Host Controller
    S:  SerialNumber=xhci-hcd.0.auto
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
    
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=1.5  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=03f0 ProdID=134a Rev= 1.00
    S:  Manufacturer=PixArt
    S:  Product=HP USB Optical Mouse
    C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=10ms
    
    T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=5000 MxCh= 1
    B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0003 Rev= 6.05
    S:  Manufacturer=Linux 6.5.0-rc4 xhci-hcd
    S:  Product=xHCI Host Controller
    S:  SerialNumber=xhci-hcd.0.auto
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
    Copy to clipboard

## USB 示例

Source: [https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html](https://docs.qualcomm.com/doc/80-70014-8Y/topic/usb.html)

有关上游设备树参考的信息，可访问 [https://git.linaro.org/kernel-org/linux-next.git/tree/arch/arm64/boot/dts/qcom/sc7280.dtsi](https://git.linaro.org/kernel-org/linux-next.git/tree/arch/arm64/boot/dts/qcom/sc7280.dtsi)。

有关 Qualcomm Linux 芯片产品设备树节点的信息，可访问 [https://git.linaro.org/kernel-org/linux-next.git/tree/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts](https://git.linaro.org/kernel-org/linux-next.git/tree/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts)。

有关 USB 驱动程序中的 RPM 变更信息及其他示例，可访问 [https://patchwork.kernel.org/project/linux-usb/list/?series=793939&archive=both](https://patchwork.kernel.org/project/linux-usb/list/?series=793939&amp;archive=both)。

有关如何平展设备树的信息，可访问 [https://lore.kernel.org/all/af60c05b-4a0f-51b8-486a-1fc601602515@quicinc.com/](https://lore.kernel.org/all/af60c05b-4a0f-51b8-486a-1fc601602515@quicinc.com/) 和 [https://lore.kernel.org/all/20231016-dwc3-refactor-v1-0-ab4a84165470@quicinc.com/](https://lore.kernel.org/all/20231016-dwc3-refactor-v1-0-ab4a84165470@quicinc.com/)。

Last Published: Aug 22, 2024

[Previous Topic
PCIe](https://docs.qualcomm.com/bundle/publicresource/80-70014-8Y/topics/pcie.md) [Next Topic
参考资料](https://docs.qualcomm.com/bundle/publicresource/80-70014-8Y/topics/references.md)