Deskriptor USB standar

Perangkat USB menyediakan informasi tentang dirinya sendiri dalam struktur data yang disebut deskriptor USB. Bagian ini menyediakan informasi tentang perangkat, konfigurasi, antarmuka, dan deskriptor titik akhir serta cara untuk mengambilnya dari perangkat USB.

Deskriptor USB dipetakan ke tata letak perangkat

Perangkat lunak host mendapatkan deskriptor dari perangkat yang terpasang dengan mengirim berbagai permintaan kontrol standar ke titik akhir default (Dapatkan permintaan Deskriptor, lihat bagian spesifikasi USB 9.4.3). Permintaan tersebut menentukan jenis deskriptor yang akan diambil. Menanggapi permintaan tersebut, perangkat mengirim deskriptor yang menyertakan informasi tentang perangkat, konfigurasi, antarmuka, dan titik akhir terkait. Deskriptor perangkat berisi informasi tentang seluruh perangkat. Deskriptor konfigurasi berisi informasi tentang setiap konfigurasi perangkat. Deskriptor string berisi string teks Unicode.

Setiap perangkat USB mengekspos deskriptor perangkat yang menunjukkan informasi kelas perangkat, vendor dan pengidentifikasi produk, dan jumlah konfigurasi. Setiap konfigurasi mengekspos deskriptor konfigurasi yang menunjukkan jumlah antarmuka dan karakteristik daya. Setiap antarmuka mengekspos deskriptor antarmuka untuk setiap pengaturan alternatifnya yang berisi informasi tentang kelas dan jumlah titik akhir. Setiap titik akhir dalam setiap antarmuka mengekspos deskriptor titik akhir yang menunjukkan jenis titik akhir dan ukuran paket maksimum.

Misalnya, mari kita pertimbangkan tata letak perangkat papan OSR FX2 (lihat tata letak perangkat USB). Pada tingkat perangkat, perangkat mengekspos deskriptor perangkat dan deskriptor titik akhir untuk titik akhir default. Pada tingkat konfigurasi, perangkat mengekspos deskriptor konfigurasi untuk Konfigurasi 0. Pada tingkat antarmuka, ini mengekspos satu deskriptor antarmuka untuk Pengaturan Alternatif 0. Pada tingkat titik akhir, ini mengekspos tiga deskriptor titik akhir.

Diagram kelas tata letak deskriptor perangkat USB.

Deskriptor perangkat USB

Setiap perangkat Universal Serial Bus (USB) harus dapat memberikan satu deskriptor perangkat yang berisi informasi yang relevan tentang perangkat. Windows menggunakan informasi tersebut untuk memperoleh berbagai set informasi. Misalnya, bidang idVendor dan idProduct masing-masing menentukan vendor dan pengidentifikasi produk. Windows menggunakan nilai bidang tersebut untuk membuat ID perangkat keras untuk perangkat. Untuk melihat ID perangkat keras perangkat tertentu, buka Manajer Perangkat dan lihat properti perangkat. Di tab Detail , nilai properti Id Perangkat Keras menunjukkan ID perangkat keras ("USB\XXX") yang dihasilkan oleh Windows. Bidang bcdUSB menunjukkan versi spesifikasi USB yang sesuai dengan perangkat. Misalnya, 0x0200 menunjukkan bahwa perangkat dirancang sesuai spesifikasi USB 2.0. Nilai bcdDevice menunjukkan nomor revisi yang ditentukan perangkat. Tumpukan driver USB menggunakan bcdDevice, bersama dengan idVendor dan idProduct, untuk menghasilkan perangkat keras dan ID yang kompatibel untuk perangkat. Anda dapat melihat pengidentifikasi tersebut di Manajer Perangkat. Deskriptor perangkat juga menunjukkan jumlah total konfigurasi yang didukung perangkat.

Host mendapatkan pendeskripsi perangkat melalui transfer kontrol. Microsoft menyediakan antarmuka pemrograman untuk mendapatkan deskriptor.

Jika Anda menulis ... Panggilan...
Aplikasi UWP yang menggunakan Windows.Devices.Usb UsbDevice.DeviceDescriptor
Aplikasi desktop Win32 yang menggunakan fungsi WinUSB WinUsb_GetDescriptor
Driver klien berbasis UMDF IWDFUsbTargetDevice::RetrieveDescriptor
Driver klien berbasis KMDF WdfUsbTargetDeviceGetDeviceDescriptor
Driver klien berbasis WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_DESCRIPTOR_REQUEST

Deskriptor konfigurasi USB

Konfigurasi USB berisi serangkaian antarmuka. Setiap antarmuka terdiri dari satu atau beberapa pengaturan alternatif, dan setiap pengaturan alternatif terdiri dari satu set titik akhir (lihat tata letak perangkat USB). Deskriptor konfigurasi menjelaskan seluruh konfigurasi termasuk antarmukanya, pengaturan alternatif, dan titik akhirnya. Masing-masing entitas tersebut juga dijelaskan dalam format deskriptor mereka. Deskriptor konfigurasi juga dapat menyertakan deskriptor kustom yang ditentukan oleh produsen perangkat.

Oleh karena itu, hanya bagian awal deskriptor konfigurasi yang diperbaiki, 9 byte. Sisanya bervariasi tergantung pada jumlah antarmuka dan pengaturan alternatifnya, dan titik akhir yang didukung oleh perangkat. Dalam kumpulan dokumentasi ini, 9 byte awal disebut sebagai pendeskripsi konfigurasi. Dua byte pertama deskriptor menunjukkan panjang total.

Tabel berikut menunjukkan pendeskripsi konfigurasi untuk perangkat webcam USB:

Bidang Nilai
wTotalLength 0x02CA
bNumInterfaces 0x02
bConfigurationValue 0x01
iConfiguration 0x00
bmAttributes 0x80 (bertenaga bus )
MaxPower 0xFA (500 mA)

Bidang bConfigurationValue menunjukkan angka untuk konfigurasi yang ditentukan dalam firmware perangkat. Konfigurasi USB juga menunjukkan karakteristik daya tertentu. bmAttributes berisi bitmask yang menunjukkan apakah konfigurasi mendukung fitur bangun jarak jauh, dan apakah perangkat didukung bus atau didukung sendiri. Bidang MaxPower menentukan daya maksimum (dalam unit miliamp) yang dapat diambil perangkat dari host, saat perangkat didukung bus. Deskriptor konfigurasi juga menunjukkan jumlah total antarmuka (bNumInterfaces) yang didukung perangkat.

Jika Anda menulis ... Panggilan...
Aplikasi UWP yang menggunakan Windows.Devices.Usb UsbDevice.ConfigurationDescriptor untuk mendapatkan bagian panjang tetap.
UsbConfiguration.Descriptors untuk mendapatkan seluruh set konfigurasi.
Aplikasi desktop Win32 yang menggunakan fungsi WinUSB WinUsb_GetDescriptor
Driver klien berbasis UMDF IWDFUsbTargetDevice::RetrieveDescriptor
Driver klien berbasis KMDF WdfUsbTargetDeviceRetrieveConfigDescriptor
Driver klien berbasis WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST

Deskriptor antarmuka USB

Deskriptor antarmuka berisi informasi tentang pengaturan alternatif antarmuka USB.

Tabel berikut menunjukkan pendeskripsi antarmuka untuk Pengaturan Alternatif 0 Antarmuka 0 untuk perangkat webcam:

Bidang Nilai
bInterfaceNumber 0x00
bAlternateSetting 0x00
bNumEndpoints 0x01
bInterfaceClass 0x0E
bInterfaceSubClass 0x02
bInterfaceProtocol 0x00
iInterface 0x02
0x0409 "Microsoft LifeCam VX-5000"
0x0409 "Microsoft LifeCam VX-5000"

Dalam contoh sebelumnya, perhatikan nilai bidang bInterfaceNumber dan bAlternateSetting . Bidang-bidang tersebut berisi nilai indeks yang digunakan host untuk mengaktifkan antarmuka dan salah satu pengaturan alternatifnya. Untuk aktivasi, aplikasi atau driver menentukan nilai indeks dalam panggilan fungsi. Berdasarkan informasi tersebut, tumpukan driver USB kemudian membangun permintaan kontrol standar (SET INTERFACE) dan mengirimkannya ke perangkat. Perhatikan bidang bInterfaceClass . Deskriptor antarmuka atau deskriptor untuk salah satu pengaturan alternatifnya menentukan kode kelas, subkelas, dan protokol. Nilai 0x0E menunjukkan bahwa antarmuka adalah untuk kelas perangkat video. Selain itu, perhatikan bidang iInterface . Nilai itu menunjukkan bahwa ada dua deskriptor string yang ditambahkan ke deskriptor antarmuka. Deskriptor string berisi deskripsi Unicode yang digunakan selama enumerasi perangkat untuk mengidentifikasi fungsionalitas.

Jika Anda menulis... Panggilan...
Aplikasi UWP yang menggunakan Windows.Devices.Usb UsbInterfaceSetting.Descriptors untuk mendapatkan deskriptor tertentu untuk pengaturan alternatif tertentu.
UsbInterface.Descriptors untuk mendapatkan deskriptor untuk semua pengaturan antarmuka.
Aplikasi desktop Win32 yang menggunakan fungsi WinUSB WinUsb_GetDescriptor
Driver klien berbasis UMDF IWDFUsbInterface::GetInterfaceDescriptor
Driver klien berbasis KMDF WdfUsbInterfaceGetDescriptor
Driver klien berbasis WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST lalu uraikan untuk setiap deskriptor antarmuka. Untuk informasi selengkapnya, lihat Cara memilih konfigurasi untuk perangkat USB.

Deskriptor titik akhir USB

Setiap titik akhir, dalam antarmuka, menjelaskan satu aliran input atau output untuk perangkat. Perangkat yang mendukung aliran untuk berbagai jenis fungsi memiliki beberapa antarmuka. Perangkat yang mendukung beberapa aliran yang berkaitan dengan fungsi dapat mendukung beberapa titik akhir pada satu antarmuka.

Semua jenis titik akhir (kecuali titik akhir default) harus menyediakan deskriptor titik akhir sehingga host bisa mendapatkan informasi tentang titik akhir. Deskriptor titik akhir menyertakan informasi, seperti alamat, jenis, arah, dan jumlah data yang dapat ditangani titik akhir. Transfer data ke titik akhir didasarkan pada informasi tersebut.

Tabel berikut ini memperlihatkan pendeskripsi titik akhir untuk perangkat webcam:

Bidang Nilai
bEndpointAddress 0x82 IN
bmAttributes 0x01
wMaxPacketSize 0x0080 (128)
bInterval 0x01

Bidang bEndpointAddress menentukan alamat titik akhir unik yang berisi nomor titik akhir (Bit 3..0) dan arah titik akhir (Bit 7). Dengan membaca nilai-nilai tersebut dalam contoh sebelumnya, kita dapat menentukan bahwa deskriptor menjelaskan titik akhir IN yang angka titik akhirnya adalah 2. Atribut bmAttributes menunjukkan bahwa jenis titik akhir bersifat isochronous. wMaxPacketSizefield menunjukkan jumlah maksimum byte yang dapat dikirim atau diterima titik akhir dalam satu transaksi. Bit 12..11 menunjukkan jumlah total transaksi yang dapat dikirim per mikroframe. bInterval menunjukkan seberapa sering titik akhir dapat mengirim atau menerima data.

Jika Anda menulis... Panggilan...
Aplikasi UWP yang menggunakan Windows.Devices.Usb UsbEndpointDescriptor
Aplikasi desktop Win32 yang menggunakan fungsi WinUSB WinUsb_GetDescriptor
Driver klien berbasis UMDF WDFUsbTargetPipe::GetInformation
Driver klien berbasis KMDF WdfUsbTargetPipeGetInformation
Driver klien berbasis WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST lalu uraikan untuk setiap deskriptor titik akhir. Untuk informasi selengkapnya, lihat Cara memilih konfigurasi untuk perangkat USB.