My home machine is a Gigabyte socket 1155 motherboard with an i7 processor. This motherboard has an Intel Z77 chipset, which provides the root hubs for all of the USB. The specifications on the Z77 state that it provides 4 USB 3.0 ports and 10 USB 2.0 ports. The motherboard also contains two VAI VL810 chips. These are 4 port USB 3.0 hubs.
This might be how things are done:
When I scan through the dmesg output on my linux system, I see the following:
[ 0.619373] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.619374] ehci-pci: EHCI PCI platform driver [ 0.619417] ehci-pci 0000:00:1a.0: setting latency timer to 64 [ 0.619419] ehci-pci 0000:00:1a.0: EHCI Host Controller [ 0.619447] ehci-pci 0000:00:1a.0: new USB bus registered, assigned bus number 1 [ 0.619458] ehci-pci 0000:00:1a.0: debug port 2 [ 0.623348] ehci-pci 0000:00:1a.0: cache line size of 64 is not supported [ 0.623358] ehci-pci 0000:00:1a.0: irq 16, io mem 0xf7d37000 [ 0.629169] ehci-pci 0000:00:1a.0: USB 2.0 started, EHCI 1.00 [ 0.629181] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 0.629182] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 0.629183] usb usb1: Product: EHCI Host Controller [ 0.629184] usb usb1: Manufacturer: Linux 3.9.2-200.fc18.x86_64 ehci_hcd [ 0.629185] usb usb1: SerialNumber: 0000:00:1a.0 [ 0.629240] hub 1-0:1.0: USB hub found [ 0.629242] hub 1-0:1.0: 2 ports detected [ 0.629336] ehci-pci 0000:00:1d.0: setting latency timer to 64 [ 0.629339] ehci-pci 0000:00:1d.0: EHCI Host Controller [ 0.629362] ehci-pci 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 0.629372] ehci-pci 0000:00:1d.0: debug port 2 [ 0.633259] ehci-pci 0000:00:1d.0: cache line size of 64 is not supported [ 0.633269] ehci-pci 0000:00:1d.0: irq 23, io mem 0xf7d38000 [ 0.639161] ehci-pci 0000:00:1d.0: USB 2.0 started, EHCI 1.00 [ 0.639168] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002 [ 0.639169] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 0.639170] usb usb2: Product: EHCI Host Controller [ 0.639171] usb usb2: Manufacturer: Linux 3.9.2-200.fc18.x86_64 ehci_hcd [ 0.639172] usb usb2: SerialNumber: 0000:00:1d.0 [ 0.639217] hub 2-0:1.0: USB hub found [ 0.639219] hub 2-0:1.0: 2 ports detected [ 0.639273] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.639278] uhci_hcd: USB Universal Host Controller Interface driver [ 0.639331] xhci_hcd 0000:00:14.0: setting latency timer to 64 [ 0.639333] xhci_hcd 0000:00:14.0: xHCI Host Controller [ 0.639356] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 3 [ 0.639425] xhci_hcd 0000:00:14.0: cache line size of 64 is not supported [ 0.639459] xhci_hcd 0000:00:14.0: irq 47 for MSI/MSI-X [ 0.639493] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002 [ 0.639494] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 0.639495] usb usb3: Product: xHCI Host Controller [ 0.639496] usb usb3: Manufacturer: Linux 3.9.2-200.fc18.x86_64 xhci_hcd [ 0.639497] usb usb3: SerialNumber: 0000:00:14.0 [ 0.639534] xHCI xhci_add_endpoint called for root hub [ 0.639535] xHCI xhci_check_bandwidth called for root hub [ 0.639545] hub 3-0:1.0: USB hub found [ 0.639550] hub 3-0:1.0: 4 ports detected [ 0.639708] xhci_hcd 0000:00:14.0: xHCI Host Controller [ 0.639729] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 4 [ 0.639745] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003 [ 0.639746] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 0.639747] usb usb4: Product: xHCI Host Controller [ 0.639748] usb usb4: Manufacturer: Linux 3.9.2-200.fc18.x86_64 xhci_hcd [ 0.639749] usb usb4: SerialNumber: 0000:00:14.0 [ 0.639781] xHCI xhci_add_endpoint called for root hub [ 0.639782] xHCI xhci_check_bandwidth called for root hub [ 0.639792] hub 4-0:1.0: USB hub found [ 0.639797] hub 4-0:1.0: 4 ports detectedI am not sure what to make of the above. First it adds up to only 12 ports. The vendor 0x1d6b is "linux". Product 2 is a USB 2.0 root hub. Product 3 is a USB 3.0 root hub. So, as this stands, this gives me 4 usb "busses" as follows:
lsusb Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 003 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Bus 004 Device 002: ID 2109:0810 Bus 004 Device 003: ID 2109:0810 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 046d:c501 Logitech, Inc. Cordless Mouse ReceiverThe devices that show up in the above are:
The "lsusb" command has some nice tricks! With the "-t" switch, it gives a nice tree formatted output. There is also a "-v" switch, but it produces a lot more output than I want to insert here.
lsusb -t /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M |__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M |__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M |__ Port 5: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
With the -v switch, we get lots of output, and even more if we run the command as root (which allows it to open connections to USB devices). The following is the output for an atmega32u4 device, programmed with a slightly modified version of the LUFA Generic HID Demo. Note that the interface and endpoint descriptors are fully displayed.
Bus 002 Device 006: ID 03eb:204f Atmel Corp. LUFA Generic HID Demo Application Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x03eb Atmel Corp. idProduct 0x204f LUFA Generic HID Demo Application bcdDevice 0.01 iManufacturer 1 Tom Trebisky (tom@mmto.org) iProduct 2 Zap iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 41 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xc0 Self Powered MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 No Subclass bInterfaceProtocol 0 None iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 32 Report Descriptor: (length is 32) Item(Global): Usage Page, data= [ 0x00 0xff ] 65280 (null) Item(Local ): Usage, data= [ 0x01 ] 1 (null) Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Local ): Usage, data= [ 0x02 ] 2 (null) Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0xff ] 255 Item(Global): Report Size, data= [ 0x08 ] 8 Item(Global): Report Count, data= [ 0x08 ] 8 Item(Main ): Input, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Local ): Usage, data= [ 0x03 ] 3 (null) Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0xff ] 255 Item(Global): Report Size, data= [ 0x08 ] 8 Item(Global): Report Count, data= [ 0x08 ] 8 Item(Main ): Output, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Main ): End Collection, data=none Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 5 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 5 Device Status: 0x0000 (Bus Powered)
Tom's Computer Info / tom@mmto.org