Because of the holidays, TI E2E™ design support forum responses will be delayed from Dec. 25 through Jan. 2. Thank you for your patience.

This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TUSB8041: USB HUB not working at all. Won't connect on upstream/downstream but powers ON

Part Number: TUSB8041

Hello,

We're using this usb hub for a design and we're trying to get it work on i2c with an ATmega2560 microcontroller and it just won't work at all. Here's what we've done for the board:

1) We configured an external i2c EEPROM correctly as per our requirements for the hub to load its values into its own internal registers as instructed by the datasheet. 

2) The usb hub is held in reset (greater than minimum reset duration of 3ms) during board startup until the EEPROM is configured correctly and the reset is released only after making sure the i2c bus is free of traffic so that the usb hub (acting as a master) can talk to its external EEPROM.

Okay now even with all these correctly setup our usb hub isn't working and it's not connecting to the upstream/downstream lines. I've already replaced the usb hub chip thinking it was a faulty chip but we're still facing the same issue. 
I've attached some schematics of our design and the EEPROM configuration register map set for our requirements. It would be great if someone could help us figure out what we're missing.

Here's the mfg part number of the crystal for the hub : ECS-240-10-37-CWN-TR

P.S. We know the reset pin circuitry is wrong and we have a temporary fix in place using a jumper wire from GND to reset.

Here's a screenshot of the complete schematic of the hub with the downstream ports and a screenshot of the upstream port.

USB-USB_HUB.pdf

This is the register configuration map for the external EEPROM.

///////////////////////////USB HUB EEPROM REGISTER DEFINITIONS/////////////////////////////////////////////////////
//#define register_name                        reg_value // eeprom adress(es), reg_value description
#define ROM_SIGNATURE_REGISTER                      0x55 // 00h, write last, change while writing, then reset usb hub
#define VENDOR_ID_LSB                               0x51 // 01h 
#define VENDOR_ID_MSB                               0x04 // 02h 
#define PRODUCT_ID_LSB                              0x40 // 03h 
#define PRODUCT_ID_MSB                              0x81 // 04h 
#define DEVICE_CONFIGURATION_REGISTER               0x00 // 05h 
#define BATTERY_CHARGING_SUPPORT_REGISTER           0x00 // 06h 
#define DEVICE_REMOVABLE_CONFIGURATION_REGISTER     0x8F // 07h, all downstream ports marked as removable
#define PORT_USED_CONFIGURATION_REGISTER            0x0F // 08h, enable all downstream ports
#define RESERVED                                    0x00 // 09h, 0Ch-0Fh, 27h-2Eh, 2Fh, D0h-D4h, D5h-D7h, D8h-DCh, DDh-EFh, F1h-F7h, F9h-FFh 
#define DEVICE_CONFIGURATION_REGISTER_2             0x42 // 0Ah 
#define USB_2_PORT_POLARITY_CONTROL_REGISTER        0x81 // 0Bh, only upstream d+/- polarity switched
uint8_t UUID_BYTE[32] =                             "f81d4fae7dec11d0a76500a0c91e6bf6";// 10h-1Fh, PLACEHOLDER PULLED FROM WEBSITE, MUST REGISTER
#define LANGID_BYTE_LSB                             0x09 // 20h, only one supported
#define LANGID_BYTE_MSB                             0x04 // 21h, only one supported
#define SERIAL_NUMBER_LENGTH                        0x00 // 22h, customSernum = 0 meaning this will not be overwritten
#define MANUFACTURER_STRING_LENGTH                  0x00 // 23h, indicates none provided
#define PRODUCT_STRING_LENGTH                       0x00 // 24h, indicates none provided 
#define DEVICE_CONFIGURATION_REGISTER_3             0x00 // 25h, USB 3.1 hub, no battery charging support
#define USB_2_ONLY_PORT_REGISTER                    0x00 // 26h, USB 3.1 & 2.0 hub support
uint8_t SERIAL_NUMBER_STRING_BYTE[32] =             { 0 }; // 30h-4Fh, customSernum = 0, these registers disregarded, update array below if added
uint8_t MANUFACTURER_STRING_BYTE[64] =              { 0 }; // 50h-8Fh, read when MANUFACTURER_STRING_LENGTH != 0, update array below if added
uint8_t PRODUCT_STRING_BYTE[64] =                   { 0 }; // 90h-CFh, read when PRODUCT_STRING_LENGTH != 0, update array below if added
#define ADDITIONAL_FEATURES_CONFIGURATION_REGISTER  0x18 // F0h, STS enabled, power delay disabled, usb3spread enabled
#define SMBUS_DEVICE_STATUS_AND_COMMAND_REGISTER    0x00 // F8h, unaffected by eeprom
///////////////////////////END OF USB HUB EEPROM REGISTER DEFINITIONS/////////////////////////////////////////////////////

  • Avinash,

    We are looking into your issue and will get back to you as soon as possible.
  • Malik,

    How is it going? Do you have any additional questions?

    Jeremiah
  • Jeremiah,

    Have you confirmed that the hub works without the EEPROM? That will help us determine if there is an USB issue or a I2C issue.

    Regards,
    JMMN
  • JMMN, 

    We can't test the hub separately because our current board layout is designed in a way that it needs the external EEPROM register's configuration. The hub's default internal register configuration won't be applicable here as we've changed some stuff such as the polarity on the d+/d- pins of the upstream port. So keeping this in mind what would be the best way to test this hub without the external EEPROM? 

  • Even with the USB 2.0 polarity swapped, the USB 3.0 portion of the hub would still be able to connect to the host without the EEPROM.

    Can you see if that works?
  • Working on it will get back to you with the results asap.
  • JMMN,

    Sorry for the delay in getting back to you. We tested the usb 3.0 and they don't work either. Can you advice on what the next step to troubleshoot / fixing this would be? We've also replaced the usb chip with a new one just in case the first one was damaged during assembly.

  • Just to be clear. By testing he means we plugged things in downstream and upstream and saw if the upstream device (a computer) showed anything. If you meant anything different let us know. We have also done some basic continuity testing to make sure pins are attached correctly/the chip is on correctly. We are not sure what the best procedure is for this hub beyond plugging stuff in and seeing it it connects.

    Best,

    Ian

  • Hi Ian,

    Which operating system is running on the host?  If it is a Windows platform, can you check device manager or install usbview.exe and check the USB hub connections - post screen cap if you can provide it.

    Can you also check:

    Voltage at USB_VBUS

    Voltage at USB_R1

    Check if crystal starts

    Confirm SMBUSz = high

    Regards,

    JMMN

  • What should the voltage of USB_R1 be?
  • It should be around half a volt.

    Regards,
    JMMN
  • USB_VBUS is 0.5V

    USB_R1 is 0V

    SMBUSz is 2.7V (datasheet says >2V is high)

    We have not been able to confirm the crystal with a 10X probe. We noticed our crystal was on the edge of some specs so we got a better crystal and caps and tried that. 
    ECS-240-18-33-AGN-TR & 24pF caps.

    Still no luck. When I tried that program we do not get anything (does not pick it up). We are using usb 3.0 coords and plugging it into a 3.0 slot. 

    -Ian

  • We have also confirmed all of the values of resistors is correct.
  • HI,

    We replaced teh chip and USB_R1 now reads 0.49V. Other voltages are the same as before. In addition the upstream usb is picked up by the computer but it is not recognized. Here is the diagnostics from that program/


    =========================== USB Port1 ===========================

    Connection Status : 0x02 (Device failed enumeration)
    Port Chain : 1-1
    Properties : 0x01
    IsUserConnectable : yes
    PortIsDebugCapable : no
    PortHasMultiCompanions : no
    PortConnectorIsTypeC : no
    ConnectionIndex : 1
    CompanionIndex : 0
    CompanionHubSymLnk : USB#ROOT_HUB30#4&108f51c9&0&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
    CompanionPortNumber : 13

    ======================== USB Device ========================

    +++++++++++++++++ Device Information ++++++++++++++++++
    Device Description : Unknown USB Device (Device Descriptor Request Failed)
    Device Path : \\.\usb#vid_0000&pid_0002#5&36a3b657&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
    Device ID : USB\VID_0000&PID_0002\5&36A3B657&0&1
    Hardware IDs : USB\DEVICE_DESCRIPTOR_FAILURE
    Driver KeyName : {36fc9e60-c465-11cf-8056-444553540000}\0004 (GUID_DEVCLASS_USB)
    Driver Inf : C:\WINDOWS\inf\usb.inf
    Legacy BusType : PNPBus
    Class : USB
    Class GUID : {36fc9e60-c465-11cf-8056-444553540000} (GUID_DEVCLASS_USB)
    Interface GUID : {a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE)
    Enumerator : USB
    Location Info : Port_#0001.Hub_#0001
    Manufacturer Info : (Standard USB Host Controller)
    Capabilities : 0x64 (Removable, SilentInstall, RawDeviceOK)
    Status : 0x01806400 (DN_HAS_PROBLEM, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
    Problem Code : 43 (CM_PROB_FAILED_POST_START)
    Address : 1
    Power State : D3 (supported: D0, D3, wake from D0)

    ---------------- Connection Information ---------------
    Connection Index : 0x01 (1)
    Connection Status : 0x02 (DeviceFailedEnumeration)
    Current Config Value : 0x00
    Device Address : 0x00 (0)
    Is Hub : 0x00 (no)
    Number Of Open Pipes : 0x00 (0)
    Device Bus Speed : 0x00 (Low-Speed)

    --------------- Connection Information V2 -------------
    Connection Index : 0x01 (1)
    Length : 0x10 (16 bytes)
    SupportedUsbProtocols : 0x03
    Usb110 : 1 (yes)
    Usb200 : 1 (yes)
    Usb300 : 0 (no)
    ReservedMBZ : 0x00
    Flags : 0x00
    DevIsOpAtSsOrHigher : 0 (Is not operating at SuperSpeed or higher)
    DevIsSsCapOrHigher : 0 (Is not SuperSpeed capable or higher)
    DevIsOpAtSsPlusOrHigher : 0 (Is not operating at SuperSpeedPlus or higher)
    DevIsSsPlusCapOrHigher : 0 (Is not SuperSpeedPlus capable or higher)
    ReservedMBZ : 0x00

    ---------------------- Device Descriptor ----------------------
    bLength : 0x00 (0 bytes)

    -------------------- String Descriptors -------------------
    String descriptors are not available (because the device has problem code CM_PROB_FAILED_POST_START)

    Please advise on next steps/etc. Thanks.

  • Have you confirmed that the hub has sufficient solder on the thermal pad?  That is the main ground connection for the device so a poor connection can cause device issues.  

    Regards,

    JMMN

  • Yes, there is enough solder. Also, the plane adjacent to the top plane is an unbroken ground plane and we used the recommended design layout for what its worth.

    -Ian
  • Hi Ian,

    Can you check the line states of DP and DM and see what they look like after the failed enumeration?

    Usually when the devices fail enumeration it is because DP/DM are swapped or there is not a good ground connection.

    Regards,
    JMMN
  • JMMN,

    Thank you for your help. We identified the issue as something to do with our power lines having high ripples and it was preventing the chip from working properly. We fixed it and the hub works fine now.