You get what you pay for. Buy cheap, buy twice. I’ve heard them all before. But a couple of my old-but-useful Linux PCs needed an upgrade to high speed USB recently, and I didn’t want to spend much. A quick search on allegro.pl (the Polish equivalent of eBay) turned up just what I was looking for. USB 2.0 adapter cards to fit the now-retro PCI bus, for just 20 złoty, or a bit less than four quid in old money. “Five USB 2.0 ports”, exclaimed the advert, in Polish. “Four external and one internal”. Perfect – I wanted to connect an internal card reader so the internal port was just the ticket.
The cards arrived this afternoon and I examined them. What do you get for four quid? A generic Chinese box and the card in an anti-static bag. No instructions or other such luxuries.
There’s just one chip on the card: a Via VT6212L. Wanting to know what I’d got, I looked it up. It’s still listed on the legacy section of Via’s website. The specification there, though, shows that it’s a 4-port USB controller. So how had my card got 5 ports?
A close look at the PCB tracks on the card reveals all. The internal USB port is wired in parallel with the topmost external port, so you can’t use both at once. Looking more closely, there’s a footprint for a 10-pin Molex header which would be ideal for my internal card reader, but it’s not fitted. Examining the tracks round the header, it turns out that the two USB ports it provides are connected in parallel with the top two external sockets. If you want to use the header, those two external sockets are no use!
Oh well. I can live with 4 ports, and remove or ignore the ones that won’t work. But there’s another design “feature” that came to light while I was examining how the sockets were wired up.
One of the functions of a USB port is to supply power to the device that’s connected. That’s very useful. Last time I designed anything with USB host ports on it for public use, it was important to make sure that power was monitored and limited so that a misbehaving device or damaged cable can’t affect other devices or, worse, cause overheating. All this is written into the USB specification and there are handy chips available to make it easy to implement. But they cost money.
Examining this board, it became clear that the designers took no such precautions. The 5 volt power comes straight from the PCI bus to the USB connectors without so much as a fuse, or even a decoupling capacitor. Any mishap on a USB connector can therefore receive the full force of the PC’s power supply, which can be tens of amps. Yay! A short circuit will at least crash the PC, or even result in melted cables and scorched PCB tracks.
Time for some modifications.
- Remove the top two external USB sockets, which are wired in parallel with the internal connector
- Remove the internal USB connector
- Fit the Molex connector for easy hookup of my card reader
- Cut the track carrying 5V power from the PCI bus to the USB sockets and insert a sacrificial zero-ohm resistor to act as a last-ditch fuse
- Splash out on a few microfarads of decoupling capacitor fitted to the place marked out on the PCB but kindly left free.
Here’s a picture of the results. The board is now in service and working nicely.
Incidentally, I have just retired an old USB1.1 board which shows how it used to be done ‘properly’, in the days when anyone cared about these things.
Note the little 8-pin chip on the left hand side. That’s the one responsible for switching and protecting the power output to the USB sockets. The one fitted is a Micrel M2526, but there’s also space for a Texas TPS2052 which does the same job. Belt and braces!