A brief history of USB, what it replaced, and what has failed to replace it
arstechnica.com
arstechnica.com
There's no denying that some of the things that came with USB, like mass storage and video cameras, are really useful, but I don't think the same is true of trying to replace PS/2, serial, and parallel ports. E.g. USB keyboards do not support more than 6 simultaneous key presses without needing some special workarounds, while it is not a problem for PS/2 interface. Serial ports are still widely used, especially for working with embedded hardware - a UART makes for an extremely simple terminal interface. Parallel ports are easy to interface to, and essentially provide GPIO capability - you can use one to flash microcontrollers and EEPROMs, e.g. to recover from bad BIOS flashes and other similarly bricked devices ( http://www.fccps.cz/download/adv/frr/spi/msi_spi.html http://write-code.blogspot.ca/2012/08/parallel-port-spi-flas... ) And from my experience trying to install and troubleshoot a USB printer (the problem was driver-related), I'd rather stay with one connected to a parallel port.
Latencies are also much lower and more predicatable than USB because these are dedicated interfaces; there's a community of hobbyists using parallel ports to control CNC machines, and USB<>parallel adapters will not work for that.
My motherboard still has PS/2, parallel, and serial - and 8 USB ports. A little-known fact is that most if not all of the integrated I/O chips ("SuperIO") used on motherboards still have all the legacy port controllers, but the manufacturers don't bother connecting the pins to anything.
Are USB MIDI piano keyboards[1] implementing one of those workarounds you're speaking of? They can send status of 10 simultaneous keys (10 fingers pressing piano chords.) Or that doesn't count because the multi key detection is done inside the keyboard and embedded into the MIDI data packet? Is that an example of a workaround?
[1]https://www.google.com/search?q=usb+midi+keyboard&tbm=isch
MIDI devices use their own special class instead of HID: http://www.usb.org/developers/docs/devclass_docs/midi10.pdf
Same as how printers or scanners aren't HID, MIDI is different enough that it needs its own protocol.
This isn't totally true. If you want your USB keyboard to work as a boot keyboard (i.e. one that the BIOS understands) then the first 8 bytes of keyboard reports must follow the example (which does have this restriction). After boot though, there will be a Change Protocol request sent from the driver that signals you can use a non-Boot report (which doesn't have this limit).
Alternatively, you can always pack more keys into another report. The BIOS ignores everything beyond the first 8-bytes.
However, gamer keyboards that care about compatibility opt to appear is several independent keyboards, each one responsible for at most 6 keys. I would be surprised if they chose this despite a "much simpler route" such as the one you describe.
Edit: huh, quite a few gamers here :)
I for one am glad that it has been replaced. Those 'good old days' weren't as good as you seem to remember them.
SCSI on the other hand was so temperamental that if you pulled a connection even accidentally you could blow the entire chain of devices.
This can't be stressed enough. The article is all raving about speed, but completely ignoring latency. Which is at least one of the reasons why USB hasn't completely replaced the other most common ports. USB only replaced ports for basic consumer devices without much special requirements in the timing department (and don't get me wrong, it did that in a fabulous way, the 'u' in the name was a good choice)
The most common usb-serial converter from FTDI does not have a completely predictable latency (mainly due to the software stack if I'm not mistaken) which can make it a pain to use with serial device which can only continuously stream data: small buffer size = no go.
Likewise, up until now, we still have some software using the parallel port because it's a readily avaiable GPIO with predictable sub-mSec latency, on Windows. USB doesn't even come close to replacing that, so we're switching to dedicated DAQ hardware.
There's a hack that might help that CNC application: At least one of the common USB<>serial interfaces will spit out a serial data stream at an utterly constant rate. I've used this to control stepping motors. You'd need something at the other end to interpret the serial data, some kind of MCU.
In general, I'd advise implementing USB using the simplest canned solution possible, i.e., and leave "rolling your own" low level implementation for applications that can't be done in any other way. Like you say, the complexity is onerous.
Firewire was never designed to handle modems, mice, keyboards, gamepads, or other low bandwidth things; and it never made the move to try.
On the other hand, USB 1.0 was never suited for high bandwidth devices like hard drives, video cameras, and flatbed scanners. If you remember using USB 1.0 hard drives, you remember how amazingly slow they were.
They were designed for different purposes. Firewire never went 'down', it stayed with high bandwidth devices; but USB moved 'up' with USB 2 to better service the high bandwidth devices people were trying to use (like hard drives).
Firewire 400 was usually faster than USB 2, but cost and ubiquity (and Sony's crazy 4-pin connector) meant it was never big with consumers. But in the end Firewire could only hold onto parts of the professional market for high bandwidth devices.
Thunderbolt is the challenger (really replacement) to FireWire. When USB 4 comes out in two or three years are we going to see articles about how USB defeated Thunderbolt because Thunderbolt keyboards never became popular?
Yeah. The Firewire vs. USB thing is almost always used to add an 'opponent' where there often wasn't one. After all, all articles are required to have an 'opponent'. Sure you could talk about how the old ports hung on amazingly long in the PC space, but it's more fun to throw unnecessary punches at FireWire.
But honestly, no one ever sold a Firewire mouse. I would love to see a link to one. I know there were a few Firewire thumbdrives that were supposed to be amazingly fast, but it's not exactly apples and oranges.
USB wasn't necessary invented as a competitor to Firewire, but it's not a myth that it became one, and it won in the end.
That is a contradiction. In the end, what defeated Firewire (by supplanting its ports) was Thunderbolt, not USB. Machines with Firewire had USB as well, because they served different purposes and were not in competition.
I have some machines with both Firewire and Thunderbolt, and later machines with Thunderbolt. (They all have USB, but nobody is connecting 4k displays via USB.)
Edit: Ah, I see this is a lost cause. This is falling into the "everything PC is good and everything Apple is bad" HN narrative. No point in attempting to point out history either, it appears.
In a few years will you be arguing that Thunderbolt never really competed with USB because it was never meant as a consumer standard?
Firewire/i.Link/IEEE 1394 was also the dominant standard for video streaming. Nobody even tried using USB for that AFAIK.
Light Peak/Thunderbolt replaced both of these uses for 1394, so I think it's fair to say it is a true replacement for it.
As with many hardware-vs-software things (e.g. RAID controllers), Firewire performance was originally much better but USB caught up as processors got faster.
A standard for USB video streaming eventually emerged (at least, I have that option in my kernel), but it's fair to say it was much less popular than 1394. Mostly camcorders (at least consumer ones) became digital themselves, storing data on a filesystem and presenting themselves as a mass storage device.
The core USB descriptors are . . . okay, if you put yourself in the position of a firmware guy with like zero bytes left in code space. The howling gotchas start when you get into the higher level stuff, like multimedia. It takes an unholy amount of firmware and driver-side code to make a UVC device.
Why can't standards be simple?
Some of the standards are examples of craven bad design, too. For instance, there's a standard conversation that I have regarding DFU, Device Firmware Update:
Engineer: "What do you think about DFU?"
Me: "It's a pile of crap. It's 900 feet of rope on a 1,000 foot cliff, and you'll be fixing bugs in firmware update stuff for a long time."
Engineer: "I've been told to use it. It's a standard. How bad could it be?"
Me: "See you in month."
(a month goes by)
Engineer: "Holy shit, you were right. But I've been TOLD to use it, because it's a standard and would save a bunch of time. All we're doing now is fixing firmware update bugs, re-enumeration bugs in the host OS, and I've got a pile of bricked units that I have to go through every morning."
Me: (heavy sigh; this stuff just isn't that hard, okay?)
Variations on this conversation include "Oh, the chip vendor has a DFU implementation already, it's in ROM" [do not walk, RUN away from that chip...], and "Don't worry, we just tell the user to not unplug the device during the update" [bangs head against desk].
The USB 3.0 host controller spec was actually rather nice (even if all the chips I saw had different and sometimes quite spectacular bugs].
But this isn't a common problem. I don't rue the passing of all the nonsense that USB replaced.
I also remember being short of COM ports between modems, drawing tablets, special game controllers that didn't use the joystick port, etc. Installing a serial card for additional ports was one of my first upgrades.
I've seen serial devices that are so picky with timing that they'll work with real serial ports but most USB->Serial adapters cause programming to fail.
"DON'T touch the computer it's burning a CD!"
When we had basic PCs and parallel port you could literally take a resistor + LED, twist them together, stick it into the parallel port itself and with a line or two of MS-DOS shell script make it light up.
The NO$GB emulator used this, for example. And even though it was horrible it was authentically horrible.
So you can charge your device, it just takes ages. And might even discharge slowly if you still have the screen on.