AnsweredAssumed Answered

iMX51 with USB331x ULPI PHY help

Question asked by belgianwaffle on Oct 31, 2016
Latest reply on Nov 3, 2016 by belgianwaffle

Hi, we're having some recent issues recognizing a particular PNY thumbdrive.

We've been using PNY thumbdrives for 3+ years without issues, but they recently changed the controller and they no longer work with our product that has the iMX51 and USB3315 ULPI PHY combo.

The thing is that the thumbdrives work with everything else that we plug them into including our other products (iMX53, PowerPC, Windows, Linux, etc.). We've tried 10 other thumbdrive manufacturers with this combo and they all work. If we plug in a hub first and then this drive to our product then it also works.

It's something about our system that's making us fall on our face with this particular PNY drive.

Basically, there's no chirp from the host after the initial chirp from the device. Scopeshot attached.

We have to fix it, as there's no reason this drive shouldn't work. We've been trying to fix it for 4 weeks now.


I think the hardware team has tried everything from their end. From the software side, we see the issue with Linux 2.6 and 3.14. dts and non-dts. Using the generic phy driver usb-nop-xceiv. I have also tried setting the ulpi registers via viewport to what the phy-ulpi driver sets them to, but no cigar. Those are highlighted in green.

/* * Register Map */

#define ULPI_VENDOR_ID_LOW       0x00

#define ULPI_VENDOR_ID_HIGH      0x01

#define ULPI_PRODUCT_ID_LOW      0x02

#define ULPI_PRODUCT_ID_HIGH     0x03

#define ULPI_FUNC_CTRL           0x04

#define ULPI_IFC_CTRL            0x07

#define ULPI_OTG_CTRL            0x0a

#define ULPI_USB_INT_EN_RISE     0x0d

#define ULPI_USB_INT_EN_FALL     0x10

#define ULPI_USB_INT_STS         0x13

#define ULPI_USB_INT_LATCH       0x14

#define ULPI_DEBUG               0x15

#define ULPI_SCRATCH             0x16

/* Optional Carkit Registers */

#define ULPI_CARCIT_CTRL         0x19

#define ULPI_CARCIT_INT_DELAY    0x1c

#define ULPI_CARCIT_INT_EN       0x1d

#define ULPI_CARCIT_INT_STS      0x20

#define ULPI_CARCIT_INT_LATCH    0x21

#define ULPI_CARCIT_PLS_CTRL     0x22

/* Other Optional Registers */

#define ULPI_TX_POS_WIDTH        0x25

#define ULPI_TX_NEG_WIDTH        0x26


/* Access Extended Register Set */

#define ULPI_ACCESS_EXTENDED     0x2f

/* Vendor Specific */

#define ULPI_VENDOR_SPECIFIC     0x30

/* Extended Registers */


Can anyone recommend any other registers to poke, specifically the ones highlighted in yellow. I'm having a hard time finding examples of drivers poking those registers.


If we're on the wrong path please let me know. ANY recommendations will be highly appreciated.