Universal Serial Bus (USB) provides an expandable, hot-pluggable Plug and Play serial interface that ensures a standard, low-cost connection for peripheral devices such as keyboards, mice, joysticks, printers, scanners, storage devices, modems, and video conferencing cameras. Migration to USB is recommended for all peripheral devices that use legacy ports such as PS/2, serial, and parallel ports.
The USB-IF is a Special Interest Groups (SIGs) that maintains the Official USB Specification, test specifications and tools.
Windows operating systems include native support for USB host controllers, hubs, and devices and systems that comply with the official USB specification. Windows also provides programming interfaces that you can use to develop device drivers and applications that communicate with a USB device.
|USB in Windows|
Microsoft-provided USB drivers
Windows 10: What's new for USB
Overview of new features and improvements in USB in Windows 10.
Frequently asked questions from driver developers about the USB stack and features that are supported in USB.
Microsoft OS Descriptors for USB Devices
Windows defines MS OS descriptors that allows better enumeration when connected to system running Windows operating system
WDF extension for developing USB drivers
Testing USB devices with Windows
USB device-side drivers in Windows
A set of drivers for handling common function logic for USB devices.
USB host-side drivers in Windows
Microsoft provides a core stack of drivers that interoperate with devices that are connected to EHCI and xHCI controllers.
USB-IF device class drivers
Windows provides in-box device class drivers for many USB-IF approved device classes, audio, mass storage, and so on.
USB generic function driver–WinUSB
Windows provides Winusb.sys that can be loaded as a function driver for a custom device and a function of a composite device.
USB generic parent driver for composite devices–Usbccgp
Parent driver for USB devices with multiple functions. Usbccgp creates physical device objects (PDOs) for each of those functions. Those individual PDOs are managed by their respective USB function drivers, which could be the Winusb.sys driver or a USB device class driver.
Testing USB hardware, drivers, and apps in Windows
Get information about the tools that you can use to test your USB hardware or software, capture traces of operations and other system events, and observe how the USB driver stack responds to a request sent by a client driver or an application.
Read an overview of tests in the Hardware Certification Kit that enable hardware vendors and device manufacturers to prepare their USB devices and host controllers for Windows Hardware Certification submission.
Other Resources for USB
- Official USB Specification
Provides complete technical details for the USB protocol.
- Microsoft Windows USB Core Team Blog
Check out posts written by the Microsoft USB Team. The blog focuses on the Windows USB driver stack that works with various USB Host controllers and USB hubs found in Windows PC. A useful resource for USB client driver developers and USB hardware designers understand the driver stack implementation, resolve common issues, and explain how to use tools for gathering traces and log files.
- OSR Online Lists - ntdev
Discussion list managed by OSR Online for kernel-mode driver developers.
- Windows Dev-Center for Hardware Development
Miscellaneous resources based on frequently asked questions from developers who are new to developing USB devices and drivers that work with Windows operating systems.
- Write a USB client driver (KMDF, UMDF)
Introduces you to USB driver development. Provides information about choosing the most appropriate model for providing a USB driver for your device. This section also includes tutorials about writing your first user-mode and kernel-mode USB drivers by using the USB templates included with Microsoft Visual Studio.
Getting started with USB client driver development
USB client driver reference
- Write a USB host controller driver
If you are developing an xHCI host controller that is not compliant with the specification or developing a custom non-xHCI hardware (such as a virtual host controller), you can write a host controller driver that communicates with UCX. For example, consider a wireless dock that supports USB devices. The PC communicates with USB devices through the wireless dock by using USB over TCP as a transport.
Developing Windows drivers for USB host controllers
USB host controller extension (UCX) reference
- Write a function controller driver for a USB device
You can develop a controller driver that handles all USB data transfers and commands sent by the host to the device. This driver communicates with the Microsoft-provided USB function controller extension (UFX).
Developing Windows drivers for USB function controllers
USB function class extension (UFX) reference
- Write a USB Type-C connector driver
Windows 10 introduces support for the new USB connector: USB Type-C. You can write a driver for the connector that communicates with the Microsoft-provided class extension module: UcmCx to handle scenarios related to Type-C connectors such as, which ports support Type-C, which ports support power delivery.
USB connector manager class extension (UcmCx) reference
- Write a Windows Store app
Provides step-by-step instructions about implementing USB features in a Windows Store app. To write such an app for a USB device you need Visual Studio and Microsoft Windows Software Development Kit (SDK) .
Talk to USB devices, start to finish
- Write a Windows desktop app
Describes how an application can call WinUSB Functions to communicate with a USB device.
Write a WinUSB application
- Common programming scenarios
List of common tasks that a driver or an app performs in order to communicate with a USB device. Get quick info about the programming interfaces you need for each task.
Windows Store app samples for USB
Windows driver samples for USB
- Download kits and tools for Windows
- Windows Store apps for USB devices
- Understanding USB 3.0 in Windows 8
- Building great USB 3.0 devices
- USB Debugging Innovations in Windows 8 (Part I, II, & III)
USB hardware for learning
MUTT and SuperMUTT devices and the accompanying software package are integrated into the HCK suite of USB tests. They
provide automated testing that can be used during the development cycle of USB controllers, devices and systems, especially stress testing.
- OSR USB FX2 Learning Kit
If you are new to USB driver development. The kit is the most suitable to study USB samples included in this documentation set. You can get the learning kit from OSR Online Store.
Common USB scenarios
1—Get the device handle for communication and use the retrieved handle or object to send data transfers.
USB descriptor retrieval to get information about the device's configuration(s), interface(s), setting(s), and their endpoint(s).
2—Configure the device to select an active USB configuration and setting per interface.
3—Send control transfers for configuring the device and performing vendor commands that are specific to particular device.
4—Send bulk transfers, typically used by mass storage devices that transfer large amount of data.
5—Send interrupt transfers. Data is read to retrieve hardware interrupt data.
6—Send isochronous transfers, mostly used for media streaming devices.
7—USB selective suspend to allow the device to enter a low power state and bring the device back to working state.
Send comments about this topic to Microsoft