Windows 中的 USB 设备端驱动程序

介绍 USB 函数堆栈的体系结构。

在 USB 设备上,当 ACPI 创建 USB 设备物理设备对象 (PDO) 时,USB 功能堆栈是指即插即用管理器枚举的一组驱动程序。

在单个配置设备中,USB 设备可以定义一个或多个接口。 例如,媒体传输协议 (MTP) ,用于向/从设备传输文件。 复合 USB 设备可以在单个配置中支持多个接口。 USB 函数堆栈为每个接口创建 PDO,PnP 管理器加载类驱动程序,该驱动程序 (该接口的 FDO) 创建函数设备对象。

USB 函数堆栈在此图中概念化:

usb 函数堆栈。

应用程序和服务

USB 函数类驱动程序

USB 函数类驱动程序实现 USB 设备上) 特定接口 (或一组接口的功能。 MTP 和 IpOverUsb 是系统提供的类驱动程序的示例。 类驱动程序可以完全作为内核模式驱动程序实现,也可以是与系统提供的类驱动程序 GenericUSBFn.sys 配对的用户模式服务。

函数类驱动程序使用 USB 函数类驱动程序将请求发送到 UFX 编程接口的控制器。

UFX) (USB 函数类扩展

UFX) (USB 函数类扩展是系统提供的 内核模式驱动程序框架 (KMDF) 扩展。 USB 是标准总线,具有一些必需的功能和功能。 UFX 负责实现所有 USB 功能控制器通用的 USB 功能逻辑,以及处理和/或调度来自 USB 函数类驱动程序的请求。 具体而言,UFX 处理枚举设备和处理标准控制传输的过程。 若要执行其中一些操作,UFX 需要了解总线的功能。 建立类扩展接口时,这些功能将报告给 UFX。

UFX 公开上层 (USB 函数类驱动程序和用户模式服务) 可用于将请求发送到控制器的标准 IOCTL。 此外,UFX 还通知上层从主机接收的标准请求。

USB 函数客户端驱动程序

UFX 提供跨不同控制器一致工作的抽象接口。 但是,控制器具有不同的功能,存在诸如终结点数量、终结点类型、低功耗、远程唤醒等限制。 例如,某些控制器支持 DMA,而其他控制器则不支持。 某些控制器在硬件中实现流,而其他控制器则要求驱动程序处理流。 出于这些原因,UFX 中仅处理常见功能。 传输、电源管理、流支持以及其他因控制器而异的功能由客户端驱动程序处理。

USB 函数客户端驱动程序负责实现特定于控制器的操作。 其中包括实现终结点数据传输、USB 设备状态更改 (重置、暂停、恢复) 、连接/分离检测、端口/充电器检测。 客户端驱动程序还负责处理电源管理和 PnP 事件。

将函数客户端驱动程序编写为 内核模式驱动程序框架 (KMDF) 驱动程序,方法是使用 USB 函数类驱动程序到 UFX 编程接口

Microsoft 为 ChipIdea 和 Synopsys 控制器提供内置函数客户端驱动程序 (UfxChipidea.sys Ufxsynopsys.sys) 。

USB 下部筛选器驱动程序

如果功能控制器使用内置 Synopsys 和 ChipIdea 驱动程序,USB 下部筛选器驱动程序支持检测充电器。 筛选器驱动程序从 USB 端口检测开始管理 USB 充电。 t 必须发布它支持的每个充电器类型的 GUID,以及该充电器的属性列表。 如果特定充电器可配置,则较低的 USB 筛选器驱动程序将定义一个列表,其中包含受支持的 PropertyID 及其可发送给它的相应值类型,以配置充电器。 驱动程序还会通知电池组何时可以开始充电,以及设备可以消耗的最大电流量。 对于 Synopsys 和 ChipIdea 驱动程序以外的客户端驱动程序,可以在客户端驱动程序中实现充电逻辑。

函数类驱动程序使用编程接口向 UFX 发送请求 ,以支持专有充电器