ガレスタさんのDIY日記

電子回路、Web、組み込み、自作エフェクターを語るblog

自分用メモ コンフィグレーションディスクリプタ

前回CDCやったのでそれの補足

ディスクリプタは以下のような構成になっている。

┏デバイスディスクリプタ
 ┝コンフィグレーションディスクリプタ
  ┝インターフェイスディスクリプタ
   ┝エンドポイントディスクリプタ

バイスディスクリプタについては前回やったので今回はSTM32のCDCの中のコンフィグとインターフェイス及びエンドポイントを見ていく

コンフィグレーションディスクリプタ

STのsampleの例ではusbd_cdc.cUSBD_CDC_CfgHSDesc冒頭9byteがそれにあたる。

__ALIGN_BEGIN uint8_t USBD_CDC_CfgHSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END =
{
  /*Configuration Descriptor*/
  0x09,   /* bLength: Configuration Descriptor size */
  USB_DESC_TYPE_CONFIGURATION,      /* bDescriptorType: Configuration 0x02 */
  USB_CDC_CONFIG_DESC_SIZ,                /* wTotalLength:no of returned bytes */
  0x00,
  0x02,   /* bNumInterfaces: 2 interface */
  0x01,   /* bConfigurationValue: Configuration value */
  0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
  0xC0,   /* bmAttributes: self powered */
  0x32,   /* MaxPower 0 mA */
 以下続く
Field Offset Size 詳細
bLength 0 1 Descriptor の全体長。
bDescriptorType 1 1 Descriptor Types
wTotalLength 2 2 当該、および従属ディスクリプタの全長
bNumInterface 4 1 インターフェイスディスクリプタの個数。
bConfigurationValue 5 1 Configuration 番号。SET_CONFIGURATION時のID。
iConfiguration 6 1 Configuration のストリングディスクリプタ の Index 番号。0の場合、指定無し
bmAttributes 7 1 bit 7:予約(1)。
bit 6:Self Power(0/1)
bit 5:Remote Wakeup機能(0/1)。
bit 4-0:予約(0)。
bMaxPower 8 1 必要とするバスからの電流の1/2(mA)。

bLengthは9byte固定
bDescriptorTypeはCONFIGなので0x02
wTotalLengthは2byte分あるのでUSB_CDC_CONFIG_DESC_SIZ,0x00になっている。USB_CDC_CONFIG_DESC_SIZは本プログラムの例では67となっているが自身で作る場合はこの後続くディスクリプタを含めた大きさを書く。

参考文献

http://sdphca.ucsd.edu/lab_equip_manuals/usb_20.pdf