74

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"?

  • 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 '16 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. – user1306322 Oct 1 '16 at 15:48
  • 5
    Who on earth uses both hands to plug in a USB device? – Gene Oct 3 '16 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 '16 at 21:10
  • Wait, so you have USB 1 ports on those laptops? 0_0 – rahuldottech Oct 7 '16 at 17:25
76

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.

  • 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 '16 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. – Ale..chenski Oct 1 '16 at 18:11
  • 21
    @isanae I wonder when device specification creators will have the foresight to call something "slow speed". – wizzwizz4 Oct 1 '16 at 20:20
  • 7
    @wizzwizz4 when they intentionally and deliberately want their product to fail due to poor consumer reception. – Dan Neely Oct 2 '16 at 0:56
  • 10
    @isanae - USB 1.0 also supported "low-speed" as 1.5 Mbits/s. – Michael Karas Oct 2 '16 at 12:19
32

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.

  • Same thing occasionally happens with a USB3 device in a USB3 port ... – davidbak Oct 1 '16 at 17:34
  • 1
    No. The speed of USB port gets determined by hardware BEFORE engaging into any data protocol. – Ale..chenski Oct 1 '16 at 18:19
  • 3
    @AliChen How does it get determined? – gronostaj Oct 1 '16 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. – Ale..chenski Oct 1 '16 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." – Nathan Osman Oct 1 '16 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.

  • Is this a common situation for <2.0 version usb devices that it still recognizes the connection and doesn't choose to fail? – user1306322 Oct 1 '16 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 '16 at 15:34
  • @hennes I agree. Their is no physical distinction between USB 1 and 2. – Tonny Oct 1 '16 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 '16 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 '16 at 15:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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