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.

USB OTG with 3530/3730 and TPS65930

Other Parts Discussed in Thread: TPS65930, TPS65950, OMAP3530

Hi,

We've created a board with OMAP 3530 (3730 in next revision) processor and the TPS65930 chip.  We use WinCE 6.0 (we plan to move to 7.0), and all the drivers in BSP is prepared for TPS6550, which is on the EVM board. They should be compatible, but we have some problems with the USB OTG port connected to the TPS65930 chip.  We'd like to use it as a second USB port and connect some devices to it, but it doesn't work at all.  We ground the ID pin, to make sure it works in a proper mode (actually we tried it with the ID pin grounded by the Mini A type USB cable, and also with the ground on the board, and nothing worked). 

Theoretically there should be no difference between TPS65930 and TPS65950, so it should work fine with the attached driver… But, the EVM board is not using the OTG port from the TPS chip, just the ISP5107 one.

Is there anything we should do to make the USB OTG working?  So far we didn't change anything in the BSP.

Please, let me know.

Best regards,

Zack

  • I've tested the singnals on the USB data lines, and there is nothing.  No data during power on, no data during plugging the devices in.  And it doesn't matter what speed the device is.  Also, Ive tested all the configurations of the ID pin.

    After checking the data lines on scope - there is nothing.

    Please, let me know if you have any ideas.

    And one more thing - we use the TPS chip for powering the processor, and also for audio (thank you Tao for your help with that), so it is functional.

    Thank you!

    Best regards,

    Zack

  • Are you monitoring the ULPI signals or external signals (DM / DP)? If you search the forums you can see there are customers using TPS65930 with our BSP - so TPS should not be an issue. Pl. make sure all Phy initialization is happening and also dump out ULPI registers from TPS

     

    Atul

  • Hi Atul,

    Thank you very much for your response.

    I am monitoring the external signals - DM/DP.  I don't have an access to the ULPI ones (they are in the middle layer of the board).

    Here is my USB OTG initialization output:

      21470 PID:400002 TID:e50002 OTG Charger Event(vbus.power.event)
      21470 PID:400002 TID:e50002 Battery Charger Event Create
      21470 PID:400002 TID:e50002 HSUSBOTGTransceiver get called
      21470 PID:400002 TID:e50002 +TWL_FUNC_CTRL=0x0
      21471 PID:400002 TID:e50002 +TWL_IFC_CTRL=0x0
      21471 PID:400002 TID:e50002 +TWL_OTG_CTRL=0x0
      21471 PID:400002 TID:e50002 +TWL_OTHER_FUNC_CTRL=0x0
      21471 PID:400002 TID:e50002 +TWL_OTHER_INT_STS=0x0
      21471 PID:400002 TID:e50002 +TWL_PHY_PWR_CTRL=0x0
      21472 PID:400002 TID:e50002 +TWL_PHY_CLK_CTRL=0x2
      21472 PID:400002 TID:e50002 +TWL_VUSB3V1_REMAP=0xee
      21472 PID:400002 TID:e50002 +TWL_VUSB1V5_REMAP=0xee
      21472 PID:400002 TID:e50002 +TWL_VUSB1V8_REMAP=0xee
      21472 PID:400002 TID:e50002 HSUSBOTGTransceiver: CARKIT_Reg(0x0), IFC_CTRL_Reg(0x0)
      21473 PID:400002 TID:e50002 HSUSBOTGTransceiver: TWL_USB_INT_EN_RISE(0x0), TWL_USB_INT_EN_FALL(0x0)
      21595 PID:400002 TID:e50002 HSUSBOTGTransceiver: CARKIT_Reg(0x0), IFC_CTRL_Reg(0x0)
      21596 PID:400002 TID:e50002 HSUSBOTGTransceiver: TWL_USB_INT_EN_RISE(0x0), TWL_USB_INT_EN_FALL(0x0)
      21596 PID:400002 TID:e50002 HSUSBOTGTransceiver:Configure success
      21609 PID:400002 TID:e50002 AttachProc with 4 parameters
      21615 PID:400002 TID:e50002 HS configuration:
      21616 PID:400002 TID:e50002 interface: 0  EP:01  direction:IN  maxPacketSize:512  Attributes:0x2
      21616 PID:400002 TID:e50002 interface: 0  EP:02  direction:OUT maxPacketSize:512  Attributes:0x2
      21616 PID:400002 TID:e50002 FS configuration:
      21616 PID:400002 TID:e50002 interface: 0  EP:01  direction:IN  maxPacketSize:64  Attributes:0x2
      21616 PID:400002 TID:e50002 interface: 0  EP:02  direction:OUT maxPacketSize:64  Attributes:0x2
      21616 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)
      21616 PID:400002 TID:e50002 Control endpoint
      21616 PID:400002 TID:e50002 RxFIFOsz=0
      21616 PID:400002 TID:e50002 RxFIFOadd=0
      21616 PID:400002 TID:e50002 TxFIFOsz=0
      21616 PID:400002 TID:e50002 TxFIFOadd=0
      21616 PID:400002 TID:e50002 Unsupported endpoint Transfer type
      21616 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)
      21616 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)
      21617 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)
      21617 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)
      21627 PID:400002 TID:e50002 IsSE0 called with line state = 0x0
      21627 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)
      21642 PID:400002 TID:e50002 IsSE0 returning 1
      21657 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)
      21657 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)
      21657 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)
      21658 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)
      21658 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)
      21658 PID:400002 TID:e50002 IsSE0 called with line state = 0x0
      21659 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     

    Later, after running the OS, I can see two lines that are printed out once a while in a debug output:

    108408 PID:400002 TID:4850002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)
    108408 PID:400002 TID:4850002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

    And it doesn't matter if something is connected to the USB OTG port, or not.  Actually, we'd like to use it as a host, so the current settings are wrong (especially that nothing is connected there).  I think the connected device type should be "B" (I've corrected the debug output from the function "BOOL HSUSBOTGTransceiverTps659xx::IsBDeviceConnected()" to return "HSUSBOTGTransceiver::IsBDeviceConnected : TRUE\r\n", before it returned also type "A").  Please, correct me if I'm wrong.

    Here is the ULPI registers' dump:

     218561 PID:400002 TID:53d002e Power = 0x60
     218561 PID:400002 TID:53d002e Dump ULPI Reg
     218561 PID:400002 TID:53d002e ULPIVBusControl = 0x0
     218561 PID:400002 TID:53d002e ULPICarKitControl = 0x0
     218561 PID:400002 TID:53d002e ULPIIntMask = 0x0
     218561 PID:400002 TID:53d002e ULPIIntSrc = 0x0
     218561 PID:400002 TID:53d002e ULPIRawData = 0x0
     218561 PID:400002 TID:53d002e TPS659XX ULPI Register
     218562 PID:400002 TID:53d002e  ULPI_VID=(0,0)
     218562 PID:400002 TID:53d002e  ULPI_PID=(0,0)
     218562 PID:400002 TID:53d002e  Function Control=0
     218562 PID:400002 TID:53d002e  Interface Control=0
     218563 PID:400002 TID:53d002e  OTG Control(0)=53d002f
     218563 PID:400002 TID:53d002e  Interrupt Enable rising=0
     218563 PID:400002 TID:53d002e  Interrupt Enable Falling=0
     218563 PID:400002 TID:53d002e  Interrupt Status=0
     218563 PID:400002 TID:53d002e  Interrupt Latch=0
     218563 PID:400002 TID:53d002e  Debug=0
     218583 PID:400002 TID:53d002e  Scratch=0
     218583 PID:400002 TID:53d002e  Power=0

     

    Please, let me know if you have any thoughts on this.

    Thank you!!

    Best Regards,

    Zack


     

  • These registers do not look correct - seems like everything in TPS is just set to default power on values. Most likely nothing is going over I2C when your driver is initializing TPS configuration. 

     

    Atul

  • Atul,

    Thank you for your response.  I’ve captured the I2C communication between the processor and the TPS chipset (I’ve captured only the address 0x48, which is the USB) on startup of the OS: 

    I2C Packet

    Addr

    R/W

    Addr Ack

    Register Address

    Data

    Register Name

    Comment

    Start 7-bit Addr

    48

    Write

    Ack

    14

     

    USB_INT_LATCH

    We try to write to address, which is Read Only, so there is no ACK

    Start 7-bit Addr

    48

    Write

    Ack

    8d

     

    OTHER_INT_LATCH

    We try to write to address, which is Read Only, so there is no ACK

    Start 7-bit Addr

    48

    Write

    Ack

    21

     

    CARKIT_INT_LATCH

    We try to write to address, which is Read Only, so there is no ACK

    Start 7-bit Addr

    48

    Write

    Ack

    9b

     

    CARKIT_SM_1_INT_LATCH

    We try to write to address, which is Read Only, so there is no ACK

    Start 7-bit Addr

    48

    Write

    Ack

    a0

     

    CARKIT_SM_2_INT_LATCH

    We try to write to address, which is Read Only, so there is no ACK

    Start 7-bit Addr

    48

    Write

    Ack

    b5

     

    REG_CTRL_ERROR

    We try to write to address, which is Read Only, so there is no ACK

    Start 7-bit Addr

    48

    Write

    Ack

    12

    FF

    USB_INT_EN_FALL_CLR

    Correct Write

    Start 7-bit Addr

    48

    Write

    Ack

    0f

    FF

    USB_INT_EN_RISE_CLR

    Correct Write

    Start 7-bit Addr

    48

    Write

    Ack

    88

    FF

    OTHER_INT_EN_RISE_CLR

    Correct Write

    Start 7-bit Addr

    48

    Write

    Ack

    8b

    FF

    OTHER_INT_EN_FALL_CLR

    Correct Write

    Start 7-bit Addr

    48

    Write

    Ack

    1f

    FF

    CARKIT_INT_EN_CLR

    Correct Write

    Start 7-bit Addr

    48

    Write

    Ack

    99

    FF

    CARKIT_SM_1_INT_EN_CLR

    Correct Write

    Start 7-bit Addr

    48

    Write

    Ack

    9e

    FF

    CARKIT_SM_2_INT_EN_CLR

    Correct Write

    Start 7-bit Addr

    48

    Write

    Ack

    b4

    FF

    REG_CTRL_EN_CLR

    Correct Write

     

     

     

     

     

     

     

     

    Start 7-bit Addr

    48

    Write

    Ack

    ff

     

    PHY_CLK_CTRL_STS

    We try to write to address, which is Read Only, so there is no ACK

    Start 7-bit Addr

    48

    Write

    Ack

    fe

     

    PHY_CLK_CTRL

    We try to write to address, which is NOT Read Only, but there is no ACK (I don't know why it's not accepted)

    Start 7-bit Addr

    48

    Write

    Ack

    fe

    3

    PHY_CLK_CTRL

    Correct Write

    Start 7-bit Addr

    48

    Write

    Ack

    ff

     

    PHY_CLK_CTRL_STS

    We try to write to address, which is Read Only, so there is no ACK

    Start 7-bit Addr

    48

    Write

    Ack

    fe

     

    PHY_CLK_CTRL

    We try to write to address, which is NOT Read Only, but there is no ACK

    Start 7-bit Addr

    48

    Write

    Ack

    fe

    3

    PHY_CLK_CTRL

    Correct Write

     

    The last section (ff, fe and fe) is repeated many times – until the OS is started.

    So it looks like we have many unsuccessful write attempts.  I’m still analyzing it all – to see if this is something we should expect (at least the correct writes), and what’s the problem here – why we try to write to read-only registers.

    Also, maybe there are some communication problems, and the addresses should be different.

    Please, let me know if you know what can be wrong here.

    Thank you!

    Zack

  • My table was cut, so I'm posting its right side again:

    Register Name Comment
    USB_INT_LATCH We try to write to address, which is Read Only, so there is no ACK
    OTHER_INT_LATCH We try to write to address, which is Read Only, so there is no ACK
    CARKIT_INT_LATCH We try to write to address, which is Read Only, so there is no ACK
    CARKIT_SM_1_INT_LATCH We try to write to address, which is Read Only, so there is no ACK
    CARKIT_SM_2_INT_LATCH We try to write to address, which is Read Only, so there is no ACK
    REG_CTRL_ERROR We try to write to address, which is Read Only, so there is no ACK
    USB_INT_EN_FALL_CLR Correct Write
    USB_INT_EN_RISE_CLR Correct Write
    OTHER_INT_EN_RISE_CLR Correct Write
    OTHER_INT_EN_FALL_CLR Correct Write
    CARKIT_INT_EN_CLR Correct Write
    CARKIT_SM_1_INT_EN_CLR Correct Write
    CARKIT_SM_2_INT_EN_CLR Correct Write
    REG_CTRL_EN_CLR Correct Write
    PHY_CLK_CTRL_STS We try to write to address, which is Read Only, so there is no ACK
    PHY_CLK_CTRL We try to write to address, which is NOT Read Only, but there is no ACK (I don't know why it's not accepted)
    PHY_CLK_CTRL Correct Write
    PHY_CLK_CTRL_STS We try to write to address, which is Read Only, so there is no ACK
    PHY_CLK_CTRL We try to write to address, which is NOT Read Only, but there is no ACK
    PHY_CLK_CTRL Correct Write

     

    Best Regards,

    Zack

  • Here is an update on this issue:

    In data I’ve captured I can see some patterns, based on which I assume that we call the following functions: “InitializeInterrupts” (C:\WINCE600\PLATFORM\COMMON\SRC\SOC\COMMON_TI_V1\TPS659XX\DRIVER\tps659xx.cpp) and “HSUSBOTGTransceiverTps659xx::Configure()” (C:\WINCE600\PLATFORM\COMMON\SRC\SOC\COMMON_TI_V1\TPS659XX\USBOTG\ tps659xx_musb.cpp).

    'The data doesn’t match completely with code in these functions – some data is missing, and some reads were interpreted as writes (for all the read-only registers). 

    For the Configure function loop – we can see that reading from the I2C is not successful, because they are interpreted by chip as writes. That’s why it continues – probably 500 times.

    Anyway, we can see that the I2C data is not being transmitted correctly.  I need to measure the signals again, and put more attention to capturing the analog signals this time.

     

    Best Regards,

    Zack

  • Here is my update on this issue:

     

    1. It turned out that I misinterpreted the I2C data I’ve captured.  Our analyzer showed it in a different way than I expected, and after analyzing the signal – bit after bit – it looks like the I2C signal is correct.  It matches with the code.
    2. We’ve had two hardware issues.  I found them after comparing our schematics with schematics of the Beagle board.  Our hardware guys have corrected them, and after that there is some improvement (but it still doesn’t fully work).

     

    So, after the hardware modifications, our debug output looks like this:

     

      29852 PID:400002 TID:e50002 HSUSBOTGTransceiver get called

      29853 PID:400002 TID:e50002 +TWL_FUNC_CTRL=0x49

      29853 PID:400002 TID:e50002 +TWL_IFC_CTRL=0x18

      29853 PID:400002 TID:e50002 +TWL_OTG_CTRL=0x6

      29853 PID:400002 TID:e50002 +TWL_OTHER_FUNC_CTRL=0x0

      29853 PID:400002 TID:e50002 +TWL_OTHER_INT_STS=0x22

      29854 PID:400002 TID:e50002 +TWL_PHY_PWR_CTRL=0x0

      29854 PID:400002 TID:e50002 +TWL_PHY_CLK_CTRL=0x2

      29854 PID:400002 TID:e50002 +TWL_VUSB3V1_REMAP=0xee

      29854 PID:400002 TID:e50002 +TWL_VUSB1V5_REMAP=0xee

      29854 PID:400002 TID:e50002 +TWL_VUSB1V8_REMAP=0xee

      29854 PID:400002 TID:e50002 HSUSBOTGTransceiver: CARKIT_Reg(0x0), IFC_CTRL_Reg(0x18)

      29855 PID:400002 TID:e50002 HSUSBOTGTransceiver: TWL_USB_INT_EN_RISE(0x0), TWL_USB_INT_EN_FALL(0x0)

      29855 PID:400002 TID:e50002 HSUSBOTGTransceiver: CARKIT_Reg(0x0), IFC_CTRL_Reg(0x18)

      29856 PID:400002 TID:e50002 HSUSBOTGTransceiver: TWL_USB_INT_EN_RISE(0x1f), TWL_USB_INT_EN_FALL(0x1f)

      29856 PID:400002 TID:e50002 HSUSBOTGTransceiver:Configure success

      29875 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

      29875 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

      29876 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

      29876 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

      29876 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

      29876 PID:400002 TID:e50002 IsSE0 called with line state = 0x0

      29883 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

      29898 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

      29911 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

      29911 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

      29912 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

      29912 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

      29912 PID:400002 TID:e50002 IsSE0 called with line state = 0x0

      29913 PID:400002 TID:e50002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

      39361 PID:400002 TID:4850002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

      39363 PID:400002 TID:4850002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

      39364 PID:400002 TID:4850002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

      39364 PID:400002 TID:4850002 IsSE0 called with line state = 0x1

      39365 PID:400002 TID:4850002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

      39365 PID:400002 TID:4850002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

      39365 PID:400002 TID:4850002 +TWL_FUNC_CTRL=0x41

      39366 PID:400002 TID:4850002 +TWL_IFC_CTRL=0x18

      39366 PID:400002 TID:4850002 +TWL_OTG_CTRL=0x7

      39366 PID:400002 TID:4850002 +TWL_OTHER_FUNC_CTRL=0x0

      39366 PID:400002 TID:4850002 +TWL_OTHER_INT_STS=0x82

      39366 PID:400002 TID:4850002 +TWL_PHY_PWR_CTRL=0x0

      39366 PID:400002 TID:4850002 +TWL_PHY_CLK_CTRL=0x2

      39367 PID:400002 TID:4850002 +TWL_VUSB3V1_REMAP=0xee

      39367 PID:400002 TID:4850002 +TWL_VUSB1V5_REMAP=0xee

      39367 PID:400002 TID:4850002 +TWL_VUSB1V8_REMAP=0xee

      39418 PID:400002 TID:44a0002 DriverShell: DllEntry

      39419 PID:400002 TID:4900002 HSUSBOTGTransceiverTriton2::AconnNotifHandle (0x4920003)

     

    And the ULPI registers:

     

     538923 PID:400002 TID:7de000a TPS659XX ULPI Register

     538923 PID:400002 TID:7de000a    ULPI_VID=(51,4)

     538923 PID:400002 TID:7de000a    ULPI_PID=(2,c0)

     538923 PID:400002 TID:7de000a    Function Control=45

     538924 PID:400002 TID:7de000a    Interface Control=18

     538924 PID:400002 TID:7de000a    OTG Control(26)=7de000b

     538924 PID:400002 TID:7de000a    Interrupt Enable rising=1f

     538924 PID:400002 TID:7de000a    Interrupt Enable Falling=1f

     538924 PID:400002 TID:7de000a    Interrupt Status=7

     538924 PID:400002 TID:7de000a    Interrupt Latch=7

     538925 PID:400002 TID:7de000a    Debug=4

     538925 PID:400002 TID:7de000a    Scratch=0

     538925 PID:400002 TID:7de000a    Power=20

     

    But the devices are still not enumerated.

    Here is what we can see on the USB OTG after connection of a single device.  It is very similar for any types of the devices (in this case this is an USB SD card reader).

     

    # Index

    m:s.ms.us.ns

    Dur

    Len

    Err

    Dev

    Ep

    Level

    Record

    Data

    0

    0:00.000.000.000

     

     

     

     

     

    0

    Capture started

    [06/07/2011 11:48:58]

    1

    0:00.000.000.150

     

     

     

     

     

    0

    Bus event

    <Host disconnected>

    2

    0:02.274.974.966

     

     

     

     

     

    0

    Bus event

    <Host connected>

    3

    0:02.280.500.516

    49.933 us

     

     

     

     

    0

    Bus event

    <Reset> / <Chirp J> / <Tiny J>

    4

    0:02.280.550.450

    19.066 us

     

     

     

     

    0

    Bus event

    <Reset> / <Target disconnected>

    5

    0:02.280.569.516

    48.964.916 ms

     

     

     

     

    0

    Bus event

    <Reset> / <Chirp K> / <Tiny K>

    6

    0:02.329.534.433

     

     

     

     

     

    0

    Bus event

    <Full-speed>

    7

    0:02.332.534.433

    411.239.433 ms

     

    T

     

     

    0

    Bus event

    <Suspend>

    8

    0:03.843.436.033

    1.320.583 ms

     

     

     

     

    0

    Bus event

    <Reset> / <Chirp J> / <Tiny J>

    9

    0:03.844.756.616

    39.283 us

     

     

     

     

    0

    Bus event

    <Reset> / <Chirp K> / <Tiny K>

    10

    0:03.844.795.900

     

     

     

     

     

    0

    Bus event

    <Low-speed>

    11

    0:03.846.813.683

     

     

    U

     

     

    0

    Bus event

    <Full-speed>

    12

    0:03.847.174.850

    616 ns

     

     

     

     

    0

    Bus event

    <Reset> / <Target disconnected>

    13

    0:03.847.175.466

    164.720.000 ms

     

    T

     

     

    0

    Bus event

    <Reset> / <Chirp J> / <Tiny J>

    14

    0:05.547.370.450

     

     

     

     

     

    0

    Bus event

    <Full-speed>

    15

    0:05.550.370.450

    411.221.016 ms

     

    T

     

     

    0

    Bus event

    <Suspend>

    16

    0:06.609.774.633

    1.403.733 ms

     

     

     

     

    0

    Bus event

    <Reset> / <Target disconnected>

    17

    0:06.611.178.366

    2.055.116 ms

     

     

     

     

    0

    <Chirp K>

     

    18

    0:06.613.233.483

    17.152.333 ms

     

     

     

     

    0

    Bus event

    <Reset> / <Target disconnected>

    19

    0:06.630.385.816

     

     

     

     

     

    0

    Bus event

    <Full-speed>

    20

    0:06.633.385.816

    411.734.183 ms

     

    T

     

     

    0

    Bus event

    <Suspend>

    21

    0:24.554.154.666

     

     

     

     

     

    0

    Capture stopped

    [06/07/2011 11:49:23]

     

     

    Please, let me know if you have any ideas.

    Thanks a lot!

     

    Best Regards,

    Zack

     

     

  • These registers in xrcvr look fine - can you enable traces in OTG driver to see what is happening? Seems like xrcvr is indicating interrupts but nothing is happening. Also pl. make sure USB OTG pads are configured properly in your BSP.

    One other suggestion is to try TI BSP (after recompiling it for TPS Phy) and comparing your traces against what you get on EVM. I am not sure whether or not enumeration will work all the way but at least it may point us in the right direction

     

    thanks

    Atul

  • Hi Atul,

     

    Thank you for your response.  First, I’d like to provide you some status update.  I am able to use a Low Speed devices (mouse or keyboard) using the USB OTG port, however… only on startup of the OS.  When I unplug the device, and plug it back in, it is not enumerated.  When I unplug it, all the uninitialization (see the debug output below) is done, however, when I plug it back in – there is no event, and device is not detected.

     

    Also, none of the faster devices are detected, even on startup of the OS.

     

    This is what I can see in the debug output window after unplugging the working LS device (mouse):

     

     145369 PID:400002 TID:4740002 OTG Interrupts(0x28) intr_tx(0x0) intr_rx(0x0)

     145369 PID:400002 TID:4740002 Interrupt Variable INTRUSB(0x28) Devctl(0x19)

     145369 PID:400002 TID:4740002 Interrupt Variable INTRUSB(0x28), TX(0x0), RX(0x0), DevCtl(0x19), m_dwStatus(0x0)

     145369 PID:400002 TID:4740002 OMAPMHSUSBOTG::OTG_ConfigISR_stage2

     145369 PID:400002 TID:4740002 Host disconnect detected

     145369 PID:400002 TID:4740002 Disconnect detected

     145369 PID:400002 TID:4740002 ResetEndPoints

     145369 PID:400002 TID:4f60002 CRootHub::WaitForPortStatusChange::NoOfPort(0x1)

     145369 PID:400002 TID:4f60002 CHW::DidPortStatusChange for port 1

     145369 PID:400002 TID:4f60002 CHW::B4 Power = 0x60

     145369 PID:400002 TID:4f60002 ResetAndEnablePort(1)

     145369 PID:400002 TID:4740002 Host_Disconnect

     145369 PID:400002 TID:4740002 Session Request(0, 0)

     145369 PID:400002 TID:4740002 SoftResetMUSBController

     145369 PID:400002 TID:4740002 ***###StartUSBClock:  EnableWakeupInterrupt(FALSE)

     145369 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (0)

     145369 PID:400002 TID:4740002 +StartUSBClock

     145369 PID:400002 TID:4740002 -StartUSBClock

     145378 PID:400002 TID:4740002 ResetEndPoints

     145431 PID:400002 TID:4f60002 CHW::DidPortStatusChange: After reset

     145431 PID:400002 TID:4f60002 CHW::Power = 0x30

     145431 PID:400002 TID:4f60002 CHW::DevCtl = 0x98

     145431 PID:400002 TID:4f60002 CHW::PortSpeed = HS

     145431 PID:400002 TID:4f60002 Connect Status = 0x2

     145431 PID:400002 TID:4f60002 +CRootHub::GetStatus - port = 1

     145431 PID:400002 TID:4f60002 MUSB: -CRootHub::GetStatus - port = 1, returing BOOL 1

     145431 PID:400002 TID:4f60002 GetStatus return 1

     145431 PID:400002 TID:4f60002 MUSB: +CRootHub::SetOrClearFeature - port = 1, set/clear = 0x1, feature = 0x10

     145431 PID:400002 TID:4f60002 SetOrClearFeature(0x1), feature(0x10), port(1)

     145431 PID:400002 TID:4f60002 CLEAR: USB_HUB_FEATURE_C_PORT_CONNECTION

     145431 PID:400002 TID:4f60002 MUSB: CRootHub::SetOrClearFeature - port = 1, set/clear = 0x1, feature = 0x10, FAILED

     145431 PID:400002 TID:4f60002 -CRootHub::SetOrClearFeature - port = 1, set/clear = 0x1, feature = 0x10, returing BOOL 1

     145431 PID:400002 TID:4f60002 MUSB: -CRootHub::WaitForPortStatusChange, rPort = 1, fSuccess = 1

     145431 PID:400002 TID:4f60002 MUSB: CHub(Root tier 0)::HubStatusChangeThread - port 1, change = 0x0001, status = 0x0502

     145432 PID:400002 TID:4f60002 MUSB: CHub(Root tier 0)::HubStatusChangeThread - device detached on port 1

     145432 PID:400002 TID:4f60002 MUSB: +CHub(Root tier 0)::DetachDevice - port = 1

     145440 PID:400002 TID:4f60002 MUSB: CHub(Root tier 0)::DetachDevice - reading NULL device detached on port 1, doing nothing.

     145441 PID:400002 TID:4f60002 MUSB: CHub(Root tier 0)::DetachDevice - created worker thread to handle device detach

     145442 PID:400002 TID:36100a2 MUSB: +CHub::DetachDownstreamDeviceThread

     145442 PID:400002 TID:36100a2 MUSB: +CFunction(tier 1)::HandleDetach

     145442 PID:400002 TID:36100a2 HandleDetach close pipe 0

     145442 PID:400002 TID:36100a2 RemoveFromBusyPipeList found the device

     145442 PID:400002 TID:36100a2 RemoveBusyPipeList for EP 0  -clear

     145442 PID:400002 TID:36100a2 RemoveBusyPipeList clean EP 0

     145442 PID:400002 TID:4ed0002 CBusyPipeL ist::Total no of event = 3

     145442 PID:400002 TID:36100a2 Warning! Not able to find EP 0,DevAddr 1

     145442 PID:400002 TID:36100a2 RemoveBusyPipeList for EP 0  -clear

     145443 PID:400002 TID:36100a2 RemoveBusyPipeList clean EP 0

     145443 PID:400002 TID:4ed0002 CBusyPipeL ist::Total no of event = 3

     145443 PID:400002 TID:36100a2 HandleDetach close pipe 1

     145443 PID:400002 TID:36100a2 ReleasePhysicalEndPoint for EP 0x81 Device 0x1 -> Mapped 1 [IN]

     145443 PID:400002 TID:36100a2 RemoveFromBusyPipeList: Release all

     145443 PID:400002 TID:4ed0002 CBusyPipeL ist::Total no of event = 1

     145442 PID:400002 TID:4f60002 MUSB: +CRootHub::DisablePort - port = 1

     145446 PID:400002 TID:36100a2 GetCurrentToggle bit for mapped EP 15 (IN) = DataToggle (0x0)

     145472 PID:400002 TID:36100a2 AbortQueue

     145443 PID:400002 TID:4f60002 MUSB: -CRootHub::DisablePort - port = 1

     145478 PID:400002 TID:36100a2 GetCurrentToggle bit for mapped EP 15 (IN) = DataToggle (0x0)

     145503 PID:400002 TID:36100a2 RemoveFromBusyPipeList: Release all

     145503 PID:400002 TID:4ed0002 CBusyPipeL ist::Total no of event = 1

     145503 PID:400002 TID:36100a2 +CHub(Root tier 0)::ClosePipe - address = 1, pipeIndex = 0

     145503 PID:400002 TID:36100a2 MUSB: -CHub(Root tier 0)::ClosePipe - address = 1, pipeIndex = 0, returing HCD_REQUEST_STATUS 2

     145503 PID:400002 TID:36100a2 +CHub(Root tier 0)::ClosePipe - address = 1, pipeIndex = 1

     145504 PID:400002 TID:36100a2 MUSB: -CHub(Root tier 0)::ClosePipe - address = 1, pipeIndex = 1, returing HCD_REQUEST_STATUS 2

     145472 PID:400002 TID:4f60002 MUSB: -CHub(Root tier 0)::DetachDevice - port = 1

     145479 PID:400002 TID:4740002 ResetEndPoints

     145515 PID:400002 TID:4740002 Disconnect with Sess = 0x98

     145515 PID:400002 TID:4740002 Disconnect with Pwr = 0x70

     145515 PID:400002 TID:4740002 Disconnect with connect_status=0x0

     145531 PID:400002 TID:36100a2 MUSB: -CFunction(tier 1)::HandleDetach

     145531 PID:400002 TID:36100a2 MUSB: +CFunction(tier 1)::~CFunction

     145531 PID:400002 TID:36100a2 MUSB: -CFunction(tier 1)::~CFunction

     145531 PID:400002 TID:36100a2 MUSB: +CDevice::~CDevice

     145531 PID:400002 TID:36100a2 MUSB: +CDevice::DeleteUsbConfigurationStructure

     145531 PID:400002 TID:36100a2 MUSB: -CDevice::DeleteUsbConfigurationStructure

     145531 PID:400002 TID:36100a2 MUSB: +CDeviceGlobal::FreeAddress - address = 1

     145531 PID:400002 TID:36100a2 MUSB: -CDevice::FreeAddress - address = 1

     145531 PID:400002 TID:36100a2 MUSB: -CDevice::~CDevice

     145531 PID:400002 TID:36100a2 MUSB: -CHub::DetachDownstreamDeviceThread

     145605 PID:400002 TID:4f60002 +CRootHub::GetStatus - port = 1

     145605 PID:400002 TID:4f60002 MUSB: -CRootHub::GetStatus - port = 1, returing BOOL 1

     145605 PID:400002 TID:4f60002 CHub::ResetAndEnablePort

     145605 PID:400002 TID:4f60002 +CRootHub::WaitForPortStatusChange

     146106 PID:400002 TID:4f60002 RootHUB:NoOfPort = 1

     146106 PID:400002 TID:4f60002 RootHUB:Port[0] = 0x0

     146106 PID:400002 TID:4f60002 Signal Disconnect Complete

     146106 PID:400002 TID:4740002 OTG Interrupts(0x0) intr_tx(0x0) intr_rx(0x0)

     146106 PID:400002 TID:4740002 Interrupt Variable INTRUSB(0x0) Devctl(0x98)

     146106 PID:400002 TID:4740002 Interrupt Variable INTRUSB No interrupt at all

     146106 PID:400002 TID:4740002 Interrupt Variable INTRUSB(0x0), TX(0x0), RX(0x0), DevCtl(0x98), m_dwStatus(0x0)

     147107 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     147107 PID:400002 TID:4740002 StopUSBClock with operateMode=0, m_dwStatus=0x0

     147107 PID:400002 TID:4740002 +(m_dwStatus & STATUS_WAIT_HOST_DISCONN_COMPLETE) == 0x00

     147107 PID:400002 TID:4740002 ResetEndPoints

     147108 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     150124 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     150124 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     154142 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     154142 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     157159 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     157159 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     160176 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     160176 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     163193 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     163193 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     166210 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     166210 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     169227 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     169227 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     172244 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     172244 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     175261 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     175261 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     178278 PID:400002 TID:4740002 HSUSBOTGTransceiverTriton2::EnableWakeupInterrupt (1)

     178278 PID:400002 TID:4740002 HSUSBOTGTransceiver::IsADeviceConnected : TRUE

     

    Plugging mouse back in doesn’t give any output.

     

    The above debug output was generated after build BSP with KITL and defining DEBUGMSG as RETAILMSG in the following files:

     

    C:\WINCE600\PLATFORM\COMMON\SRC\SOC\COMMON_TI_V1\OMAP3530\MUSB\MUSBHCD\MUSBMHDRC\chw.cpp

    C:\WINCE600\PLATFORM\COMMON\SRC\SOC\COMMON_TI_V1\OMAP3530\MUSB\MUSBHCD\USB2COM\cdevice.cpp

    C:\WINCE600\PLATFORM\COMMON\SRC\SOC\COMMON_TI_V1\OMAP3530\MUSB\MUSBOTG\otg.cpp

    C:\WINCE600\PLATFORM\COMMON\SRC\SOC\COMMON_TI_V1\TPS659XX\USBOTG\tps659xx_musb.cpp

     

    Also, I’ve tried both approaches:

     

    1. To have the ID pin permanently grounded,
    2. Use the USB plug with grounded ID pin.

    Nothing helped – I still have popping up information that the A device is connected.

     

    Please, let me know if you have any idea what can be wrong here.  I can put some additional debug traces in some places and see if the registers of the TPS chipset are updated after inserting the USB device.  Could you point me to the best place to check that?

    Also, do you know why any faster devices are not enumerated at all?

     

    The EVM board uses a different driver – the ISP one, but there is also common code, so I can compare the traces too.

     

    Thanks a lot!

    Zack

  • When you connect FS/HS devices, do you see any trace in driver / phy? If not, I would recommend checking your schematics/hardware - especially the pulldown resistors on D+/D- lines.

    Regarding reconnect issue, it will be helpful to compare your traces against EVM. You can also recompile TI BSP to use TPS Phy instead of ISP and record traces.

     

    thanks

    Atul

  • Hello Zack,

     

    How did this turn out?  Were you able to discover the root cause?  Was it hardware or software?

  • Hello Dave,

    No, this is still an open issue.  Because of changes in my priorities right now this task is on hold.  We use only the EHCI USB port for now.  I should return to this later this year.

    So I don't have any news for you, sorry.

    Best regards,

    Zack

  • Hi Atul,

    I'm working on this task again.

    You were right - changing the pulldown resistors on D+ and D- helped - (the internal ones) I can connect the FS devices to this USB port now (thank you!), however I still cannot reconnect.

    For the FS devices - only the FS devices are enumerated now. HS and LS are not working. But I think this is OK for now, since in our case the targeted device on this port is the FS one.

    The reconnection issue is more important.

    I'll let you know if I have any progress on that.

    Thank you,

    Zack

     

  • hi, Zack, i meet the same problem on TPS65930 OTG module, have you resolved it?

    linux can only recongnize USB peripheral device when i first plug. and when i plug again, linux can not detect it and VBUS has not power

  • Hi Alex,

    No, it's still in the same state. I didn't have a chance to work on that again. In our case this is not that critical - that device is connected to the USB OTG port permanently - we don't expect reconnection in the real life.

    Anyway, it would be good to solve this problem, but this is not a high priority for now.

    So, no good news, sorry.

    Good luck.!

    Zack

  • hi Zack,

    This problem still here? Maybe the following link can help you to resolve it:

    http://arago-project.org/git/projects/?p=linux-omap3.git;a=commitdiff;h=20c003f2f024d9f50f59edf9f1b8f5f035fb15b8;hp=4d640ae8cb8bb3a51675208caaf45142e7348b08