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.

MUSB otg port intermitted problem

Other Parts Discussed in Thread: TWL6032

Hi

I have this strange intermitted problem: 

After a correct enumeration of the device we have a sequence of:

<7>[ 15.007537] musb-hdrc musb-hdrc: <== Power=e0, DevCtl=19, int_usb=0x28
<7>[ 15.007598] musb-hdrc musb-hdrc: DISCONNECT (a_host) as Host, devctl 19
<7>[ 15.127655] musb-hdrc musb-hdrc: ** IRQ host usb0010 tx0000 rx0000
<7>[ 15.127685] musb-hdrc musb-hdrc: <== Power=e0, DevCtl=5d, int_usb=0x10
<7>[ 15.127746] musb-hdrc musb-hdrc: CONNECT (a_host) devctl 5d
<7>[ 15.244018] musb-hdrc musb-hdrc: ** IRQ peripheral usb0020 tx0000 rx0000
<7>[ 15.244049] musb-hdrc musb-hdrc: <== Power=e0, DevCtl=19, int_usb=0x20
<7>[ 15.244079] musb-hdrc musb-hdrc: DISCONNECT (a_host) as Host, devctl 19
<7>[ 15.378234] musb-hdrc musb-hdrc: ** IRQ host usb0010 tx0000 rx0000
<7>[ 15.378265] musb-hdrc musb-hdrc: <== Power=e0, DevCtl=5d, int_usb=0x10
<7>[ 15.378326] musb-hdrc musb-hdrc: CONNECT (a_host) devctl 5d
<7>[ 15.479400] musb-hdrc musb-hdrc: ** IRQ peripheral usb0020 tx0000 rx0000
<7>[ 15.479431] musb-hdrc musb-hdrc: <== Power=e0, DevCtl=19, int_usb=0x20
<7>[ 15.479461] musb-hdrc musb-hdrc: DISCONNECT (a_host) as Host, devctl 19
<7>[ 15.687469] musb-hdrc musb-hdrc: ** IRQ host usb0010 tx0000 rx0000
<7>[ 15.687499] musb-hdrc musb-hdrc: <== Power=e0, DevCtl=5d, int_usb=0x10
<7>[ 15.687561] musb-hdrc musb-hdrc: CONNECT (a_host) devctl 5d
<7>[ 15.714782] musb-hdrc musb-hdrc: ** IRQ peripheral usb0020 tx0000 rx0000
<7>[ 15.714813] musb-hdrc musb-hdrc: <== Power=e0, DevCtl=19, int_usb=0x20
<7>[ 15.714843] musb-hdrc musb-hdrc: DISCONNECT (a_host) as Host, devctl 19
<7>[ 15.848999] musb-hdrc musb-hdrc: ** IRQ host usb0010 tx0000 rx0000
<7>[ 15.849060] musb-hdrc musb-hdrc: <== Power=e0, DevCtl=5d, int_usb=0x10
<7>[ 15.849090] musb-hdrc musb-hdrc: CONNECT (a_host) devctl 5d
<7>[ 15.950164] musb-hdrc musb-hdrc: ** IRQ peripheral usb0020 tx0000 rx0000
<7>[ 15.950195] musb-hdrc musb-hdrc: <== Power=e0, DevCtl=19, int_usb=0x20
<7>[ 15.950225] musb-hdrc musb-hdrc: DISCONNECT (a_host) as Host, devctl 19

Sometime the peripheral after that stop to answer to the fist control message. I have seen that this sequence can happen even accros a transfer.

Michael

  • Hi Michael,

    Is this a random behaviour or is there some pattern, whith which the issue can be reproduced?
    What is the development platform you use? What OS do you use?

    Best Regards,
    Yordan
  • Hi

    Android ICS 4.03
    Kernel from omapzoom. Platform omap4460

    Have you ever seen?

    Michael
  • Hi Michael,

    I haven't encountered such issue...
    Have you done any modifications to the kernel?
    These messages are printed by irqreturn_t musb_stage0_irq() in musb_core.c driver.
    Can you provide ponters how to reproduce this, so I can try it on Blaze board or Pandaboard? Or is it a random issue (nothing needs to be done bu user, kernel just prints those messages)?

    Best Regards,
    Yordan
  • Hi,

    this happen after enumeration. The peripheral is correctly enumerated and then after a while during boot I have this strange ping pong of connection and disconnection. Seems that SOF are confused as disconnection but this happen time to time. Let me say 1 every 30 reboots. I have tried for a day to have the same result with Logical Analyzer and scope connected on vbus and power voltage without any result. This is a thermal printer with external voltage and 3.3v on the logic. The pmic is twl6032 and from what I understand disconnection in omap4 is only detected using D+ and D- correct? ID pin is always grounded
  • Hi

    I have debugged better and able to replicate.

    I have dump the twl6032 good and bad and look the same in programming and even the otg phy is ok and in host mode. The id is reported as grounded. What happen is that even I power cycle the peripheral the D+ e D- remain in low mode even they should be drive by the device for let it to be detected. There are no change on OTG driver and it boot already with the pin grounded. What could be the reason of this connection/disconnection? Noise on vbus or D+ and D- noise. What we have is the gsm that sometime can tx on gsm and this draw up 1.6A. All the other usb and other peripheral has no problem on this but seems that OTG for some reason go in invalid state
  • Hi

    I have found the reason. It happen from RF gsm interference during boot, so I have implemented a BABBLE recover routine for omap4. In order to make it robust and due the fact that I can not change the recover is applied when user space is unable to communicate with the device and when I detect the BABBLE condition from interrupt. In order to recover I simulate a phy disconnect and a phy disconnected using the otg tranceiver and this let the omap4 to move from device mode and back to host mode. I'm going to tune better it in order to have fast recover time

  • Is it possible to increase the OTG power domain voltage or increase the strength of D+ and D- to have less impact from the radio?