73

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

user1306322
  • 4,736
  • 14
  • 50
  • 88
  • 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. –  Oct 01 '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 01 '16 at 15:48
  • 6
    Who on earth uses both hands to plug in a USB device? – Aloha Oct 03 '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 03 '16 at 21:10
  • Wait, so you have USB 1 ports on those laptops? 0_0 – undo Oct 07 '16 at 17:25

3 Answers3

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.

karel
  • 13,390
  • 26
  • 45
  • 52
Ale..chenski
  • 12,414
  • 4
  • 35
  • 46
  • One other answerer said they could reproduce this effect. You could try it as well. The wiggling in my case happens on the mini/micro-usb connector side. – user1306322 Oct 01 '16 at 17:55
  • 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 01 '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 01 '16 at 18:11
  • 21
    @isanae I wonder when device specification creators will have the foresight to call something "slow speed". – wizzwizz4 Oct 01 '16 at 20:20
  • 7
    @wizzwizz4 when they intentionally and deliberately want their product to fail due to poor consumer reception. – Dan Is Fiddling By Firelight Oct 02 '16 at 00:56
  • @DanNeely But they're *specification* designers; like the people who made HTML5. They didn't have to sell HTML5 because it was agreed on by everyone. – wizzwizz4 Oct 02 '16 at 08:17
  • 10
    @isanae - USB 1.0 also supported "low-speed" as 1.5 Mbits/s. – Michael Karas Oct 02 '16 at 12:19
  • @wizzwizz4 "This product supports USB 6.0 Slow Speed" "Oh, I won't bother buying that because it's slow." – user253751 Oct 02 '16 at 20:24
  • 1
    In fact, it is perfectly legal to advertise a 1.5Mbit mouse as USB 3.1 compliant, because USB3.1 includes USB2, and USB2 includes LS 1.5Mb/s mode. This happens all the time, like "MCU is USB2.0 compliant using FS mode". There will be more confusion with proliferation of Type-C connector. – Ale..chenski Oct 02 '16 at 20:43
  • @user20574 "12.4Tb/s data transfers to/from USB 6.0-compliant devices!" Remember when 1.5TB was a lot? – wizzwizz4 Oct 03 '16 at 06:34
  • @wizzwizz4 1.5TB still is a lot. Just not as much of a lot as it used to be. It's still going to take a matter of hours to read/write 1.5TB off any hard drive (which you probably have because who wants to pay for a 1.5TB SSD?) and it uses up the entire drive or half of it. At least it's down from taking decades and using an entire city block. – user253751 Oct 03 '16 at 09:26
  • @wizzwizz4 Then the standards committee should just call it "12.4Tb/s mode". – user253751 Oct 03 '16 at 09:27
  • 1
    @wizzwizz4 HTML5 is more equivalent to what might happen with USB naming conventions in 10 more years: "Okay, we've messed up big time... what to do now?" – jpaugh Oct 03 '16 at 18:45
  • @jpaugh Did you just call HTML5 a "Standard"? – Aron Oct 04 '16 at 03:46
  • 1
    @AliChen Happens to me all the time, especially on an old and slow laptop running Vista. – Agent_L Oct 04 '16 at 13:30
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.

Canadian Luke
  • 24,199
  • 39
  • 117
  • 171
Tonny
  • 29,601
  • 7
  • 52
  • 84
  • Same thing occasionally happens with a USB3 device in a USB3 port ... – davidbak Oct 01 '16 at 17:34
  • 1
    No. The speed of USB port gets determined by hardware BEFORE engaging into any data protocol. – Ale..chenski Oct 01 '16 at 18:19
  • 3
    @AliChen How does it get determined? – gronostaj Oct 01 '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 01 '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 01 '16 at 18:47
  • Thanks Nathan, it is D- that forms Chirp-K. I will correct my answer. – Ale..chenski Oct 01 '16 at 19:10
  • @davidbak USB3.0 has extra contacts in the plug, so you can theoretically insert far enough to make legacy connection but without the 3.0 part. Effect can look same, but cause can be entirely different. That is, you can connect two 3.0 devices using 2.0 cable. – Agent_L Oct 04 '16 at 13:27
  • It probably thinks there's a dumb USB1 hub in between. – Joshua Oct 04 '16 at 15:13
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.

Stefan
  • 47
  • 2
  • 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 01 '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 01 '16 at 15:34
  • @hennes I agree. Their is no physical distinction between USB 1 and 2. – Tonny Oct 01 '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 01 '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 01 '16 at 15:56
  • @stefan Ping in case you missed it. Ali chen has written a nince answer (one which I could understand, which did not happen when I tried to read the raw USB protocol descriptions.). – Hennes Oct 03 '16 at 04:54