擬態PCM2704(EZUSB)と違う箇所には背景色をつけてある.
・Isochronous-out audio data-stream endpoint (EP2)
・HID endpoint (EP5)
要するに、volumeはEP0、PCMはEP2、HIDはEP5、 ということだ.
HIDはvolume/play/stopなどを含む.
真正PCM2704のエンドポイントの対応は、datasheetによるとこうなっているらしい.
・Control endpoint (EP0)・Isochronous-out audio data-stream endpoint (EP2)
・HID endpoint (EP5)
要するに、volumeはEP0、PCMはEP2、HIDはEP5、 ということだ.
HIDはvolume/play/stopなどを含む.
なお、PCM2704はFULL SPEEDのみ対応ICであるから以下を採取したときはFULL 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 : 0x08 (8 bytes)
idVendor : 0x08BB
idProduct : 0x2704
bcdDevice : 0x0100
iManufacturer : 0x01 (String Descriptor 1)
Language 0x0409 : "Burr-Brown from TI"
iProduct : 0x02 (String Descriptor 2)
Language 0x0409 : "USB Audio DAC"
iSerialNumber : 0x00 (No String Descriptor)
bNumConfigurations : 0x01 (1 Configuration)
目立つ差異はない.bMaxPacketSize0の違いはFIFOサイズに起因するものであろう.
------------------ Configuration Descriptor -------------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x02 (Configuration Descriptor)
wTotalLength : 0x00BE (190 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 : 0xFA (500 mA)
目立った差異はない.
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)
PCM2704はmute/volumeを制御できるんだろうなとわかる.グライコは無いんだなとわかる.
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)
以下では、AlternateSettingの1と2によってステレオとモノラルの2つが定義されている.
ステレオここから
---------------- 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 ステレオ
bLength : 0x07 (7 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x01
bTerminalLink : 0x01
bDelay : 0x00
wFormatTag : 0x0001 (PCM)
------- Audio Streaming Format Type Descriptor --------
bLength : 0x11 (17 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 : 0x10 (16 bits per sample)
bSamFreqType : 0x03 (supports 3 sample frequencies)
tSamFreq[1] : 0x07D00 (32000 Hz)
tSamFreq[2] : 0x0AC44 (44100 Hz)
tSamFreq[3] : 0x0BB80 (48000 Hz)
----------------- Endpoint Descriptor -----------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x05 (Endpoint Descriptor)
bEndpointAddress : 0x02 (Direction=OUT EndpointID=2)
bmAttributes : 0x09 (TransferType=Isochronous SyncType=Adaptive EndpointType=Data)
wMaxPacketSize : 0x00C0 (192 bytes)
bInterval : 0x01 (1 ms)
bRefresh : 0x00
bSynchAddress : 0x00
エンドポイント2に割り当てされている.
----------- Audio Data Endpoint Descriptor ------------
bLength : 0x07 (7 bytes)
bDescriptorType : 0x25 (Audio Endpoint Descriptor)
bDescriptorSubtype : 0x01 (General)
bmAttributes : 0x00
bLockDelayUnits : 0x02
wLockDelay : 0x0200
ステレオここまで
モノラルここから
---------------- Interface Descriptor -----------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x04 (Interface Descriptor)
bInterfaceNumber : 0x01
bAlternateSetting : 0x02
bNumEndpoints : 0x01 (1 Endpoint)
bInterfaceClass : 0x01 (Audio)
bInterfaceSubClass : 0x02 (Audio Streaming)
bInterfaceProtocol : 0x00
iInterface : 0x00 (No String Descriptor)
interfaceの2つ目(bInterfaceNumber=1)のAlternate2 モノラル
bLength : 0x07 (7 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x01
bTerminalLink : 0x01
bDelay : 0x00
wFormatTag : 0x0001 (PCM)
------- Audio Streaming Format Type Descriptor --------
bLength : 0x11 (17 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x02 (Format Type)
bFormatType : 0x01 (FORMAT_TYPE_I)
bNrChannels : 0x01 (1 channel)
bSubframeSize : 0x02 (2 bytes per subframe)
bBitResolution : 0x10 (16 bits per sample)
bSamFreqType : 0x03 (supports 3 sample frequencies)
tSamFreq[1] : 0x07D00 (32000 Hz)
tSamFreq[2] : 0x0AC44 (44100 Hz)
tSamFreq[3] : 0x0BB80 (48000 Hz)
----------------- Endpoint Descriptor -----------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x05 (Endpoint Descriptor)
bEndpointAddress : 0x02 (Direction=OUT EndpointID=2)
bmAttributes : 0x09 (TransferType=Isochronous SyncType=Adaptive EndpointType=Data)
wMaxPacketSize : 0x0060 (96 bytes)
bInterval : 0x01 (1 ms)
bRefresh : 0x00
bSynchAddress : 0x00
----------- Audio Data Endpoint Descriptor ------------
bLength : 0x07 (7 bytes)
bDescriptorType : 0x25 (Audio Endpoint Descriptor)
bDescriptorSubtype : 0x01 (General)
bmAttributes : 0x00
bLockDelayUnits : 0x02
wLockDelay : 0x0200
モノラルここまで
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)
09 02 Usage (0x02)
BE 00 03 unk
01 00 unk
80 Input ()
FA 09 04 unk
00 unk
00 unk
00 unk
01 01 unk
00 unk
00 unk
09 24 Usage (0x24)
01 00 unk
01 28 unk
00 unk
01 01 unk
0C unk
24 Logical Maximum (0)
02 01 01 unk
01 00 unk
02 03 unk
この謎のバイナリがHID report descriptorである.意味解析は出来てない.
----------------- Endpoint Descriptor -----------------
bLength : 0x07 (7 bytes)
bDescriptorType : 0x05 (Endpoint Descriptor)
bEndpointAddress : 0x85 (Direction=IN EndpointID=5)
bmAttributes : 0x03 (TransferType=Interrupt)
wMaxPacketSize : 0x0001 (1 byte)
bInterval : 0x0A (10 ms)
エンドポイント5番に割り当てている.
HID interfaceのdescriptorここまで
-------------------- String Descriptors -------------------
------ String Descriptor 0 ------
bLength : 0x04 (4 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language ID[0] : 0x0409 (English - United States)
------ String Descriptor 1 ------
bLength : 0x42 (66 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language 0x0409 : "Burr-Brown from TI "
------ String Descriptor 2 ------
bLength : 0x22 (34 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language 0x0409 : "USB Audio DAC "
----- String Descriptor 0xEE -----
bLength : 0x22 (34 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language 0x0409 : "USB Audio DAC "