I get rid of the hub (cut out the middle man) and plug it in. Linux shows this in the logs:
Nov 17 13:02:20 trona kernel: usb 4-1.1: new full-speed USB device number 12 using ehci-pci Nov 17 13:02:20 trona kernel: usb 4-1.1: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00 Nov 17 13:02:20 trona kernel: usb 4-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Nov 17 13:02:20 trona kernel: usb 4-1.1: Product: CP2102 USB to UART Bridge Controller Nov 17 13:02:20 trona kernel: usb 4-1.1: Manufacturer: Silicon Labs Nov 17 13:02:20 trona kernel: usb 4-1.1: SerialNumber: 0001 Nov 17 13:02:20 trona kernel: cp210x 4-1.1:1.0: cp210x converter detected Nov 17 13:02:20 trona kernel: usb 4-1.1: cp210x converter now attached to ttyUSB0So there you go. It is on USB bus 4 and linux has a driver for it, making it /dev/ttyUSB0. Let's fire up Wireshark on USB bus 4 and repeat the exercise. I use:
usb.dst=="4.12.0" or usb.src=="4.12.0"I see 22 packets exchanged during enumeration. It will be a little painful, but I intend to transcribe the data for all 11 responses.
1 - Here is the device descriptor:
Frame 986: 82 bytes on wire (656 bits), 82 bytes captured (656 bits) on interface usbmon4, id 0 USB URB DEVICE DESCRIPTOR bLength: 18 bDescriptorType: 0x01 (DEVICE) bcdUSB: 0x0110 bDeviceClass: Device (0x00) bDeviceSubClass: 0 bDeviceProtocol: 0 (Use class code info from Interface Descriptors) bMaxPacketSize0: 64 idVendor: Silicon Labs (0x10c4) idProduct: CP210x UART Bridge (0xea60) bcdDevice: 0x0100 iManufacturer: 1 iProduct: 2 iSerialNumber: 3 bNumConfigurations: 1
2 - Here is the first config descriptor:
Frame 988: 73 bytes on wire (584 bits), 73 bytes captured (584 bits) on interface usbmon4, id 0 USB URB CONFIGURATION DESCRIPTOR bLength: 9 bDescriptorType: 0x02 (CONFIGURATION) wTotalLength: 32 bNumInterfaces: 1 bConfigurationValue: 1 iConfiguration: 0 Configuration bmAttributes: 0x80 NOT SELF-POWERED NO REMOTE-WAKEUP bMaxPower: 50 (100mA)
3 - Here is the second config descriptor:
Frame 990: 96 bytes on wire (768 bits), 96 bytes captured (768 bits) on interface usbmon4, id 0 USB URB CONFIGURATION DESCRIPTOR bLength: 9 bDescriptorType: 0x02 (CONFIGURATION) wTotalLength: 32 bNumInterfaces: 1 bConfigurationValue: 1 iConfiguration: 0 Configuration bmAttributes: 0x80 NOT SELF-POWERED NO REMOTE-WAKEUP bMaxPower: 50 (100mA) INTERFACE DESCRIPTOR (0.0): class Vendor Specific bLength: 9 bDescriptorType: 0x04 (INTERFACE) bInterfaceNumber: 0 bAlternateSetting: 0 bNumEndpoints: 2 bInterfaceClass: Vendor Specific (0xff) bInterfaceSubClass: 0x00 bInterfaceProtocol: 0x00 iInterface: 2 ENDPOINT DESCRIPTOR bLength: 7 bDescriptorType: 0x05 (ENDPOINT) bEndpointAddress: 0x81 IN Endpoint:1 bmAttributes: 0x02 wMaxPacketSize: 64 bInterval: 0 ENDPOINT DESCRIPTOR bLength: 7 bDescriptorType: 0x05 (ENDPOINT) bEndpointAddress: 0x01 OUT Endpoint:1 bmAttributes: 0x02 wMaxPacketSize: 64 bInterval: 0
4 - Here is the first string descriptor (for index 0):
Frame 992: 68 bytes on wire (544 bits), 68 bytes captured (544 bits) on interface usbmon4, id 0 USB URB STRING DESCRIPTOR bLength: 4 bDescriptorType: 0x03 (STRING) wLANGID: English (United States) (0x0409)
5 - Here is the second string descriptor (for index 2):
Frame 994: 138 bytes on wire (1104 bits), 138 bytes captured (1104 bits) on interface usbmon4, id 0 USB URB STRING DESCRIPTOR bLength: 74 bDescriptorType: 0x03 (STRING) bString: CP2102 USB to UART Bridge Controller
6 - Here is the third string descriptor (for index 1):
Frame 996: 90 bytes on wire (720 bits), 90 bytes captured (720 bits) on interface usbmon4, id 0 USB URB STRING DESCRIPTOR bLength: 26 bDescriptorType: 0x03 (STRING) bString: Silicon Labs
7 - Here is the fourth string descriptor (for index 3):
Frame 998: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface usbmon4, id 0 USB URB STRING DESCRIPTOR bLength: 10 bDescriptorType: 0x03 (STRING) bString: 0001
8 - Here is the configuration request (response has no data).
Frame 999: 64 bytes on wire (512 bits), 64 bytes captured (512 bits) on interface usbmon4, id 0 USB URB Setup Data bmRequestType: 0x00 bRequest: SET CONFIGURATION (9) bConfigurationValue: 1 wIndex: 0 (0x0000) wLength: 0
9 - Here is another string descriptor (for index 2 -- again).
Frame 1002: 138 bytes on wire (1104 bits), 138 bytes captured (1104 bits) on interface usbmon4, id 0 USB URB STRING DESCRIPTOR bLength: 74 bDescriptorType: 0x03 (STRING) bString: CP2102 USB to UART Bridge Controller
10 - Here is the first control request (response is a single byte 0x02)
Frame 1003: 64 bytes on wire (512 bits), 64 bytes captured (512 bits) on interface usbmon4, id 0 USB URB Setup Data bmRequestType: 0xc0 bRequest: 255 wValue: 0x370b wIndex: 0 (0x0000) wLength: 1
11 - Here is the second control exchange (response again is a single byte 0x02)
Frame 1005: 64 bytes on wire (512 bits), 64 bytes captured (512 bits) on interface usbmon4, id 0 USB URB Setup Data bmRequestType: 0xc0 bRequest: 255 wValue: 0x370b wIndex: 0 (0x0000) wLength: 2I am gratified by two things compared to the ACM enumeration:
usb.dst=="4.12.1" or usb.src=="4.12.1"I type using picocom and see single byte transfers using URB BULK out, no terrific surprises.
Tom's Computer Info / tom@mmto.org