Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 7811

USBコンフィギュレーションディスクリプタの仕組みと設定例 - yoko's memo

$
0
0

USBデバイスは、さまざまな機能や動作モードを持つことができ、その設定情報は「コンフィギュレーションディスクリプタ」として提供されます。このディスクリプタは、USBデバイスの動作をホストに知らせるために重要な役割を果たします。ここでは、USBコンフィギュレーションディスクリプタの基本構造と設定例について詳しく解説します。

 

moun45.hatenablog.com

 

1. コンフィギュレーションディスクリプタとは?

USBコンフィギュレーションディスクリプタは、USBデバイスがどのように機能するかを定義する情報を提供します。これには、消費電力、インターフェースの数、各インターフェースの詳細などが含まれます。ホストはこの情報を元に、適切な設定を行い、デバイスを使用します。

2. コンフィギュレーションディスクリプタの基本構造

USBコンフィギュレーションディスクリプタは、以下のフィールドで構成されています:

  • bLength
  • bDescriptorType
  • wTotalLength
  • bNumInterfaces
  • bConfigurationValue
  • iConfiguration
  • bmAttributes
  • bMaxPower

3. 各フィールドの詳細と設定方法

a. bLength

uint8_tbLength=9;

b. bDescriptorType

uint8_tbDescriptorType=0x02;

c. wTotalLength

uint16_twTotalLength=sizeof(configuration_descriptor) +sizeof(interface_descriptor) +sizeof(endpoint_descriptor);

d. bNumInterfaces

uint8_tbNumInterfaces=1; // 例:1つのインターフェース

e. bConfigurationValue

uint8_tbConfigurationValue=1; // 例:コンフィギュレーション1

f. iConfiguration

uint8_tiConfiguration=0; // 例:インデックス0(文字列なし)

g. bmAttributes

  • 意味: コンフィギュレーションの属性(バスパワード、セルフパワード、リモートウェイクアップなど)
  • 設定方法: 属性をビットマスクで設定
uint8_tbmAttributes=0x80; // 例:バスパワードのみ(ビット7が常に1)
  • ビット7: 常に1(予約)
  • ビット6: セルフパワード(1)/バスパワード(0)
  • ビット5: リモートウェイクアップ(1で有効)
uint8_tbmAttributes=0xC0; // 例:セルフパワード、リモートウェイクアップ有効

h. bMaxPower

  • 意味: デバイスが要求する最大電力(2mA単位)
  • 設定方法: デバイスの消費電力を設定
uint8_t bMaxPower = 50; // 例:100mA(2mA単位で50)

4. コンフィギュレーションディスクリプタの設定例

以下に、典型的なUSBコンフィギュレーションディスクリプタの設定例を示します。

struct configuration_descriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t wTotalLength;
uint8_t bNumInterfaces;
uint8_t bConfigurationValue;
uint8_t iConfiguration;
uint8_t bmAttributes;
uint8_t bMaxPower;
};

struct configuration_descriptor config_desc = {
.bLength = 9,
.bDescriptorType = 0x02,
.wTotalLength = sizeof(config_desc) + sizeof(interface_desc) + sizeof(endpoint_desc),
.bNumInterfaces = 1,
.bConfigurationValue = 1,
.iConfiguration = 0,
.bmAttributes = 0xC0, // セルフパワード、リモートウェイクアップ有効
.bMaxPower = 50 // 100mA
};

まとめ

USBコンフィギュレーションディスクリプタは、USBデバイスがどのように機能するかをホストに伝えるために重要な役割を果たします。各フィールドを正確に設定することで、デバイスが正しく認識され、適切に動作することが保証されます。このガイドを参考にして、USBコンフィギュレーションディスクリプタを正しく設定し、デバイスの性能を最大限に引き出しましょう。

 


Viewing all articles
Browse latest Browse all 7811

Trending Articles