I have to test how a High speed USB device behaves when it runs at Full speed.
As High speed runs at 480 MHz and Full speed at 12 MHz I thought this would be easy with a "low pass filter" that does not allow the high frequencies to pass and so the host would automatically negociate a slower speed with the device.
I opened a USB cable and soldered a capacitor between Data+ and Data- like that:
But although I tried several values for the capacitor it did not work.
When I connect 3.3pF, 6.8pF or 12pF the device will work with High speed. How did I prove that? I connect a USB stick and transfer a big file. The transfer speed is 20 Megabyte/s which is too fast for Full speed.
When I increase the capacitor to 15pF or more I suddenly see the device working with Low speed (1.5MHz) or even failing completely (device enumeration failed)
I tried this on two different computers. The mainboard has USB2.0 hubs and USB3.0 hubs. No difference in bahaviour. I tried on Windows XP and Windows 7.
There is no way get Full speed. Either High speed or Low speed or nothing.
Can anybody explain me that? How do I force the device to run at Full speed?
UPDATE: 9 month after asking this question (and being more expert in USB stuff), I know today that USB does not have a fall-back mechanism. If a high speed device does not respond as expected the device enumeration will simply fail. The computer does not try to communicate with a high speed device in full speed after a high speed negociation has failed and neither does the device fall back to full speed mode. The only way to force full speed is to use a full speed hub (USB 1.1), which are very difficult to find nowadays.