USB 転送サイズとパケット サイズ

ここでは、Windows オペレーティング システムの各バージョンにおける USB 転送サイズについて説明します。

最大転送サイズ

最大転送サイズは、USB ドライバー スタックでハードコードされた制限を示します。 転送サイズがこれらの制限より小さくても、システム リソースの制限によって失敗する可能性があります。 こうした失敗を防ぐと共に、すべてのバージョンの Windows における互換性を確保するため、USB 転送では大きな転送サイズを使わないでください。

  

Windows XP と Windows Server 2003 以降のバージョンでは、USBD_PIPE_INFORMATION 構造体の MaximumTransferSize メンバーは廃止されています。USB ドライバー スタックは、複合デバイスと非複合デバイスのどちらの場合でも、MaximumTransferSize の値を無視します。

Windows 2000 では、USB ドライバー スタックは MaximumTransferSize を USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE に初期化します。クライアント ドライバーは、デバイスの構成時に小さい値を設定できます。複合デバイスの場合、各関数のクライアント ドライバーは、インターフェイス設定が既定値ではないパイプの MaximumTransferSize のみ変更できます。

USB 転送サイズには次の制限があります。

転送パイプWindows 8.1、Windows 8Windows 7、Windows VistaWindows XP、Windows Server 2003Windows 2000
制御

SuperSpeed と high speed (xHCI) では 64K

Full-Speed と Low-Speed (xHCI、EHCI、UHCI、OHCI) では 4K

UHCI の場合、既定のエンドポイントで 4K、既定ではない制御パイプで 64K

High-Speed (EHCI) では 64K

Full-Speed と Low-Speed (EHCI、UHCI、OHCI) では 4K

UHCI の場合、既定のエンドポイントで 4K、既定ではない制御パイプ (UHCI) で 64K

High-Speed (EHCI) では 64K

Full-Speed と Low-Speed (EHCI、UHCI、OHCI) では 4K

UHCI の場合、既定のエンドポイントで 4K、既定ではない制御パイプ (UHCI) で 64K

既定のエンドポイントで 4K、既定ではない制御パイプ (OHCI) で 64K

割り込み

SuperSpeed、High-Speed、Full-Speed、Low-Speed (xHCI、EHCI、UHCI、OHCI) では 4MB

High-Speed、Full-Speed、Low-Speed (EHCI、UHCI、OHCI) では 4MB

無制限

未定義 (OHCI)

バルク

SuperSpeed (xHCI) では 32MB

High-Speed と Full-Speed (xHCI) では 4MB

High-Speed と Full-Speed (EHCI と UHCI) では 4MB

Full-Speed (OHCI) では 256K

High-Speed と Full-Speed (EHCI、UHCI) では 4MB

Full-Speed (OHCI) では 256K

High-Speed と Full-Speed (EHCI) では 3MB

未定義 (UHCI)

Full-Speed (OHCI) では 256K

未定義 (OHCI)

アイソクロナス

SuperSpeed (xHCI) では 1024*wBytesPerInterval (USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR を参照)

High-Speed (xHCI、EHCI) では 1024* MaximumPacketSize

Full-Speed (xHCI、EHCI) では 256 * MaximumPacketSize

Full-Speed (UHCI、OHCI) では 64K

High-Speed (EHCI) では 1024* MaximumPacketSize

Full-Speed (EHCI) では 256 * MaximumPacketSize

Full-Speed (UHCI、OHCI) では 64K

High-Speed (EHCI) では 1024* MaximumPacketSize

Full-Speed (EHCI) では 256 * MaximumPacketSize

Full-Speed (UHCI、OHCI) では 64K

Full-Speed (OHCI) では 64K

 

MaximumTransferSize で転送サイズを制限しても、デバイスが使う帯域幅に直接的な影響はありません。クライアント ドライバーは、インターフェイス設定を変更するか、USBD_PIPE_INFORMATIONMaximumPacketSize メンバーで設定される最大パケット サイズを制限する必要があります。

最大パケット サイズ

最大パケット サイズは、エンドポイント記述子の wMaxPacketSize フィールドで定義されます。クライアント ドライバーは、デバイスへの select-interface 要求で USB パケット サイズを制御できます。この値を変更しても、デバイスの wMaxPacketSize は変更されません。

URB では、要求はパイプの USBD_PIPE_INFORMATION 構造体です。この構造体で、次の作業を行います。

  • USBD_PIPE_INFORMATION 構造体の MaximumPacketSize メンバーを変更します。 このメンバーを、現在のインターフェイス設定のデバイス ファームウェアで定義された wMaxPacketSize の値以下に設定します。
  • PipeFlags メンバーの USBD_PIPE_INFORMATION 構造体で USBD_PF_CHANGE_MAX_PACKET フラグを設定します。

インターフェイス設定の選択方法について詳しくは、「USB デバイスの構成を選択する方法」をご覧ください。

読み取り転送バッファーの最大パケット サイズ制限

クライアント ドライバーが読み取り要求を行うとき、転送バッファーは最大パケット サイズの倍数である必要があります。 パケットに必要なデータが最大パケット サイズ未満であっても、パケット全体を要求する必要があります。 デバイスが最大サイズ未満のパケット (短いパケット) を送信すると、転送が完了したという意味になります。

  

以前のコントローラーでは、クライアント ドライバーがこの動作を無効にできます。データ転送 URBTransferFlags メンバーでは、クライアント ドライバーが USBD_SHORT_TRANSFER_OK フラグを設定する必要があります。このフラグは、wMaxPacketSize 未満のパケットの送信をデバイスに許可します。

xHCI ホスト コントローラーでは、バルク エンドポイントと割り込みエンドポイントの USBD_SHORT_TRANSFER_OK が無視されます。EHCI コントローラーで短いパケットを転送しても、エラー状態にはなりません。

EHCI ホスト コントローラーでは、バルク エンドポイントと割り込みエンドポイントの USBD_SHORT_TRANSFER_OK が無視されます。

UHCI ホスト コントローラーと OHCI ホスト コントローラーでは、バルク転送と割り込み転送に USBD_SHORT_TRANSFER_OK が設定されていない場合、短いパケットを転送するとエンドポイントが停止し、転送のエラー コードが返されます。

書き込み転送を短いパケットを区切る

デバイスへの書き込み時にパケット サイズに対して USB ドライバー スタック ドライバーが課している制限は、デバイスからの読み取り時と同じではありません。一部のクライアント ドライバーは、少ない量の制御データを頻繁に送ってデバイスを管理する必要があります。このような場合では、データ転送を同じサイズのパケットのみに制限するのは非現実的です。そのため、ドライバー スタックは、データ書き込み時に、エンドポイントの最大サイズよりも小さなパケットに対して特別な取り扱いをしません。これにより、クライアント ドライバーはデバイスへの大規模な転送を上限以下のサイズの複数の URB に分割できます。

ドライバーは、最大サイズを下回るパケットを使って転送を終了するか、長さ 0 のパケットを使って転送の最後を区切る必要があります。ドライバーが wMaxPacketSize より小さいパケットを送るまで転送は完了しません。転送サイズがちょうど最大サイズの倍数の場合、ドライバーは、転送を明示的に終了するために、長さ 0 の区切りパケットを送る必要があります。

USB 仕様によって必要とされるとおり、長さ 0 のパケットでデータ転送を区切ることはクライアント ドライバーの役割です。USB ドライバー スタックでこれらのパケットが自動生成されることはありません。

 

 

表示:
© 2015 Microsoft