A Chip To Bridge The USB 2 – USB 3 Divide

Top side of the VL670 breakout board, with two USB connectors and the VL670 chip in the center.

On Twitter, [whitequark] has  found and highlighted an intriguing design – a breakout board for the VL670, accompanied by an extensive yet very easy to digest write-up about its usefulness and inner workings. The VL670 is a chip that addresses a surprising problem – converting USB 2.0 signals into USB 3.0.

If you have a USB 2.0 device and a host with only USB 3.0 signals available, this chip is for you. It might be puzzling – why is this even needed? It’s about the little-known dark secret of USB3, that anyone can deduce if they ever have to deal with a 9-pin USB 3.0 connector where one of the three differential pairs doesn’t quite make contact.

When you see a blue “3.0” port, it’s actually USB 2 and USB 3 — two separate interfaces joined into a single connector. USB 3 uses two single-directional differential pairs, akin to PCI-E, whereas USB 2 uses a single bidirectional one, and the two interfaces on a blue connector operate basically independently of each other. There’s many implications to this that are counterintuitive if you simply take “USB 3.0” for “faster backwards-compatible USB”, and they have painful consequences.

For instance, USB 3 hub ICs have two separate hub entities inside – one for USB 3 and one for USB 2. Even if you have a USB 3 hub plugged into a USB 3 port, multiple USB 2 devices plugged into it still cannot break through the USB 2 uplink limit of 480 MBps. If you ever thought that a faster hub with a faster uplink would fix your USB 2 device speed problems – USB-IF engineers, apparently, thought differently; and you might have to find a workaround for your “many cheap SDRs and Pi 4 in a box” setup.

As a fun party trick, since USB 3 device enumeration only uses USB 2 as fallback, you can, in theory, connect eight devices to a four-port USB 3 hub – four USB 2 devices and four USB 3 devices. In fact, some USB devices use USB 3 lanes exclusively and don’t even connect to USB 2 lanes. Yes, this also implies that you might be able to connect six USB devices to a Raspberry Pi 4, and even seven if you switch the OTG port into a host mode.

So if you find yourself stuck between USB 2 and USB 3, the VL670 is a functional solution. But because it’s addressing a deficiency in the standard, it’s not quite compliant itself. (Not that USB standard non-compliance ever stopped anyone.)

There’s an open-source devboard that you can order parts for and build, with VL670 chips seemingly available on TaoBao. What was this chip originally intended for? Apparently, VirtualLink, a standard that quite a few people feel glad to see dead. The aforementioned extensive write-up does talk about more relatable use cases, however – for instance, it turns out that USB 3 signals are easier to galvanically isolate!

We’ve discussed the USB 3 vs USB 2 peculiarity in passing, but it bears establishing its implications more clearly. If you ever wondered about other shady parts of USB, you’ll want to check out the Hacking USB Hack Chat we had with [Kate Temkin]!

30 thoughts on “A Chip To Bridge The USB 2 – USB 3 Divide

  1. > There’s many implications to this that are counterintuitive if you simply take “USB 3.0” for “faster backwards-compatible USB”

    Actually, you **should** be able to do that, without pain, in a perfect world: If something has a USB 3 *port*, it **must** support USB2 as well. Standard says so.

    I’ve personally not met a consumer device that does USB3-only (because, honestly, USB 2 without HiSpeed is… so simple and cheap these days, and even with HS it’s built into any silicon you’d want to use in a consumer device…)

  2. If only this chip was possible to buy!
    I desperately wish that I had a handful of these translators, but nowhere can they be found.
    The Valve Index contains one, but I’m not about to take apart a $500 VR headset to get one.

    1. Seriously, I’ve sent inquiries to VIA Labs and they haven’t responded. I want to design a board around this, specifically for the SDR use case but I’m sure it would find many others.

      1. If I am not mistaken, Valve instigated the creation of this part as an element of the VirtualLink standard. This standard achieved four lanes of DisplayPort and USB 3.0 over a USB-C connector by reusing the USB 2.0 pins and using a USB 2 to USB 3 bridge.

        1. It’s been around for a while, in fact the usb3 standard mentions the possibility of a usb3 to usb2 transaction translator but VIA labs ended up with a patent on the idea somehow, despite usb2 to usb1 transaction translation being ubiquitous. I spent a lot of time trying to buy these chips but just ended up cursing VIA’s name and giving up.

  3. did anyone else than me hit the limit of 64 USB devices on a system ?
    when i migrated our usb monster (about 120 USB 2.0 devices on one computer) with a computer that had only USB3 (blue) socket, i ran into enumeration problems quickly. I had to source some 4 ports PCIE USB2.0 card, there are not many to solve the problem.
    This 64 devices limit seems to exist only with USB3
    OS: Debian

    1. Hmm, I recall that 2.0 had the limit of up to 127 devices, and a quick search confirms as much – not too surprised that 3.0 might have gotten it down to 64!

      USB monster? Oh I’d love to hear a story about that!

    2. Yeah I’ve hit enumeration limits (number of endpoints, not bare number of devices) with some VR hardware (Vive Pre, basically a prototype HTC vive) that basically had a bunch of internal hubs.

    3. no but I have hit bandwidth issues many times as a lot of our favorite commodity ewaste computer vendors only have 2 usb ports and hub it out to the 4 on front and 6 on back

    4. The limit you are referring to is most likely a limit of your XHCI controller.

      Because an XHCI controller handles most of the scheduling of USB transfers autonomously, it has to keep track of every USB 2 or USB 3 device that is connected to one of its ports.

      The eXtensible Host Controller Interface Specification defines the HCSPARAMS1 register (in PCI configuration space), which includes a ‘MaxSlots’ field. That is the maximum number of devices that the controller can keep track of.

      64 is a typical MaxSlots value I have seen on recent hardware.

      Note that anything that gets assigned a device address takes up a slot, including USB hubs.
      USB 3.0 hubs will take up two slots, because they contain both a USB 2.0 and USB 3.0 hub. Hubs with more than four ports will likely take up more slots as well, because they tend to consist of several cascaded 4-port hubs internally. Even though the USB spec allows hubs with more than four ports, I don’t know if any exist in the wild.

      Some older mainboards have an option in the BIOS setup that connects USB 2.0 ports to an EHCI controller instead, which does not have this limitation as far as I know.

      The other way around it is what you have done — spread out the USB devices across more than one controller. Adding expansion cards is the obvious solution, although some mainboards include more than one XHCI controller (for example, on some Intel chipsets, the Type C/Thunderbolt/USB4 capable ports are on a separate controller).

      (PS: my comment got eaten on the first attempt, hopefully this won’t be a double post…)

      1. not eaten! got put into “pending” queue of our comment moderation system! trashed the duplicate one ^__^ using the same name&email combo (or i.e. WordPress auth) should expedite your comment to visible-to-all status next time!

    1. feels like we’re getting from “practical” to “theoretical” territory here, since the two-2.0-device trick requires you to flip a cable to get a different device, and the 2.0+3.0 hack can have them work simultaneously! and.. tell nobody, but the type-c flip trick can be done with two 3.0 devices too, just harder to pull off ;-P

  4. Someone needs to put this on etsy. With it being that hard to source and having to order PCBs and so on you might just as well spend the $150 and get the official evaluation board. :/

  5. Hello..I’m quite a noob in this USB thing but a observed a fact on my laptop..(probably that’s why google got me here). After some wine was spilled over my HP laptop a USB 3 port gives error only when I connect a USB 2 device (cheap gamepad)..USB 3 devices like sticks and capture cards work ok. Possibly because there was a shortcircuit just on USB 2 pins?
    I was wondering if you guys can help me a bit:
    1. Do you think this situation can be fixed by cleaning or soldering? Now 1 have only one USB port in witch I can plug USB 2 devices
    2. If I use a USB 3 wold it use separate USB 2 lane and wont be able to use on that burned port only on the other
    3. If I use a docking station from USB C (I have a separate dedicated port) to many ports I should be fine with all USB types?

    Thanks.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.