Hi djhoop,
Thanks for your reply above. I used the TUSB2046B on my previous design with no problems, on this design because the i.MX28 supports high speed USB I moved to the USB2513B from SMSC.
I only seem to have issues with memory sticks and other high-speed connections seem to be fine. I will analyse the power up / reset and see if this is an issue. I remember having to add an external reset supervisor to my TUSB2046B design but I do no have this on the SMSC variant. I am using Windows CE and it is notorious for having poor memory stick support.
I managed to get the test packet to output from the i.MX28 - you need to shut down the controller first. I added this code to hwinit.c and then called it from an IOCTL added to the system.c file in the HCD driver:
void BSPSetTestMode(void)
{
// Access the USB Control Register
volatile DWORD *temp;
// USB_CTRL_T ctrl;
USB_PORTSC_T portsc;
USB_USBCMD_T cmd;
CSP_USB_REG *pReg;
pReg = (PCSP_USB_REG)(&(gRegs->H1));
// Stop the controller first
{
temp = (DWORD *)&cmd;
*temp = INREG32(&pReg->USBCMD);
cmd.RS = 0;
OUTREG32(&pReg->USBCMD, *temp);
while ((INREG32(&pReg->USBCMD) & 0x1) == 0x1){
Sleep(100);
}
}
// Send out the test packet
temp = (DWORD *)&portsc;
*temp = INREG32(&pReg->PORTSC[0]);
portsc.PTC = 4;
OUTREG32(&pReg->PORTSC[0], *temp);
RETAILMSG(1,(_T("USB Test Packet Enabled\r\n")));
return;
}
From this I was able to use the USB compliance testing package on a scope we have hired and the signal integrity looks great on the eye diagrams. So I don't think it is a high speed signal integrity issue.
I will keep looking... In the mean time if I limit the i.MX28 to full-speed mode only it all works!
Mark