Problems with usb 2.0 hosts
Problems with usb 2.0 hosts
Hi. I have built device on Mega32. It's work fine on old machines with USB 1.1 controller . But on new machines with USB 2.0 controller, WinXP says "usb device not recognized". My device powered from 3.3 V source (i have same result with Vcc from 3.0 to 3.6 Volts). I've used 68 ohm resistors on D- and D+ lines, and don't used 3.6v zeners diodes.
Can anybody help me?
Can anybody help me?
Do you have a scope (storage scope would be ideal) to check the wave forms and levels on D+ and D-?
Yes, i have simple scope. I check waveforms on D+ and D-, it's looks different. On usb 1.1 machine waveforms have visually ideal fronts, and on usb 2.0 machine fronts are more longer. Levels in both cases approximately identical.
Yes, i have simple scope. I check waveforms on D+ and D-, it's looks different. On usb 1.1 machine waveforms have visually ideal fronts, and on usb 2.0 machine fronts are more longer. Levels in both cases approximately identical.
I doubt that it's the cable -- this is low speed USB anyway.
You must be violating the USB standard somehow. USB 2.0 controllers are more modern and may therefore enforce better standards compliance.
I can assure you that the driver itself is good enough for compatibility with all host controllers and hubs we have heard about so far.
You must be violating the USB standard somehow. USB 2.0 controllers are more modern and may therefore enforce better standards compliance.
I can assure you that the driver itself is good enough for compatibility with all host controllers and hubs we have heard about so far.
You should call usbPoll() at least every 50 ms (see documentation in usbdrv.h). You may get away with longer intervals after the device enumeration is completed, though.
If you call usbPoll() from other places than the main loop, you should be aware that usbFunctionSetup(), usbFunctionRead() and usbFunctionWrite() are called from usbPoll(). If such a long running function is called by (e.g.) usbFunctionSetup(), you may get recursions which are hard to control.
You may also get undesired effects if usbPoll() calls any of your usb*() functions, thereby modifying global variables. The long running function may not expect this side effect.
If you call usbPoll() from other places than the main loop, you should be aware that usbFunctionSetup(), usbFunctionRead() and usbFunctionWrite() are called from usbPoll(). If such a long running function is called by (e.g.) usbFunctionSetup(), you may get recursions which are hard to control.
You may also get undesired effects if usbPoll() calls any of your usb*() functions, thereby modifying global variables. The long running function may not expect this side effect.