72

I noticed that on both Windows XP and 7 (and 2 different computers respectively) I could manage to get that "This device can perform faster if you connect it to a high-speed USB 2.0 port" notification to pop up if I connect the cable very slowly (or struggle a bit doing it with just one hand). If I connect it quickly enough or normally, with both hands, there is no notification. In either case, all such devices appear to function normally.

What I think happens is that the contact between wires gets interrupted for enough time during slow/clumsy connection that the USB controller thinks it's not 2.0 but slower. But why does it think so? Or why does it not just say "You are bad at connecting cables, please unplug and try again"?

5
  • Is the device connected to a usb dongle rather than direct to your box? If so try connecting the device direct and not a 3rd party so to speak.
    – user647489
    Oct 1, 2016 at 15:47
  • It's connected to the desktop tower's backside cable port, so it should not have anything between the motherboard and the device on the other end. Oct 1, 2016 at 15:48
  • 6
    Who on earth uses both hands to plug in a USB device?
    – Aloha
    Oct 3, 2016 at 16:45
  • 3
    @Cunningham'sLawyer: one hand scenario: usb plug (or key) pushes the laptop all around the table when trying one side, turning it around, trying once again, turning it around to finally plug it in. Two hands scenario: same amount of flipping but the second hand holds the laptop still.
    – WoJ
    Oct 3, 2016 at 21:10
  • Wait, so you have USB 1 ports on those laptops? 0_0
    – undo
    Oct 7, 2016 at 17:25

3 Answers 3

75

The message refers to negotiating old full speed (FS) data rate of 12 Mbit/s, instead of the high speed (HS) data rate which is 480 Mbit/s. It must be really difficult to get this effect from a USB2 port. USB2.0 HS protocol gets established after a fairly complicated negotiation between a device and host, because initially every HS devices acts as a FS device.

The normal process is as follows:

  1. HS-capable device pulls up the D+ line after it gets VBUS signal with 1-1.5kΩ resistor to 3.3V. Just as a FS device would do.

  2. Host port detects the D+=high, and after a minimum 100ms de-bouncing delay, the host asserts USB_RESET state on the bus, driving both D+ and D- lines to ground with 45Ω drivers for 10 or 50ms.

  3. If the device is FS, it does nothing and waits until the end of USB_RESET.

  4. If the device is HS, it would drive D- high using HS driver (18mA source) for about 1ms. This will create a pulse with amplitude about 800mV (18ma into 45Ω load) called "Chirp-K";

  5. Upon detection of the END of Chirp-K, if the host is capable of HS mode, it drives this signal back (same 18mA into own 45Ω load), now for about 50µs. If it is a FS host, it ignores the Chirp-K, and proceeds as FS.

  6. Then, if the host is capable of HS mode, it switches its drive into D+ wire, forming "Chirp-J", again for 50µs;

  7. The host repeats this alternating 50µs pattern for the entire duration of the USB_RESET state (10ms on hub ports, 50ms on root hub ports);

  8. After three alternating chirp-K/J, the device recognizes that the host is HS, and switches into HS mode itself. This implies turning on HS termination on the device end, which makes the total wire resistance to 22Ω, and the chirp signal amplitude drops to 400mV, to a standard HS signaling level.

  9. Host proceeds with HS start-of-frame (SOF) packets, and starts enumeration process in HS mode.

Now it is anyone's guess which part of wiggling did break this protocol, and made the host to mark the port as FS.

15
  • 10
    Acronyms: FS is "full-speed" (USB 1.0, 12 Mbit/s),HS is "high-speed" (USB 2.0, 480 Mbit/s) and SS would be "SuperSpeed" (USB 3.0, 5 Gbit/s).
    – isanae
    Oct 1, 2016 at 18:10
  • 4
    Dealing with USB devices for the past 16 years, I have to admit that I see the drop from HS to FS first time. The normal driver-level protocol uses at least two more attempts to assert USB_RESET in process of enumeration. It worst case of wiggling at first insertion, there will be one or two additional USB_RESETs following the described protocol, so the fall back never occurs at user level. However, some modern hosts are using "voltage-driven" signaling instead of classic current-driven, so all classic combination of various threshold detection levels gets screwed and things may happen. Oct 1, 2016 at 18:11
  • 21
    @isanae I wonder when device specification creators will have the foresight to call something "slow speed".
    – wizzwizz4
    Oct 1, 2016 at 20:20
  • 7
    @wizzwizz4 when they intentionally and deliberately want their product to fail due to poor consumer reception. Oct 2, 2016 at 0:56
  • 10
    @isanae - USB 1.0 also supported "low-speed" as 1.5 Mbits/s. Oct 2, 2016 at 12:19
33

When you plug in a device in a USB2 port, the computer first tries to negotiate a connection using the USB2 data protocol.
When that fails, it tries again using the USB1 data protocol.

My best guess is that the physical connection (due to wiggling the contacts) is not stable yet during the USB2 negotiation. So it falls back to USB1, even though the device is a USB2 device.

Funny enough Windows does realize that the device should be capable of USB2 speed (information it gets from the driver) and so Windows concludes that the USB port you plugged it in to was a slow USB1 port. Windows doesn't seem to check whether the port itself is USB2 capable.
And that is why you get the somewhat misleading error-message.

P.S. Just tried it myself with a Windows 10 machine: Same effect there.

8
  • Same thing occasionally happens with a USB3 device in a USB3 port ...
    – davidbak
    Oct 1, 2016 at 17:34
  • 1
    No. The speed of USB port gets determined by hardware BEFORE engaging into any data protocol. Oct 1, 2016 at 18:19
  • 3
    @AliChen How does it get determined?
    – gronostaj
    Oct 1, 2016 at 18:35
  • See my full answer. Software only initiates the port reset command upon seeing "port connect" bit (interrupt from it); the rest is done in hardware. Oct 1, 2016 at 18:41
  • From Wikipedia: "USB 2.0 devices use a special protocol during reset, called chirping, to negotiate the high bandwidth mode with the host/hub. A device that is HS [USB 2.0] capable first connects as an FS [USB 1.0] device (D+ pulled high), but upon receiving a USB RESET (both D+ and D− driven LOW by host for 10 to 20 ms) it pulls the D− line high, known as chirp K." Oct 1, 2016 at 18:47
0

It could be that you inserted it slow enough that Windows already finished the hand shake process with the controller and that at that time contacts needed for USB 2.0 communication weren't touching.That could possibly lead to Windows mistaking a USB 2.0 device as a 1.1 device as there would be no response on the rails marked as only present on USB 2.0 and up.

6
  • Is this a common situation for <2.0 version usb devices that it still recognizes the connection and doesn't choose to fail? Oct 1, 2016 at 15:33
  • 8
    That can happen with USB3 devices in an USB3 port where the USB1/2 pins connect first. But I do nto see how that can happen with USB1/USB2. Both only use 4 pins, one pair for power, one pair for data.
    – Hennes
    Oct 1, 2016 at 15:34
  • @hennes I agree. Their is no physical distinction between USB 1 and 2.
    – Tonny
    Oct 1, 2016 at 15:39
  • 1
    @Tonny I am pretty sure I saw some differences on some obscure branded USB 1.1 and 2.0 devices.But I admit,I am probably wrong.
    – Stefan
    Oct 1, 2016 at 15:44
  • 1
    @Stefan In the early days of USB there were a lot of cheap knock-off connectors around that had bad dimensions for the contacts. I've seen some where each of the 4 pins in the plug had a different length and thickness. I still keep a couple around in the office to show people when we have a discussion about the pro's and con's of ordering cheap knock-off cables.
    – Tonny
    Oct 1, 2016 at 15:56

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .