真正PCM2704と違う箇所には背景色をつけてある.
・Isochronous-out audio data-stream endpoint (EP2)
・HID endpoint (EP5)
要するに、volumeはEP0、PCMはEP2、HIDはEP5、 ということだ.
HIDはvolume/play/stopなどを含む.
真正PCM2704のエンドポイントの対応はこうなっているらしい.
・Control endpoint (EP0)・Isochronous-out audio data-stream endpoint (EP2)
・HID endpoint (EP5)
要するに、volumeはEP0、PCMはEP2、HIDはEP5、 ということだ.
HIDはvolume/play/stopなどを含む.
EZUSBでは、HIDはEP1に割り当てられている.(EP0,EP2は同じ)
なお、EZUSBはFULL SPEED/HIGH SPEED両対応ICであるから以下を採取したときはHIGH SPEED接続となっていることに留意されたい.
---------------------- Device Descriptor ----------------------
bLength : 0x12 (18 bytes)
bDescriptorType : 0x01 (Device Descriptor)
bcdUSB : 0x110 (USB Version 1.10)
bDeviceClass : 0x00 (defined by the interface descriptors)
bDeviceSubClass : 0x00
bDeviceProtocol : 0x00
bMaxPacketSize0 : 0x40 (64 bytes)
idVendor : 0x08BB
idProduct : 0x2704
bcdDevice : 0x0100
iManufacturer : 0x01 (String Descriptor 1)
Language 0x0409 : "Cypress"
iProduct : 0x02 (String Descriptor 2)
Language 0x0409 : "EZ-USB DCC"
iSerialNumber : 0x00 (No String Descriptor)
bNumConfigurations : 0x01 (1 Configuration)
デバイスdescriptorに意表を突くような差異はない.bMaxPacketSize0の違いはFIFOサイズに起因するものであろう.
------------------ Configuration Descriptor -------------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x02 (Configuration Descriptor)
wTotalLength : 0x0091 (145 bytes)
bNumInterfaces : 0x03 (3 Interfaces)
bConfigurationValue : 0x01 (Configuration 1)
iConfiguration : 0x00 (No String Descriptor)
bmAttributes : 0x80
D7: Reserved, set 1 : 0x01
D6: Self Powered : 0x00 (no)
D5: Remote Wakeup : 0x00 (no)
D4..0: Reserved, set 0 : 0x00
MaxPower : 0x32 (100 mA)
コンフィグdescriptorにも目立った差異はない.
Interface=3というのは、EP0/EP2/EP5を指していると思う.
control interfaceのdescriptorここから
--------------- Interface Descriptor -----------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x04 (Interface Descriptor)
bInterfaceNumber : 0x00
bAlternateSetting : 0x00
bNumEndpoints : 0x00 (Default Control Pipe only)
bInterfaceClass : 0x01 (Audio)
bInterfaceSubClass : 0x01 (Audio Control)
bInterfaceProtocol : 0x00
iInterface : 0x00 (No String Descriptor)
ここからがinterfaceの1つ目である.Audio control interfaceだと言っているので、EP0なんだろう.Default Control Pipe onlyがEP0を指しているのだと思う.
------ Audio Control Interface Header Descriptor ------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x01 (Header)
bcdADC : 0x0100
wTotalLength : 0x0028 (40 bytes)
bInCollection : 0x01
baInterfaceNr[1] : 0x01
------- Audio Control Input Terminal Descriptor -------
bLength : 0x0C (12 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x02 (Input Terminal)
bTerminalID : 0x01
wTerminalType : 0x0101 (USB streaming)
bAssocTerminal : 0x00
bNrChannels : 0x02 (2 channels)
wChannelConfig : 0x0003 (L, R)
iChannelNames : 0x00 (No String Descriptor)
iTerminal : 0x00 (No String Descriptor)
------- Audio Control Output Terminal Descriptor ------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x03 (Output Terminal)
bTerminalID : 0x02
wTerminalType : 0x0301 (Speaker)
bAssocTerminal : 0x00 (0)
bSourceID : 0x03 (3)
iTerminal : 0x00 (No String Descriptor)
-------- Audio Control Feature Unit Descriptor --------
bLength : 0x0A (10 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x06 (Feature Unit)
bUnitID : 0x03 (3)
bSourceID : 0x01 (1)
bControlSize : 0x01 (1 byte per control)
bmaControls[0] : 0x01
D0: Mute : 1
D1: Volume : 0
D2: Bass : 0
D3: Mid : 0
D4: Treble : 0
D5: Graphic Equalizer : 0
D6: Automatic Gain : 0
D7: Delay : 0
bmaControls[1] : 0x02
D0: Mute : 0
D1: Volume : 1
D2: Bass : 0
D3: Mid : 0
D4: Treble : 0
D5: Graphic Equalizer : 0
D6: Automatic Gain : 0
D7: Delay : 0
bmaControls[2] : 0x02
D0: Mute : 0
D1: Volume : 1
D2: Bass : 0
D3: Mid : 0
D4: Treble : 0
D5: Graphic Equalizer : 0
D6: Automatic Gain : 0
D7: Delay : 0
iFeature : 0x00 (No String Descriptor)
EZUSBでvolume controlなどはやらないからこのinterfaceは不要だけど、windowsのデバドラの都合に合わせるために温存しているんだろうな.
control interfaceのdescriptorここまで
PCM interfaceのdescriptorここから
---------------- Interface Descriptor -----------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x04 (Interface Descriptor)
bInterfaceNumber : 0x01
bAlternateSetting : 0x00
bNumEndpoints : 0x00 (Default Control Pipe only)
bInterfaceClass : 0x01 (Audio)
bInterfaceSubClass : 0x02 (Audio Streaming)
bInterfaceProtocol : 0x00
iInterface : 0x00 (No String Descriptor)
interfaceの2つ目(bInterfaceNumber=1)
以下にはAlternateSetting1 ステレオのみ存在し、AlternateSetting2 モノラルは存在しない.
ステレオここから
---------------- Interface Descriptor -----------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x04 (Interface Descriptor)
bInterfaceNumber : 0x01
bAlternateSetting : 0x01
bNumEndpoints : 0x01 (1 Endpoint)
bInterfaceClass : 0x01 (Audio)
bInterfaceSubClass : 0x02 (Audio Streaming)
bInterfaceProtocol : 0x00
iInterface : 0x00 (No String Descriptor)
interfaceの2つ目(bInterfaceNumber=1)のAlternate1 ステレオ
-------- Audio Streaming Interface Descriptor ---------
bLength : 0x07 (7 bytes)bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x01
bTerminalLink : 0x01
bDelay : 0x00
wFormatTag : 0x0001 (PCM)
------- Audio Streaming Format Type Descriptor --------
bLength : 0x17 (23 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x02 (Format Type)
bFormatType : 0x01 (FORMAT_TYPE_I)
bNrChannels : 0x02 (2 channels)
bSubframeSize : 0x02 (2 bytes per subframe)
bBitResolution : 0x20 (32 bits per sample)
bSamFreqType : 0x05 (supports 5 sample frequencies)
tSamFreq[1] : 0x07D00 (32000 Hz)
tSamFreq[2] : 0x0AC44 (44100 Hz)
tSamFreq[3] : 0x0BB80 (48000 Hz)
tSamFreq[4] : 0x17700 (96000 Hz)
tSamFreq[5] : 0x2EE00 (192000 Hz)
----------------- Endpoint Descriptor -----------------
bLength : 0x07 (7 bytes)
bDescriptorType : 0x05 (Endpoint Descriptor)
bEndpointAddress : 0x02 (Direction=OUT EndpointID=2)
bmAttributes : 0x09 (TransferType=Isochronous SyncType=Adaptive EndpointType=Data)
wMaxPacketSize : 0x00C0
Bits 15..13 : 0x00 (reserved, must be zero)
Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
Bits 10..0 : 0xC0 (192 bytes per packet)
bInterval : 0x04 (4 ms)
エンドポイント2に割り当てされている.
PCM2704はbLengthが9BYTEsとなっているのに対し、EZUSBのbLengthは7BYTEsなのでIC仕様の違いが現れている.bIntervalにも1msと4msの違いが見られ、これはIC搭載FIFOのサイズに起因するのだろう.
wMaxPacketSizeは両者とも192BYTEsであるが、EZUSBならこれを1024にすることも可能なはずだ.そうしないのはwindowsデバドラとの整合性のためかと思う.----------- Audio Data Endpoint Descriptor ------------
bLength : 0x07 (7 bytes)
bDescriptorType : 0x25 (Audio Endpoint Descriptor)
bDescriptorSubtype : 0x01 (General)
bmAttributes : 0x00
bLockDelayUnits : 0x02
wLockDelay : 0x0200
ステレオここまで
モノラルここから
AlternateSetting2は割愛されている.
モノラルここまで
PCM interfaceのdescriptorここまで
HID interfaceのdescriptorここから
---------------- Interface Descriptor -----------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x04 (Interface Descriptor)
bInterfaceNumber : 0x02
bAlternateSetting : 0x00
bNumEndpoints : 0x01 (1 Endpoint)
bInterfaceClass : 0x03 (HID - Human Interface Device)
bInterfaceSubClass : 0x00 (None)
bInterfaceProtocol : 0x00 (None)
iInterface : 0x00 (No String Descriptor)
interfaceの3つ目(bInterfaceNumber=2)
bLength : 0x09 (9 bytes)
bDescriptorType : 0x21 (HID Descriptor)
bcdHID : 0x0100 (HID Version 1.00)
bCountryCode : 0x00 (00 = not localized)
bNumDescriptors : 0x01
Descriptor 1:
bDescriptorType : 0x22 (Class=Report)
wDescriptorLength : 0x0024 (36 bytes)
Error reading descriptor : ERROR_GEN_FAILURE
HID report descriptorを正常に読めていない.
EZUSBでvolumeだのplay/stopだのを使う気は無いのでHIDがどうなろうとも知ったこっちゃ無いので放置しとく.
bLength : 0x07 (7 bytes)
bDescriptorType : 0x05 (Endpoint Descriptor)
bEndpointAddress : 0x81 (Direction=IN EndpointID=1)
bmAttributes : 0x03 (TransferType=Interrupt)
wMaxPacketSize : 0x0001
Bits 15..13 : 0x00 (reserved, must be zero)
Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
Bits 10..0 : 0x01 (1 byte per packet)
bInterval : 0x0A (10 ms)
エンドポイント1番に割り当てている.
HID interfaceのdescriptorここまで----------------- Device Qualifier Descriptor -----------------
bLength : 0x0A (10 bytes)
bDescriptorType : 0x06 (Device_qualifier Descriptor)
bcdUSB : 0x200 (USB Version 2.00)
bDeviceClass : 0xFF (Vendor Specific)
bDeviceSubClass : 0xFF
bDeviceProtocol : 0xFF
bMaxPacketSize0 : 0x40 (64 Bytes)
bNumConfigurations : 0x01 (1 other-speed configuration)
bReserved : 0x00
あらまこんな場所にQualifierがいる.
これはHIGH SPEED接続専用のdescriptorなのでEZUSBにしか登場しないのは当然である.
-------------------- String Descriptors -------------------
------ String Descriptor 0 ------
bLength : 0x04 (4 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language ID[0] : 0x0409 (English - United States)
------ String Descriptor 1 ------
bLength : 0x10 (16 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language 0x0409 : "Cypress"
------ String Descriptor 2 ------
bLength : 0x16 (22 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language 0x0409 : "EZ-USB DCC"