USB 开发入门

通用串行总线 (USB) 设备通过配置、接口、备用设置和终结点来定义其功能和功能。 本主题提供这些概念的高级概述。 有关详细信息,请参阅 通用串行总线文档中的 USB 规范。

在本节中

主题 说明
USB 设备布局 USB 设备通过配置、接口、备用设置和终结点定义其功能和功能。 本主题提供这些概念的高级概述。
标准 USB 描述符 USB 设备在名为 USB 描述符的数据结构中提供有关自身的信息。 本部分提供有关设备、配置、接口和终结点描述符的信息,以及从 USB 设备检索它们的方法。
USB 终结点及其管道 USB 设备具有用于数据传输的终结点。 在主机端,终结点由管道表示。 本主题区分这两个术语。
Windows 中的 USB - 常见问题解答 本主题为刚开始开发和集成 USB 设备和驱动程序与 Windows 操作系统的驱动程序开发人员提供常见问题。

常见 USB 方案

1 - 获取用于通信的设备句柄 ,并使用检索到的句柄或对象发送数据传输。

客户端驱动程序 UWP 应用 Windows 桌面应用
KMDF
WdfUsbTargetDeviceCreateWithParameters

UMDF
IWDFUsbTargetDevice
UsbDevice

如何连接到 USB 设备
WinUsb_Initialize

编写基于 WinUSB 模板的 Windows 桌面应用

USB 描述符检索 以获取有关设备配置的信息, () 、接口 () 、设置 () 及其终结点 () 。

客户端驱动程序 UWP 应用 Windows 桌面应用
KMDF

WdfUsbTargetDeviceGetDeviceDescriptor
WdfUsbTargetDeviceRetrieveConfigDescriptor

UMDF

IWDFUsbTargetDevice::RetrieveDescriptor

USB 描述符
UsbDevice.DeviceDescriptor
UsbConfiguration.Descriptors
UsbInterface.Descriptors
UsbInterfaceSetting.Descriptors

如何获取 USB 描述符
WinUsb_GetDescriptor
WinUsb_QueryInterfaceSettings
WinUsb_QueryPipe

向设备查询 USB 描述符

2 - 配置设备 以选择活动的 USB 配置和每个接口的设置。

客户端驱动程序 UWP 应用 Windows 桌面应用
KMDF:
WdfUsbTargetDeviceSelectConfig
WdfUsbTargetDeviceCreateUrb
USBD_SelectConfigUrbAllocateAndBuild
WdfUsbInterfaceSelectSetting

如何为 USB 设备选择配置

如何在 USB 接口中选择备用设置

UMDF:
不支持配置选择

IWDFUsbInterface::SelectSetting
UsbInterfaceSetting.SelectSettingAsync

如何选择 USB 接口设置
WinUsb_SetCurrentAlternateSetting

3 - 发送控制传输 ,以配置设备和执行特定于特定设备的供应商命令。

客户端驱动程序 UWP 应用 Windows 桌面应用
KMDF:
WdfUsbTargetDeviceSendControlTransferSynchronously
WdfUsbTargetDeviceFormatRequestForControlTransfer
USBD_SelectConfigUrbAllocateAndBuild

UMDF:
IWDFUsbTargetDevice::FormatRequestForControlTransfer

如何发送 USB 控制传输
SendControlInTransferAsync
SendControlOutTransferAsync

如何发送 USB 控制传输
WinUsb_ControlTransfer

将控制传输发送到默认终结点

4 - 发送批量传输,通常由传输大量数据的大容量存储设备使用。

客户端驱动程序 UWP 应用 Windows 桌面应用
KMDF:
WdfUsbTargetPipeReadSynchronously
WdfUsbTargetPipeWriteSynchronously
WdfUsbTargetPipeFormatRequestForRead
WdfUsbTargetPipeFormatRequestForWrite

如何将发送 USB 大容量传输请求

如何使用连续读取器从 USB 管道读取数据

UMDF:
IUsbTargetPipeContinuousReaderCallbackReadComplete
IWDFUsbTargetPipe
IWDFUsbTargetPipe2
UsbBulkInPipe.InputStream
UsbBulkOutPipe.OutputStream

如何发送 USB 批量传输请求
WinUsb_ReadPipe
WinUsb_ReadPipe

发出 I/O 请求

5 — 发送中断传输。 读取数据以检索硬件中断数据。

客户端驱动程序 UWP 应用 Windows 桌面应用
与批量传输相同 UsbInterruptInPipe.DataReceived
UsbInterruptOutPipe.OutputStream

如何发送 USB 中断传输请求
与批量传输相同

6 - 发送常量传输,主要用于媒体流式处理设备。

客户端驱动程序 UWP 应用 Windows 桌面应用
KMDF:
WdfUsbTargetDeviceCreateIsochUrb

如何将数据传输到 USB 常时等量终结点

UMDF:
不支持
不支持 WinUsb_RegisterIsochBuffer
WinUsb_UnregisterIsochBuffer
WinUsb_WriteIsochPipeAsap
WinUsb_ReadIsochPipeAsap
WinUsb_WriteIsochPipe
WinUsb_ReadIsochPipe
WinUsb_GetCurrentFrameNumber
WinUsb_GetAdjustedFrameNumber

从 WinUSB 桌面应用发送 USB 常时等量传输

7 — USB 选择性挂起 ,允许设备进入低功耗状态,并使设备恢复工作状态。

客户端驱动程序 UWP 应用 Windows 桌面应用
KMDF:
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS
WdfDeviceAssignS0IdleSettings

UMDF:
IWDFUsbTargetDevice::SetPowerPolicy
IWDFDevice2::AssignS0IdleSettings
IWDFDevice3::AssignS0IdleSettingsEx

如何将设备发送到选择性挂起
不支持 WinUsb_SetPowerPolicy

WinUSB 电源管理

另请参阅