9

I have several Dell XPS 13 machines that exhibit intermittent failures of the left USB 3.0 port, as described in this thread. I have lost data to silent corruption/disconnections on several external HDDs.

Evidence points to a hardware design flaw (insufficient shielding on a cable internally connecting the port to the controller) that causes disruption when operating at USB 3.0 protocol. Therefore, it is unlikely to be solved completely in software/firmware updates.

What I'm looking for is a software solution to forcibly downgrade a single port to use USB 2.0 even if a USB 3.0 capable device is plugged in it. Some people have reported success in using a USB 2.0 hub, but I'm looking for a solution with no extra hardware.

Windows reports the USB controller as Intel(R) USB 3.0 eXtensible Host Controller. Both ports go through the same root hub. Please tell me if I need to supply more details regarding the controller.

There is no BIOS option to switch USB speed (as it turns out, there is, but not clearly presented). I would like the other port to operate at 3.0, if possible.

Xan
  • 251
  • 1
  • 2
  • 14
  • 1
    **This cannot be done.** Even if it was possible. You would still be using the same cable and USB 3.0 header you suspect does not have good enough shielding, which means the problem would still exist at USB 2.0 speeds. The same cable is used no matter what. – Ramhound Sep 15 '14 at 15:05
  • @Ramhound While true, anecdotal evidence tells that the problem is specific to USB 3.0 frequencies. Also, I would be interested in a solution that globally downgrades the controller to 2.0 in Windows. – Xan Sep 15 '14 at 15:06
  • You can't "downgrade" the controller. A USB 3.0 controller cannot become a USB 2.0 controller. You could always solve the problem by adding more shielding ( of course ) I am suspect of the USB cable going to the external device not the internal header cable ( personally ). – Ramhound Sep 15 '14 at 15:09
  • 3
    @Ramhound A USB 3.0 controller can fall back to 2.0 operation for 2.0 client devices. The question is whether there is a possible setting somewhere to force this to happen even if 3.0 device is plugged in. I also suspected the device cable at first, but this has proven to be false, and the same device/cable operates properly on the right port. – Xan Sep 15 '14 at 15:11
  • 1
    The USB specification does not support what you describe. It supports 2.0 devices being plugged into a 3.0 device, but the 3.0 controller, isn't operating as a 2.0 controller when that happens. Its still a 3.0 controller. – Ramhound Sep 15 '14 at 15:17
  • simply use a USB 2.0 cable. 3.0 cable needs more wire and is not backward compatible – phuclv Sep 15 '14 at 15:31
  • @LưuVĩnhPhúc It is, indeed, a last resort to use USB2.0 cable as an "adapter". This question is specifically about possibility to disable 3.0 capabilities in software. – Xan Sep 15 '14 at 15:32
  • This is likely impossible, or *very* device-specific. If it's at all possible, it would depend on how the 2.0/3.0 compatibility is handled by the system. I suspect that low-level hardware and protocol detection, as well as management of transmission frequencies, is handled in the hardware/firmware - not the OS. If that's the case, then it would be entirely up to the hardware vendor to provide support for forcing a "legacy mode" in the drivers. I strongly doubt this is commonly - if at all - done. However, this is all speculation - which is why I'm not posting it as an answer. – Iszi Sep 15 '14 at 16:28
  • @Iszi I have found a system-specific answer a few minutes ago, in fact. There is a deeply-buried BIOS switch "USB Debugging" that does precisely what I need, limiting that specific port to EHCI. Could you please make that comment an answer? I'd accept that, I was looking for confirmation of it being handled at firmware level. – Xan Sep 15 '14 at 16:29
  • I have a related question if someone is interested in answering: [Maximizing speed of USB 2.0 clients on USB 3.0 hub](http://superuser.com/questions/1074183/maximizing-speed-of-usb-2-0-clients-on-usb-3-0-hub) – Kozuch May 15 '16 at 16:57

5 Answers5

23

Although this is not a software solution, if you use a USB 2 extension cable then it will prevent the 5 USB 3 pins in the plug from physically connecting the wires which carry the USB 3 handshake between the host and device. A USB 2 device or cable only has 4 pins. A USB 3 port will default to USB 2 signaling communication when only 4 pins are connected. A USB 2 extension cable only caries 4 wires that connect the 4 pins of USB 2 only communications.

Robert Simpson
  • 231
  • 2
  • 3
  • Upvoted, this is a useful point. Though my question is more of an "accident prevention" kind. – Xan Dec 29 '14 at 12:29
  • 2
    I used this same trick trick to force an external drive enclosure to connect over 2.0 because it would frequently disconnect during large transfers when running in 3.0. Might not be an elegant solution but it works. – Ivan Dossev Mar 27 '16 at 05:57
  • Thank you so much @Robert Simpson. Of all the solutions I tried, this is the only "workaround" that worked. My issue is very much the same with Ivan Dossev (i.e. an external hard drive enclosure having issues during transfer of large data). The weird thing is I borrowed my friend's Seagate external hard drive (with usb 3.0) and it worked perfectly fine with my usb 3.0 left port. Btw, I'm using Win 10, Dell Inspiron 14. Thanks again! – Annie Lagang Apr 29 '18 at 05:45
8

It's possible. It involves changing configuration registers in the xHCI controller, so it's obviously chipset-specific. This is how it's done on Linux. I suppose it should be possible to do it on Windows too, but I don't know what utility to use.

To set both ports to USB 2.0 mode:

sudo setpci -H1 -d 8086:1e31 d8.l=0

Right port 3.0 and left port 2.0:

sudo setpci -H1 -d 8086:1e31 d8.l=1

Right port 2.0 and left port 3.0:

sudo setpci -H1 -d 8086:1e31 d8.l=2

Changing the register at d8 (USB3_PSSEN) sets the ports in USB 2.0 mode, but they are still on the xHCI controller. To switch over to EHCI, you also have to change the register at d0 (XUSB2PR). For example to run both ports off the EHCI contoller you have to do this:

sudo setpci -H1 -d 8086:1e31 d8.l=0

sudo setpci -H1 -d 8086:1e31 d0.l=0

The registers are documented in this datasheet, in section 17.1: Intel® 7 Series / C216 Chipset Family Platform Controller Hub (PCH)

ckujau
  • 630
  • 5
  • 14
Erik
  • 81
  • 1
  • 2
  • 1
    Are those changes permanent, or do they have to be reapplied on boot? – Xan Feb 09 '15 at 23:25
  • 1
    They are not permanent. They do have to be reapplied on boot. – Erik Feb 09 '15 at 23:37
  • A pity: otherwise it would still be applicable for Win7. Still, very useful information. – Xan Feb 09 '15 at 23:38
  • 1
    I think this utility could be used for doing in on Windows, but since I don't have windows myself I can't test it. [https://downloadcenter.intel.com/Detail_Desc.aspx?lang=eng&DwnldID=10316](https://downloadcenter.intel.com/Detail_Desc.aspx?lang=eng&DwnldID=10316) – Erik Feb 09 '15 at 23:39
  • 1
    pciutils (lspci, setpci) for Windows are available here: [https://eternallybored.org/misc/pciutils/](https://eternallybored.org/misc/pciutils/) – Erik Feb 10 '15 at 00:24
3

This is likely impossible, or very device-specific. If it's at all possible, it would depend on how the 2.0/3.0 compatibility is handled by the system. I expect that low-level hardware and protocol detection, as well as management of transmission frequencies, is handled in the hardware/firmware - not the OS. If that's the case, then it would be entirely up to the hardware vendor to provide support for forcing a "legacy mode" in the drivers. I strongly doubt this is commonly - if at all - done.

You should consult your hardware manufacturer's documentation for more information on this.

Iszi
  • 13,585
  • 44
  • 113
  • 181
3

For a system-specific answer to my question, Dell XPS 13 has a USB Debug option in BIOS.

When enabled, it forces the left USB port into 2.0/EHCI mode, while the right port stays 3.0.

It remains to be seen if that helps the original problem. After some testing, it seems that it does indeed help with the problem. That makes me more or less sure this option in BIOS exists only because they are aware of the hardware design problem.

Xan
  • 251
  • 1
  • 2
  • 14
-2

I have an xbox 360 controller but my HP Stream Notebook 11 has usb 3.0 and it needs usb 2.0. However if you use a USB 2.0 hub, you will be able to get 3.0 speeds but with a 2.0 connection.

Hope this has helped, Jake

Jake
  • 1
  • 1
    This is just plain wrong. If you use a USB 2.0 hub you won't get 3.0 speeds because it's not 3.0. – Cas Nov 09 '16 at 10:39