共用方式為


標準USB描述元

USB 裝置會在稱為 USB 描述元的數據結構中提供本身的相關信息。 本節提供裝置、設定、介面和端點描述元的相關信息,以及從USB裝置擷取它們的方式。

對應至裝置配置的 USB 描述元

主機軟體會透過將各種標準控制要求傳送至預設端點, (取得描述元要求,以從連結裝置取得描述項,請參閱 USB 規格第 9.4.3 節) 。 這些要求會指定要擷取的描述符類型。 為了回應這類要求,裝置會傳送描述項,其中包含裝置的相關信息、其設定、介面和相關端點。 裝置描述項 包含整個裝置的相關信息。 組態描述項 包含每個裝置設定的相關信息。 字串描述元 包含 Unicode 文字字串。

每個USB裝置都會公開裝置描述項,指出裝置的類別資訊、廠商和產品標識元,以及組態數目。 每個組態都會公開其組態描述元,指出介面數目和電源特性。 每個介面都會針對每個介面的替代設定公開介面描述元,其中包含類別和端點數目的相關信息。 每個介面內的每個端點都會公開端點描述元,指出端點類型和封包大小上限。

例如,讓我們考慮 OSR FX2 面板裝置配置 (請參閱 USB 裝置配置) 。 在裝置層級,裝置會公開裝置描述項和預設端點的端點描述元。 在組態層級,裝置會公開 Configuration 0 的組態描述元。 在介面層級,它會公開替代設定0的一個介面描述元。 在端點層級,它會公開三個端點描述元。

USB 裝置描述元配置的類別圖表。

USB 裝置描述元

每個通用序列總線 (USB) 裝置都必須能夠提供包含裝置相關信息的單一裝置描述元。 Windows 會使用該資訊來衍生各種資訊集。 例如, idVendoridProduct 字段分別指定廠商和產品識別碼。 Windows 會使用這些域值來建構裝置的硬體標識碼。 若要檢視特定裝置的硬體標識碼,請開啟 裝置管理員 並檢視裝置屬性。 在 [ 詳細數據 ] 索引標籤中, [硬體 標識符] 屬性值會指出 Windows 產生的硬體標識碼 (“USB\XXX”) 。 bcdUSB 欄位指出裝置符合的 USB 規格版本。 例如,0x0200表示裝置是根據USB 2.0規格所設計。 bcdDevice 值表示裝置定義的修訂編號。 USB 驅動程式堆疊會使用 bcdDevice 以及 idVendoridProduct 來產生裝置的硬體和相容標識碼。 您可以在 裝置管理員 中檢視這些識別碼。 裝置描述項也會指出裝置支援的組態總數。

主機會透過控制傳輸取得裝置描述項。 Microsoft 提供程式設計介面來取得描述元。

如果您要撰寫... 叫。。。
使用 Windows.Devices.Usb 的 UWP 應用程式 UsbDevice.DeviceDescriptor
使用 WinUSB 函式的 Win32 傳統型應用程式 WinUsb_GetDescriptor
UMDF 型用戶端驅動程式 IWDFUsbTargetDevice::RetrieveDescriptor
KMDF 型用戶端驅動程式 WdfUsbTargetDeviceGetDeviceDescriptor
WDM 型用戶端驅動程式 UsbBuildGetDescriptorRequest
_URB_CONTROL_DESCRIPTOR_REQUEST

USB 組態描述元

USB 組態包含一系列介面。 每個介面都包含一或多個替代設定,而每個替代設定是由一組端點所組成, (請參閱 USB 裝置配置) 。 組態描述項描述整個組態包括其介面、替代設定及其端點。 每個實體也會以其描述項格式加以描述。 組態描述元也可以包含裝置製造商所定義的自定義描述元。

因此,只有組態描述元的初始部分是固定的,9 個字節。 其餘部分取決於介面數目及其替代設定,以及裝置支援的端點。 在此檔集中,初始 9 個字節稱為組態描述元。 描述元的前兩個字節表示總長度。

下表顯示 USB 網路攝影機裝置的組態描述元:

欄位
wTotalLength 0x02CA
bNumInterfaces 0x02
bConfigurationValue 0x01
iConfiguration 0x00
bmAttributes 0x80 (总线 )
MaxPower 0xFA (500 mA)

bConfigurationValue 字段會指出裝置韌體中定義的組態數目。 USB 組態也會指出特定電源特性。 bmAttributes 包含位掩碼,指出組態是否支援遠端喚醒功能,以及裝置是否為總線電源或自我電源。 MaxPower 欄位會指定裝置在總線電源時,裝置可從主機繪製的最大電源 () 。 組態描述元也會指出裝置支援 (bNumInterfaces) 介面總數。

如果您要撰寫... 叫。。。
使用 Windows.Devices.Usb 的 UWP 應用程式 UsbDevice.ConfigurationDescriptor 可取得固定長度部分。
UsbConfiguration.Descriptors 可取得整個組態集。
使用 WinUSB 函式的 Win32 傳統型應用程式 WinUsb_GetDescriptor
UMDF 型用戶端驅動程式 IWDFUsbTargetDevice::RetrieveDescriptor
KMDF 型用戶端驅動程式 WdfUsbTargetDeviceRetrieveConfigDescriptor
WDM 型用戶端驅動程式 UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST

USB 介面描述元

介面描述元包含 USB 介面的替代設定相關信息。

下表顯示網路攝影機裝置之替代設定 0 的介面描述元:

欄位
bInterfaceNumber 0x00
bAlternateSetting 0x00
bNumEndpoints 0x01
bInterfaceClass 0x0E
bInterfaceSubClass 0x02
bInterfaceProtocol 0x00
iInterface 0x02
0x0409 “Microsoft LifeCam VX-5000”
0x0409 “Microsoft LifeCam VX-5000”

在上述範例中,請注意 bInterfaceNumberbAlternateSetting 域值。 這些欄位包含主機用來啟動介面及其其中一個替代設定的索引值。 針對啟用,應用程式或驅動程式會在函數調用中指定索引值。 根據該資訊,USB 驅動程式堆疊接著會建置標準控制要求 (SET INTERFACE) ,並將其傳送至裝置。 請注意 bInterfaceClass 欄位。 任何替代設定的介面描述元或描述項會指定類別程式代碼、子類別和通訊協定。 0x0E的值表示介面適用於視訊裝置類別。 此外,請注意 iInterface 欄位。 該值表示有兩個字串描述元附加至介面描述元。 字串描述項包含 Unicode 描述,這些描述會在裝置列舉期間用來識別功能。

如果您要撰寫... 叫。。。
使用 Windows.Devices.Usb 的 UWP 應用程式 UsbInterfaceSetting.Descriptors 可取得特定替代設定的特定描述元。
UsbInterface.Descriptors 可取得介面所有設定的描述項。
使用 WinUSB 函式的 Win32 傳統型應用程式 WinUsb_GetDescriptor
UMDF 型用戶端驅動程式 IWDFUsbInterface::GetInterfaceDescriptor
KMDF 型用戶端驅動程式 WdfUsbInterfaceGetDescriptor
以 WDM 為基礎的用戶端驅動程式 UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST ,然後剖析每個介面描述元。 如需詳細資訊,請參閱 如何選取USB裝置的設定。

USB 端點描述元

介面中的每個端點都會描述裝置的單一輸入或輸出數據流。 支援不同函式數據流的裝置有多個介面。 支持數個與函式相關數據流的裝置,可以在單一介面上支援多個端點。

除了預設端點) 以外,所有端點類型 (都必須提供端點描述項,讓主機可以取得端點的相關信息。 端點描述項包含資訊,例如其位址、類型、方向,以及端點可處理的數據量。 傳送至端點的數據是以該資訊為基礎。

下表顯示網路攝影機裝置的端點描述項:

欄位
bEndpointAddress 0x82 IN
bmAttributes 0x01
wMaxPacketSize 0x0080 (128)
bInterval 0x01

bEndpointAddress 字段會指定唯一的端點位址,其中包含端點號碼 (Bits 3..0) ,以及端點方向 (位 7) 。 藉由讀取上述範例中的這些值,我們可以判斷描述元描述其端點編號為 2 的 IN 端點。 bmAttributes 屬性表示端點類型為等時。 wMaxPacketSizefield 指出端點可以在單一交易中傳送或接收的最大位元組數目。 位12..11表示每個微框架可傳送的交易總數。 bInterval 指出端點可以傳送或接收數據的頻率。

如果您要撰寫... 叫。。。
使用 Windows.Devices.Usb 的 UWP 應用程式 UsbEndpointDescriptor
使用 WinUSB 函式的 Win32 傳統型應用程式 WinUsb_GetDescriptor
UMDF 型用戶端驅動程式 WDFUsbTargetPipe::GetInformation
KMDF 型用戶端驅動程式 WdfUsbTargetPipeGetInformation
以 WDM 為基礎的用戶端驅動程式 UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST ,然後剖析每個端點描述元。 如需詳細資訊,請參閱 如何選取USB裝置的設定。