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.

TUSB4041I: TUSB4041 cfgActive bit not working as described

Part Number: TUSB4041I
Other Parts Discussed in Thread: TUSB4041PAPEVM

Hi we're currently evaluating the TUSB4041 USB Hub IC SMBus interface using the TUSB4041PAPEVM. We've exposed the SMBus wires on the devkit and connected them to an iMX devkit. The upstream USB is connected to the USB port of the iMX.

In general when enabling and disabling ports with the port used register it seems like the IC should notify the host that a port has connected or disconnected but this doesn't seem to happen.

 The datasheet suggests when cfgActive is 1, the IC should not connect upstream over USB until the bit is cleared. We've found instead that after setting the smbusRst bit to allow configuration (which sets the cfgActive bit), the IC remains connected. If we then write to the port used register to disable a port the disable takes place immediately instead of waiting for us to clear the cfgActive bit. The host also doesn't re-enumerate the USB device on that port. Is that intended behavior? And if so why doesn't the TUSB4041 re-enumerate to refresh the ports on the host?

Similar to what this user was seeing on this other thread: https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1442576/tusb4041i-port-used-configuration-register

On a smaller note, we've found that the IC only allows one port to be enabled/disabled (via the port used register) at a time which isn't mentioned in the datasheet at all. e.g. on startup the port used register 0x08 is set to 0x0F, writing 0x00 to 0x08 doesn't change the register value, but writing 0x0E to disable port 1 or 0x07 to disable port 4 seems to work.

  • Hi Timothy

    here is the procedure:

    1: SMBUSz is low.

    2:; power on hub.

    3: write 1 to bit7 customRmbl in 0x07 register 

    4: write regiser 0x08 to  enable /disable any ports.

    5: write 1 to cfgActive  bit in register 0xF8.

       You will see hub is connected  and downstream ports are connected/disconnected  based on your setting in 0x08 register.

    Best

    brian

  • Thanks Brian, will give that a try. Can you elaborate on why the customRmbl bit is required? The default removable reg is 0xF (all ports are removable, customRmbl not set), from what I can tell it looks like the customRmbl bit just makes the removable bits RW instead of RO. Does it also affect how the port used register works?

  • customRmbl  is used to control port enable /disable as well for 0x08h.

    Regards

    brian

  • Hi Brian,

    That sequence seems to have worked for enabling/disabling ports for the first time at power up, but i still don't seem to be able to configure ports at runtime. My sequence is as follows:

    i2cset -y 0 0x44 0x07 0x8F # enable custom rmbl
    i2cset -y 0 0x44 0x08 0x07 # disable port 4
    i2cset -y 0 0x44 0xF8 0x01 # start cfg
    
    i2cset -y 0 0x44 0xF8 0x02 # reset
    
    i2cset -y 0 0x44 0x07 0x8F # enable custom rmbl
    i2cset -y 0 0x44 0x08 0x07 # enable port 4
    i2cset -y 0 0x44 0xF8 0x01 # start cfg

    Using the above sequence of i2c writes, after the first start cfg, port 4 is disabled as expected. After resetting and applying the config the second time port 4 is still unpowered. Only after disconnecting and repowering the IC can I enable port 4. Is there an i2c command or sequence I'm missing here to be able to enable ports at runtime?

  • Let me check again inn lab tomorrow.

    Best

    brian

  • Can you control GRSTz pin?  you need to reset the hub or repower the IC to  re-config ports.

    Best

    Brian

  • Not at the moment, so I'm guessing the smbusRst command doesn't emulate an assertion of the GRSTz pin?

  • correct.

    Best

    Brian