7
\$\begingroup\$

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: enter image description here

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.

\$\endgroup\$
10
  • 6
    \$\begingroup\$ Software. Just tell your USB host controller to only provide full speed. It's just a driver setting. \$\endgroup\$ Jun 17, 2017 at 20:02
  • 5
    \$\begingroup\$ Plug the device into a USB 2.0 hub that only supports Full Speed and Low Speed modes (not High Speed). \$\endgroup\$
    – MarkU
    Jun 17, 2017 at 20:03
  • 4
    \$\begingroup\$ Speed in not determined by cable bandwidth, it is negotiated. usbmadesimple.co.uk/ums_6.htm \$\endgroup\$ Jun 17, 2017 at 20:06
  • 6
    \$\begingroup\$ BTW: USB HS runs at 480 Mbps, not 480 MHz, and FS likewise is 12 Mbps, not 12 MHz. Due to the encoding scheme (NRZI) there may be long runs of up to 6 bits of the same value, meaning the frequency spectrum is distributed, with components well below 480 MHz/12 MHz, and above, due to the edge rates. Hence, you cannot consider either as a single frequency. \$\endgroup\$
    – uint128_t
    Jun 18, 2017 at 6:04
  • 1
    \$\begingroup\$ @Marcus: I have read on Stackoverflow that Microsoft does not provide any way to configure the driver to run at Full Speed. If you have any detailed information how to do that and if you have tested that this really works (not just theory) let me know how to configure that. stackoverflow.com/questions/19945124/… \$\endgroup\$
    – Elmue
    Jun 19, 2017 at 17:14

3 Answers 3

11
\$\begingroup\$

The issue is that the FS mode is negotiated during attach/port reset event. Any HS device signals the connect event by pulling up D+ data line just as a FS device would do. The host, seeing the connect, initiates "USB_RESET" state, dragging both D+ and D- to ground with 45-Ohm driver. Then, if a device is HS, it pulls "Chirp-K" signal on D- wire. A HS device must always do this, you can't avoid this signal phase.

The host does recognize the Chirp-K, and after a special chirping sequence, both Host and Device recognize the HS mode. You can find more details HERE.

The problem in your case is that suppressing signal quality at HS mode doesn't remove the chirping sequencing. Since the chirping comes at much lower switching rate (~ 10MHz), you can't suppress it without harming the FS data signaling mode. That's why a simple impeding of HS data rate doesn't work.

There are three options to validate a HS device ability to run on FS mode:

  1. Have a USB 1.1 hub, as suggested by duskwuff;
  2. Get a USB host that supports only USB 1.1 (Arduino flavours, Cypress, whatever)
  3. Get a normal (older) PC that is built around Intel EHCI controller, and disable the EHCI part of it in Device Manager. The remaining UHCI controller (or OHCI in AMD line) will provide the FS functionality.

CORRECTION: The chirp sequence J-K-J-K-... is specified to have pulses between 40us and 60us, see Section 7.1.7.5. of USB 2.0 specifications. All designs have it in the center, 50 us. Which makes the chirping frequency at 10 kHz, not 10 MHz, my bad. This frequency disparity makes it impossible to suppress chirps by filtering given the FS signaling rate is 6 MHz.

\$\endgroup\$
2
  • \$\begingroup\$ That's interesting. I supposed that the Chirp is at 480MHz. Where did you read that it is only at 10 MHz? \$\endgroup\$
    – Elmue
    Jun 19, 2017 at 17:21
  • \$\begingroup\$ @Elmue Read specifications. The initial chirp-K is about 1-2 ms, and subsequent J-K alternations are coming in 50 uS pulses. \$\endgroup\$ Jun 19, 2017 at 17:27
4
\$\begingroup\$

Attach the device to a USB 1.1 hub. They're still commercially available.

\$\endgroup\$
3
  • 1
    \$\begingroup\$ Actually, USB 1.1 hubs are not easy to find these days. But you can find an evaluation board for HS hub configured as FS-hub only, specifically for USB-IF Golden Tree interoperability tests. See digikey.com/product-detail/en/microchip-technology/… \$\endgroup\$ Jun 20, 2017 at 18:37
  • 1
    \$\begingroup\$ It is extremely difficult to buy one today. I finally found a Belkin 7 port hub F5U027 on eBay. It is full speed from 2001. Very good quality. It comes with a 4 A power supply and lifetime warranty! But very expensive ($79). \$\endgroup\$
    – Elmue
    Oct 13, 2017 at 0:50
  • 1
    \$\begingroup\$ With the idea to use a full speed usb 1.1. hub (bought for just 5 USD @ ebay in APril 2021) I managed to get back file access (Windows 10, File Explorer, no special software necessary) to an older usb 2.0 usb stick!!! :-) The stick "stopped working" on any of my computers (also tried out a couple of usb Tools), but still runs within a car radio (mp3 Files), and I was on a search for a solution for some years!! Thank you so much! \$\endgroup\$
    – Frankster
    Apr 7, 2021 at 14:34
3
\$\begingroup\$

There are also USB isolators out there that will block the initial hand shake:

If the peripheral port happens to be high-speed-capable, then it sends a high-speed “chirp” pattern during enumeration. This would normally initiate negotiations for high-speed operation, but the ADuM4160 blocks the chirp signal and automatically forces the high-speed peripheral to operate at full speed.

You can find them here.

Also Adafruit sells breakout boards here based on ADuM4160 Full/Low Speed USB Digital Isolator (and ADuM5000 Isolated DC/DC Converter).

\$\endgroup\$
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.