標準USB描述元
USB 裝置會在稱為 USB 描述元的數據結構中提供本身的相關信息。 本節提供裝置、設定、介面和端點描述元的相關信息,以及從USB裝置擷取它們的方式。
對應至裝置配置的 USB 描述元
主機軟體會透過將各種標準控制要求傳送至預設端點, (取得描述元要求,以從連結裝置取得描述項,請參閱 USB 規格第 9.4.3 節) 。 這些要求會指定要擷取的描述符類型。 為了回應這類要求,裝置會傳送描述項,其中包含裝置的相關信息、其設定、介面和相關端點。 裝置描述項 包含整個裝置的相關信息。 組態描述項 包含每個裝置設定的相關信息。 字串描述元 包含 Unicode 文字字串。
每個USB裝置都會公開裝置描述項,指出裝置的類別資訊、廠商和產品標識元,以及組態數目。 每個組態都會公開其組態描述元,指出介面數目和電源特性。 每個介面都會針對每個介面的替代設定公開介面描述元,其中包含類別和端點數目的相關信息。 每個介面內的每個端點都會公開端點描述元,指出端點類型和封包大小上限。
例如,讓我們考慮 OSR FX2 面板裝置配置 (請參閱 USB 裝置配置) 。 在裝置層級,裝置會公開裝置描述項和預設端點的端點描述元。 在組態層級,裝置會公開 Configuration 0 的組態描述元。 在介面層級,它會公開替代設定0的一個介面描述元。 在端點層級,它會公開三個端點描述元。
USB 裝置描述元
每個通用序列總線 (USB) 裝置都必須能夠提供包含裝置相關信息的單一裝置描述元。 Windows 會使用該資訊來衍生各種資訊集。 例如, idVendor 和 idProduct 字段分別指定廠商和產品識別碼。 Windows 會使用這些域值來建構裝置的硬體標識碼。 若要檢視特定裝置的硬體標識碼,請開啟 裝置管理員 並檢視裝置屬性。 在 [ 詳細數據 ] 索引標籤中, [硬體 標識符] 屬性值會指出 Windows 產生的硬體標識碼 (“USB\XXX”) 。 bcdUSB 欄位指出裝置符合的 USB 規格版本。 例如,0x0200表示裝置是根據USB 2.0規格所設計。 bcdDevice 值表示裝置定義的修訂編號。 USB 驅動程式堆疊會使用 bcdDevice 以及 idVendor 和 idProduct 來產生裝置的硬體和相容標識碼。 您可以在 裝置管理員 中檢視這些識別碼。 裝置描述項也會指出裝置支援的組態總數。
主機會透過控制傳輸取得裝置描述項。 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” |
在上述範例中,請注意 bInterfaceNumber 和 bAlternateSetting 域值。 這些欄位包含主機用來啟動介面及其其中一個替代設定的索引值。 針對啟用,應用程式或驅動程式會在函數調用中指定索引值。 根據該資訊,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裝置的設定。 |