Hi,
I have developed a board using a TUSB8020B USB hub. One port is routed via a type A connector to an off-the-shelf USB3 camera module, the other port connects via USB2 only to an on-board microcontroller. This microcontroller also connects to the hub via SMBUS for configuration. Right now for debugging I'm just using the default register values the chip starts up with. The only change I'm making is writing 0x01 to the Device Status and Command Register (address 0xF8) to set the cfgActive bit and enable the hub. However, I'm unable to connect to any devices plugged into the hub.
When I open device manager, there is a yellow warning triangle next to the USB hub icon for the device. When I right click on the device and select properties, the Device Status says:
> Windows has stopped this device because it has reported problems. (Code 43)
>
> The USB hub failed to reset.
Looking on Microsoft's website, code 43 seems like a generic error message about a driver or hardware problem: https://technet.microsoft.com/en-gb/library/cc725873(v=ws.10).aspx. Their suggested solution (uninstalling and reinstalling the device) didn't help. I tried using Microsoft's USB Hardware Verifier (part of the MUTT package: https://msdn.microsoft.com/en-us/library/windows/hardware/dn376875(v=vs.85).aspx
Session Name : TraceSessionWedSep161724162015 Attempting to start session TraceSessionWedSep161724162015... Trace Session created...Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 13086894261.015598: (UsbHub3/179) Event Message: Client Initiated Recovery Action DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d 0-8815-00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 13086894261.015617: (UsbHub3/177) Event Message: Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 13086894261.427362: (UsbHub3/179) Event Message: Client Initiated Recovery Action DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d 0-8815-00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 13086894261.427368: (UsbHub3/177) Event Message: Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 13086894261.838444: (UsbHub3/179) Event Message: Client Initiated Recovery Action DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d 0-8815-00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 13086894261.838453: (UsbHub3/177) Event Message: Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 13086894262.250250: (UsbHub3/179) Event Message: Client Initiated Recovery Action DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d 0-8815-00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 13086894262.250263: (UsbHub3/177) Event Message: Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 13086894262.661966: (UsbHub3/179) Event Message: Client Initiated Recovery Action DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d 0-8815-00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 13086894262.661970: (UsbHub3/177) Event Message: Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 13086894263.073660: (UsbHub3/179) Event Message: Client Initiated Recovery Action DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d 0-8815-00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 13086894263.073669: (UsbHub3/177) Event Message: Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 13086894263.484720: (UsbHub3/179) Event Message: Client Initiated Recovery Action DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d 0-8815-00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 13086894263.484724: (UsbHub3/177) Event Message: Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 13086894263.896490: (UsbHub3/179) Event Message: Client Initiated Recovery Action DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d 0-8815-00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 13086894263.896498: (UsbHub3/177) Event Message: Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 13086894264.308409: (UsbHub3/179) Event Message: Client Initiated Recovery Action DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d 0-8815-00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 13086894264.308418: (UsbHub3/177) Event Message: Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 13086894264.720400: (UsbHub3/174) Event Message: Hub Exceeded Reset Limit. Declaring a PNP failure in the State Machine. VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88- c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Session Stopped...Status : 0 ******************************************************************************** ************** Test Results: Below is a report of all the Hardware verifier events encountered. The Key field refers to a Controller, hub, or device. During the lifetime of this utility, all unfiltered events are captured in file AllEvents.etl (in current directory). The Key in below report c an be used to filter events in AllEvents.etl file ******************************************************************************** ************** Record #1 (Key = 0x1ffe63cc26f8) DeviceInterfacePath: \??\USB#ROOT_HUB30#4&d858888&0&0#{f18a0e88-c30c-11d0-8815 -00a0c906bed8} PortPath: 0x72c601, 0x0, 0x800c69, 0x0 All errors encountered: #1: (UsbHub3/179): Client Initiated Recovery Action #2: (UsbHub3/179): Client Initiated Recovery Action #3: (UsbHub3/179): Client Initiated Recovery Action #4: (UsbHub3/179): Client Initiated Recovery Action #5: (UsbHub3/179): Client Initiated Recovery Action #6: (UsbHub3/179): Client Initiated Recovery Action #7: (UsbHub3/179): Client Initiated Recovery Action #8: (UsbHub3/179): Client Initiated Recovery Action #9: (UsbHub3/179): Client Initiated Recovery Action Record #2 (Key = 0x1ffe65278e58) VendorID/ProductID: 0x451/0x8025 DeviceInterfacePath: \??\USB#VID_0451&PID_8025#5&262ed807&0&5#{f18a0e88-c30c-1 1d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x5, 0x0, 0x0, 0x0, 0x0, 0x0 All errors encountered: #1: (UsbHub3/177): Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager #2: (UsbHub3/177): Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager #3: (UsbHub3/177): Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager #4: (UsbHub3/177): Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager #5: (UsbHub3/177): Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager #6: (UsbHub3/177): Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager #7: (UsbHub3/177): Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager #8: (UsbHub3/177): Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager #9: (UsbHub3/177): Device getting Re-Enumerated. This Enumeration is not Vis ible to PnP Manager #10: (UsbHub3/174): Hub Exceeded Reset Limit. Declaring a PNP failure in the State Machine.
At first glance it looks like the PC can't communicate with the hub properly, but it's clearly recognising that it is a hub, and looking in device manager I can see that it's picked up the vendor/product IDs properly, so it must be able to communicate OK.
Address Data 0x00000000 00 51 04 25 80 1C 00 03 03 00 20 00 00 00 00 00 0x00000010 02 40 25 45 05 95 7C 27 12 15 42 12 27 2D 03 00 0x00000020 09 04 18 00 00 06 06 06 00 00 00 00 00 00 00 00 0x00000030 33 00 42 00 30 00 30 00 30 00 38 00 36 00 39 00 0x00000040 33 00 36 00 43 00 41 00 00 00 00 00 00 00 00 00 0x00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x000000A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x000000B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x000000C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x000000D0 1E 1E 1E 00 00 00 00 00 18 18 18 00 00 00 00 00 0x000000E0 04 04 04 00 00 00 00 00 77 77 77 00 00 00 00 00 0x000000F0 00 00 00 00 80 80 00 00 00
Note that this is just reading every address from 0x00 to 0xF8 (the last register), including the addresses that don't have registers assigned to them, so those locations will just be junk data. But comparing it to the datasheet, every location that is in a register looks correct.
Any ideas?