Hi All,
I'm developing USB host function for USB high speed devices. I have a trouble of recognizing USB speed. LPC4330 recognize some high speed device as low speed devices. I'd appreciate if somebody could advice me.
Environment) H/W: LPC4330 Explore Board
SW: lpcopen_3_01_lpcxpresso_ngx_xplorer_4330
Problem) Some high speed device is recognized low speed device. Some device can be recognized as high speed device correctly. It's depends on device model. Not depends on timing nor individual
I checked PORTSC1_H register when port status change occurs.(Device Connect)
(A)The high speed device correctly recognized, PORTSC1_H value is 0x30001803.
PSPD(b27:26) = 00 Full Speed
LS(b11:10)= 10: Not Low Speed
(B)The high speed device recognized as Low speed, PORTSC1_H value is 0x34001803
PSPD(b27:26) = 01 Low Speed
LS(b11:10)= 10: Not Low Speed
In (A) case, after bus reset, device chirp and hub chirp occurs and the device becomes High speed device.
In (B) case, after bus reset, device chirp occurs but hub chirp doesn't occur, the device remain low speed device.
Yasushi Aoyama
Hi Carlos,
Thanks for your advice. Finally I found another solution. What I did was,
at the interrupt routine of "detect device connection", I forced to the port "High Speed" by PORT_SC1H "force High Speed test mode" then return to "Normal mode" by resetting the bit.
This workaround was not perfect. Sometime the device was configured to "Low Speed", so I added retry.
I found it worked well.
The device needs 500mA, I guess it needs time to be stable from power on, but the USB controller would try to get the status of the device before the device become stable. If so this problem could happen in other big current eater devices.
I know more general and smarter way is to use USB hub, but this time I need to adapt only the device, so I din't use hub solution.
Thank you
Yasushi Aoyama
Hi Yasushi Aoyama,
Which LPCOpen example are you using? I see you mention that you are using a HUB, is it the same problem if you remove the hub and connect the USB device directly to the host?
Have you tried using a USB analyzer to log the information and see if the Device is the one failing or is it is the Host?
Best Regards,
Carlos Mendoza
Technical Support Engineer