svyr
Headphoneus Supremus
- Joined
- Jun 8, 2009
- Posts
- 3,430
- Likes
- 485
Here's a quick way to verify whether your USB soundcard supports asynchronous transfer mode (or the claim was false advertising or a confused reviewer or confused audiophile reading the review...*cough-160D-cough*)
Source is a microsoft usb audio related doc referring to USB implementation related things you can't generally view without 3rd party tools: http://download.microsoft.com/download/5/7/7/577a5684-8a83-43ae-9272-ff260a9c20e2/USB_Audio_and_Windows.doc
According to the doc - audio devices supporting asynchronous transfer mode should have an extra 'endpoint descriptor' with
'bmAttributes' = 0x5 (USB_ENDPOINT_TYPE_ASYNCHRONOUS)
(the program you use to view the descriptors may use a different symbolic constant description after the constant)
If the device does not support async mode there will be no such descriptor. E.g. here's the log from my Prometheus dac (doesn't support it or claim to support it.)
It would be nice to verify marketing claims of other DACs that claim using async transfer mode.
If you have one and would like to try (on a windows PC):

Source is a microsoft usb audio related doc referring to USB implementation related things you can't generally view without 3rd party tools: http://download.microsoft.com/download/5/7/7/577a5684-8a83-43ae-9272-ff260a9c20e2/USB_Audio_and_Windows.doc
According to the doc - audio devices supporting asynchronous transfer mode should have an extra 'endpoint descriptor' with
'bmAttributes' = 0x5 (USB_ENDPOINT_TYPE_ASYNCHRONOUS)
(the program you use to view the descriptors may use a different symbolic constant description after the constant)
If the device does not support async mode there will be no such descriptor. E.g. here's the log from my Prometheus dac (doesn't support it or claim to support it.)
port 1 : USB Composite Device
Parameter | Value |
---|---|
Hardware ID | USB\VID_08BB&PID_2707&REV_0100 |
Setup Class | USB |
Class GUID | {36fc9e60-c465-11cf-8056-444553540000} |
PDO Name | \Device\USBPDO-9 |
Service Name | usbccgp |
Parameter | Value |
---|---|
Connection Information | |
ConnectionIndex | 0x1 |
CurrentConfigurationValue | 0x1 |
LowSpeed | FALSE |
DeviceIsHub | FALSE |
DeviceAddress | 0x2 |
NumberOfOpenPipes | 0x1 |
ConnectionStatus | DeviceConnected |
Pipe #0 | |
Endpoint Descriptor | |
bLength | 0x7 |
bEndpointAddress | 0x85 [IN] |
bmAttributes | 0x3 (USB_ENDPOINT_TYPE_INTERRUPT) |
wMaxPacketSize | 0x1 |
bInterval | 0xA |
Device Descriptor | |
bLength | 0x12 |
bcdUSB | 0x110 |
bDeviceClass | 0x0 |
bDeviceSubClass | 0x0 |
bDeviceProtocol | 0x0 |
bMaxPacketSize0 | 0x8 |
idVendor | 0x8BB |
idProduct | 0x2707 |
bcdDevice | 0x100 |
iManufacturer | 0x1 |
iProduct | 0x2 |
iSerialNumber | 0x0 |
bNumConfigurations | 0x1 |
Parameter | Value |
---|---|
Configuration Descriptor | |
bLength | 0x9 |
bDescriptorType | USB_CONFIGURATION_DESCRIPTOR_TYPE |
wTotalLength | 0xBE |
bNumInterfaces | 0x3 |
iConfiguration | 0x0 |
bmAttributes | 0x80 ( Bus_Powered ) |
MaxPower | 0x32 |
Interface Descriptor | |
bLength | 0x9 |
bInterfaceNumber | 0x0 |
bAlternateSetting | 0x0 |
bNumEndpoints | 0x0 |
bInterfaceClass | 0x1 (Audio) |
bInterfaceSubClass | 0x1 (AUDIOCONTROL) |
bInterfaceProtocol | 0x0 (INTERFACE_PROTOCOL_UNDEFINED) |
iInterface | 0x0 |
Interface Descriptor | |
bLength | 0x9 |
bInterfaceNumber | 0x1 |
bAlternateSetting | 0x0 |
bNumEndpoints | 0x0 |
bInterfaceClass | 0x1 (Audio) |
bInterfaceSubClass | 0x2 (AUDIOSTREAMING) |
bInterfaceProtocol | 0x0 (INTERFACE_PROTOCOL_UNDEFINED) |
iInterface | 0x0 |
Interface Descriptor | |
bLength | 0x9 |
bInterfaceNumber | 0x1 |
bAlternateSetting | 0x1 |
bNumEndpoints | 0x1 |
bInterfaceClass | 0x1 (Audio) |
bInterfaceSubClass | 0x2 (AUDIOSTREAMING) |
bInterfaceProtocol | 0x0 (INTERFACE_PROTOCOL_UNDEFINED) |
iInterface | 0x0 |
Endpoint Descriptor | |
bLength | 0x9 |
bEndpointAddress | 0x2 [OUT] |
bmAttributes | 0x9 (USB_ENDPOINT_TYPE_ISOCHRONOUS) |
wMaxPacketSize | 0xC0 |
bInterval | 0x1 |
Interface Descriptor | |
bLength | 0x9 |
bInterfaceNumber | 0x1 |
bAlternateSetting | 0x2 |
bNumEndpoints | 0x1 |
bInterfaceClass | 0x1 (Audio) |
bInterfaceSubClass | 0x2 (AUDIOSTREAMING) |
bInterfaceProtocol | 0x0 (INTERFACE_PROTOCOL_UNDEFINED) |
iInterface | 0x0 |
Endpoint Descriptor | |
bLength | 0x9 |
bEndpointAddress | 0x2 [OUT] |
bmAttributes | 0x9 (USB_ENDPOINT_TYPE_ISOCHRONOUS) |
wMaxPacketSize | 0x60 |
bInterval | 0x1 |
Interface Descriptor | |
bLength | 0x9 |
bInterfaceNumber | 0x2 |
bAlternateSetting | 0x0 |
bNumEndpoints | 0x1 |
bInterfaceClass | 0x3 (Human Interface Device) |
bInterfaceSubClass | 0x0 (No Subclass) |
bInterfaceProtocol | 0x0 (None) |
iInterface | 0x0 |
Endpoint Descriptor | |
bLength | 0x7 |
bEndpointAddress | 0x85 [IN] |
bmAttributes | 0x3 (USB_ENDPOINT_TYPE_INTERRUPT) |
wMaxPacketSize | 0x1 |
bInterval | 0xA |
It would be nice to verify marketing claims of other DACs that claim using async transfer mode.
If you have one and would like to try (on a windows PC):
- Download and install the free trial of sysnucleus USBTrace http://www.sysnucleus.com/usbtrace_download.html (or any other tool that lets you enumerate USB devices and view detailed property information. This one at least supports all major windows versions and both 32b and 64b)
- Disconnect all usb things except for your DAC. (easier to find your DAC in the list, if it's not 'named' in it).
- Run USBTrace
- Under the 'usb view' tab, 'device view' tab - find the connected USB device (should really be the only one, if you unplugged all the other ones)
- In the info window, verify that there's a table with 'Configuration Descriptor'
where bInterfaceClass is 0x1 (Audio)
That'd be your usb audio device.
- Under the 'usb view' tab, 'device view' tab - find the connected USB device (should really be the only one, if you unplugged all the other ones)
- Now look for 'Endpoint Descriptors' tables. 'Endpoint Descriptor'
(there are a couple)
- If you only find ones where:
bmAttributes is 0x9 Endpoint_synchronous then it looks like your DAC isn't really asynchronous as claimed.
- If you find one with:
bmAttributes = some number and description mentioning asynchronous after it. Then it's your DAC supports and does async transfer. Or at least the USB chip supports it. Not sure which one, but this is a good first step in determining what the state of affairs is.
This should provide a reliable indication for devices without custom drivers (and probably for most with them). So far I wasn't able to do this with MD11 and its extensive custom drivers, since it installs its own BUS driver, and puts MD11 on the 'Musiland Bus'. So you can't view the endpoint descriptors with it since MD11 is not longer technically on the USB bus. Otherwise, if it's on USB and is an Audio device, than you should be able to view the endpoint descriptors and verify whether async mode is there or not.
You should be able to do the same for MacOS X and linux through cli:
cat /proc/bus/usb/devices
or pipe it to grep with a regex for looking for bmAttributes.*=.*0x[0-9]?5 or async
(no idea what the GUI equivalent is).
- If you only find ones where: