USB 개발 시작

USB(유니버설 직렬 버스) 디바이스는 구성, 인터페이스, 대체 설정 및 엔드포인트를 통해 기능과 기능을 정의합니다. 이 항목에서는 이러한 개념에 대한 개략적인 개요를 제공합니다. 자세한 내용은 유니버설 직렬 버스 문서의 USB 사양을 참조하세요.

섹션 내용

항목 Description
USB 디바이스 레이아웃 USB 디바이스는 구성, 인터페이스, 대체 설정 및 엔드포인트를 통해 기능과 기능을 정의합니다. 이 항목에서는 이러한 개념에 대한 개략적인 개요를 제공합니다.
표준 USB 설명자 USB 디바이스는 USB 설명자라는 데이터 구조에서 자체에 대한 정보를 제공합니다. 이 섹션에서는 디바이스, 구성, 인터페이스 및 엔드포인트 설명자에 대한 정보와 USB 디바이스에서 검색하는 방법을 제공합니다.
USB 엔드포인트 및 해당 파이프 USB 디바이스에는 데이터 전송에 사용되는 엔드포인트가 있습니다. 호스트 쪽에서 엔드포인트는 파이프로 표시됩니다. 이 항목에서는 이러한 두 용어를 구분합니다.
Windows의 USB - FAQ 이 항목에서는 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_WritePipe
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 전원 관리

추가 정보