You are here


It was time tonight to get USB High Speed working on my home office desktop box. I forget why it was time, it just was…

Oh yeah, I remember! There were three reasons:

  • I was tired of backing up my digital camera at "Full Speed".
  • I was tired of loading data on and off my portable audio player at FS.
  • I was getting ready to play with the GNU USRP, which requires HS to work at all.

You might reasonably wonder how USB HS could be broken on such an important box as my main home office machine. (By the way, I am being amused by typing "USB HS". Perhaps because of the shenanigans of the USB standards organization, which did not make High Speed mandatory for USB 2.0 compliant devices, most folks still seem to insist on saying "USB 2.0 High Speed". Apparently they are concerned that these devices not be confused with any bizarre USB 1.0 High Speed or futuristic USB 3.0 High Speed devices that might be floating around.)

Anyway, the reason it was broken is that at some point my wacky VIA motherboard and the Linux 2.6 kernel decided to disagree with one another on how the EHCI interface in the onboard USB chipset should communicate. I tend to blame Linux, as the result of the misfeature was a kernel thread crash. At any rate, this failure made the High Speed of my motherboard USB unusable.

I could have sought help and tried to track down the defect and fix it. Instead, I decided I'd just slap a $10 PCI card in, disable the internal USB, and be done with it. While I was at it, I'd take the CD/RW drive with the door that mostly needed to be opened with a paperclip out of the machine. I'd also take the 4x DVD/RW drive out of the machine, and replace it with an 8x Dual Layer (albeit dual +R only) burner that I'd bought a few months back on sale at Fry's (as with the PCI USB card). Fry's has DL media on sale for $1.50 a hit this weekend, so I can finally afford to play with DL burning a bit—although I really won't do much until I can get a platter of DL rewritable media so that experimentation gets reasonably priced.

For once in my life, a hardware upgrade on this highly twitchy box actually seems to have gone smoothly and achieved the desired result. I was able to do a USB HS upload to my audio player. Just now (after a couple of twitchy moments featuring defective media) I was able to burn an audio CD to the new drive.

While I was in the box, I noticed that the "tip magnetic drive bearingless" CPU fan I had installed is making an inordinate racket, although it seems to be moving enough air right now. I blew out the machine with canned air real good, especially the fan, and managed to coat the rest of the room in foul crud, but afterwards it was a bit quieter. I suspect I'll eventually have to replace the fan, though. Bleah—this operation is a pain. Avoid the TMD fans.


Just to explain the USB 2.0 High Speed thing; USB 1.1 High Speed was misused by some vendors to refer to Full Speed devices (as against Low Speed, you see). When USB 2.0 added High speed (changing Low and Full to Low, Full, High), they needed some way to identify High speed; because USB 2.0 devices can legitimately be Low speed (1.5MBit/s) or Full speed (12MBit/s), USB 2.0 was not enough on its own. USB High Speed on its own ran the risk of confusion with vendors' USB 1.1 High Speed devices (which were actually Full speed), so they went with USB 2.0 High Speed to identify the 480MBit/s devices.

The USB specs have always been leery of putting the bus bandwidth peak on devices, since you'll never achieve it; thus, the obvious USB1, USB12 and USB480 monikers were not acceptable (unlike with Firewire, where you really can sustain close to the bus peak, as it's less processor intensive at the expense of making devices much more complex).

As clear a summary of this complicated situation as one could hope for, given the circumstances. Thanks!

What I would have liked to see, of course, is simply for the USB 2.0 spec to require High Speed. I don't know any great technical reason to have 2.0-compliant Full Speed devices—seems like 1.1 works well enough for this. Then "USB 2.0" would be enough to make the situation clear…which is the common usage anyway.

The big deal is all in bus speeds; a USB 1.1 device is entitled to see a High Speed bus cycle in any way it likes, including as evidence of hot unplug. Thus, a USB 2.0 controller has to limit itself to Full Speed if there's a USB 1.1 device on the bus. A USB 2.0 device must be aware of High Speed bus cycles, even if it doesn't handle them, and may not misinterpret them.

So, limiting USB 2.0 to High Speed only has the undesirable side effect of not allowing slow devices to share a bus with fast devices, all working at top speed. OK, so you'll still see some slowdown compared to a single High Speed device on a bus, as a Low Speed cycle takes as long as 320 High Speed cycles (and a Full Speed cycle takes as long as 40 High Speed cycles), but you only pay that price when you need to make use of the slower device.

If (for example's sake), you've got a USB 2.0 Full Speed bluetooth dongle, a USB 2.0 Low Speed mouse, and a USB 2.0 High Speed hard drive on the same bus, then when you're not using bluetooth or your mouse (causing them to not send much), you get close to the speed you'd get without the dongle or mouse attached from the hard drive. If only the hard drive was USB 2.0, it'd be slowed down to Full Speed so that the mouse and dongle don't get confused.

This is less important for desktops, where you have plenty of USB ports, and an easy route to fit more; on small laptops, where there's just not the physical space for more than one or two ports, it really is important to not slow everything down just to use an external mouse when you're at your desk.