New Stacking for PC/104: USB Grows Up – and Up and Up
Speeding past bus limitations for a proven and popular form-factor, the addition of stackable USB connectivity to PC/104 keeps real estate small, vastly increases bandwidth and makes the system processor independent.
JIM TURLEY, MICRO/SYS
Page 1 of 1
A sure sign of valuable real estate is when the buildings start getting taller. Manhattan, Tokyo, Los Angeles—they all boast tall skyscrapers that attest to their ultra-premium property values. When commercial developers stack floor upon floor it’s a sure sign that you’re in the right place.
The same is true of embedded systems. A tower of tightly stacked boards means you’re looking at some desirable real estate. Some of the best and most interesting embedded systems have the least amount of open space to spare. Industrial robots, retail kiosks, vision systems, aerospace simulators—they all put a premium on real estate. Packing more computing power into less space is what it’s all about. Maximizing MIPS per millimeter is the name of the game.
That’s why compact board-level buses are so popular among embedded developers. They fill a need for premium performance wedged into premium real estate. PC/104, CompactPCI and other bus standards all provide a way to build modular custom computers for a range of embedded systems. Need more performance? Add another board. Need new I/O interfaces? Add a board for that. Modular boards provide bite-sized chunks of embedded goodness for designers around the world.
Part of the charm of board-level modules is their standardization. Modules from one manufacturer will (theoretically, at least) plug and play with boards from any other manufacturer. That compatibility comes from standardization—along with a liberal sprinkling of trial and error. After enough years, the compatibility bugs have been ironed out and everyone’s modules play nicely together.
By which time all the technology is obsolete. Technical progress moves so rapidly in our industry that chips, buses and interfaces tend to have short half-lives. By the time an “open” bus standard has been tweaked, revised and sufficiently clarified it’s a decade old and no longer terribly interesting. Worse, the standard itself may be tied to a dying platform or chip family. VMEbus hit its stride just as the Motorola 68000 family was on its last legs. Multibus and other old bus standards are hopelessly tied to obsolete microprocessors or interfaces. Apple’s Macintosh has evolved through three different microprocessor families, and PC expansion cards change interfaces every few years.
Out with the Old, In with the New
One of the more popular modular board standards is PC/104, with a name that makes its ancestry clear. It’s a 104-pin embedded version of the IBM PC’s old expansion bus. PC/104 boards measure about 3.5 inches on a side and they stack neatly one atop the other like high-rise electronic office buildings. The stack shares a single bus, sort of a vertical implementation of an IBM PC/AT’s motherboard. With its compact size and PC compatibility, PC/104 became very popular indeed among developers who didn’t want to create their own boards from scratch.
As useful as it is, PC/104 is also inextricably tied to that old PC/AT motherboard design. Now that the standard is set, it’s counterproductive to change it, even though the PC expansion bus is long gone. Called ISA at the time—for industry-standard architecture—it’s now anything but. PCs and PC silicon have moved on from ISA to PCI (with a detour at Micro Channel along the way) to AGP and PCI Express. Presumably, there’ll be another new PC expansion “standard” in a few years.
In the midst of all this leap-frogging of standards came the ambitiously named USB, the “universal serial bus.” Unlike the motherboard buses, USB has shown real staying power and is now almost as universal as its name implies. USB interfaces show up on everything from PCs and Macs to digital cameras, handheld devices, instruments, data-acquisition systems and storage media. It’s small, it’s fast, and it’s got built-in “plug and play” characteristics that make it popular with users and developers alike.
In a moment of Frankensteinian genius, a group of board makers combined their favorite parts of PC/104 with features of USB to create—StackableUSB. The evocative, if uncreative, name describes it pretty well. It’s a version of the USB standard created for modular board-level systems. In fact, it’s mechanically identical to PC/104 but replaces the wheezing PC/AT bus with the more modern USB interface. Same body, different brain.
Okay, so USB is hardly brand spanking new, but while ISA has one foot in the grave, USB is still growing. New PCs haven’t included ISA expansion slots for years. Heck, they don’t even have PCI slots any more. But they all sprout USB ports front and back, usually a half-dozen of them. It’s not hard to see which way the world is going.
Racks, Screws and Electrons
StackableUSB uses the same physical form-factor as PC/104, so the boards will at least look familiar to PC/104 aficionados. More important, USB stacks can use the same enclosures, mounting hardware, cooling plenums, wiring harnesses, and whatever else that already exists for PC/104 installations.
The stack can have a motherboard at the top or bottom if you wish, or the modules can be used stand-alone. Up to 16 boards will go into a StackableUSB stack (Figure 1) and each board can draw almost 1A from the +5V and +3.3V supplies.
Where StackableUSB differs from PC/104, of course, is in its electrical interface. That’s taken straight from the USB 2.0 specification, so it’s fast when it can be and tolerant of older USB 1.1 devices when it has to be. It’s also compatible with hundreds of USB components, soft IP (intellectual property) cores and peripherals. Peripheral chips aren’t really available with ISA/x86 bus interfaces any more; they generally have USB or PCI interfaces instead. Obviously, this makes it a whole lot easier to find chips for your USB stack than it does for any ISA-based design.
USB is both faster and smarter than traditional processor buses. For example, it has some built-in error-recovery mechanisms. USB is modestly fault tolerant, in the sense that it accommodates noise on the USB lines, detects transmission errors, and retries operations when necessary. Those are all useful features in noisy or safety-critical embedded applications.
So how fast is StackableUSB? That’s a tricky question because the answer depends on how your boards are designed, what chips you use, and how fast you want them to be. Bandwidth and throughput are all under the control of the system designer.
Paradoxically, the two-wire USB bus is faster than the 16-bit ISA bus in most cases. (Actually, PC/104’s bus is a lot wider than that because it includes a gaggle of control and handshake signals in addition to its 16 data lines.) In all, there are more than 100 signal lines passing through every PC/104 board, while StackableUSB has just two per link (plus power and ground). Apart from everything else, this makes the connector a whole lot smaller, so there’s more room for components and less wasted on overhead.
Instead of a single shared bus, USB follows a hub-and-spoke (star) topology. It’s more of a network than a bus, so it fans out differently (Figure 2). This is all for the good; you get more total bandwidth with USB and the bandwidth isn’t shared the same way as with PC/104.
The standard USB specification defines the concept of root hubs, which are sort of like bus masters. (In a PC or Mac, the computer itself is the root hub while the keyboard and mouse are client nodes connected to the hub.) You can have several root hubs and each one increases total bandwidth. If they’re older USB 1.1 hubs, they provide 12 Mbits/s of bandwidth to their downstream peripherals. Newer USB 2.0 root hubs, however, can provide a whopping 480 Mbits/s of bandwidth. A fully loaded StackableUSB system could have as many as 16 root hubs—a total of 7.8 Gbits/s of aggregate bandwidth!
We can also look at this another way. Even though the bandwidth of an individual USB 1.1 channel is less than that of the PC/104 bus, as Figure 3 shows, the bandwidth of the entire USB stack is greater. That means if you’re only connecting two boards together, PC/104 could be faster. But after the third or fourth board in the stack, USB offers more headroom. And if you’re using high-speed USB 2.0 chips, it’s a lot more.
The upshot is, StackableUSB bandwidth goes up, not down, as you add boards. Other buses share their bandwidth among boards, so each new board gets a comparatively smaller slice of the bandwidth pie. It also means that one data-hungry bus hog can adversely affect all the other devices. StackableUSB goes the other way: adding boards with hub chips increases bandwidth instead of usurping it from the others.
Processors and Software
One other characteristic of StackableUSB is less obvious: it’s processor independent. Developers don’t have to use x86 processors. They certainly can use Intel or AMD chips, they just don’t have to. Having a choice of microprocessor family is all very well, but a choice of software (including operating system and middleware) is even better. Although x86 processors are popular and well supported, they’re also victims of their own success. Their life cycles are driven by the PC market, not the needs of embedded designers, so Intel and AMD chips tend to be expensive, power-hungry and have short lives. Pentium, Opteron and Core 2 Duo go through product cycles faster than a fashion designer, so getting a stable long-term supply of these chips is problematic. No sooner do you design a system around one processor than it becomes obsolete, replaced by a faster, bigger and more expensive version. StackableUSB breaks the connection between bus standard and processor family. It allows boards and systems to be based around PowerPC, ColdFire, ARM, MIPS, or just about any other processor—or combination of processors.
With processor independence comes software independence. Here the software issue becomes a double-edged sword. To reap USB’s plug-and-play benefits you need a lot of software. That “anytime, anywhere” connectivity doesn’t happen by magic. USB drivers are actually pretty complicated because they need to recognize all sorts of potential devices that might be plugged into their bus. They have to configure new devices on the fly without any jumpers, switches or hardware resets. That’s tough to do.
On the other hand, most of that work has already been done. Most USB chips and peripherals either come with USB drivers or will enjoy native operating system support. Windows and MacOS obviously have tons of USB support built in, but many embedded operating systems also understand and support USB. You might have to write the odd driver here and there, but chances are you’ll find off-the-shelf support for many mainstream chips and peripherals.
Progress is a funny thing. On the one hand, we want all the benefits of newer technology: faster speeds, lower power, better integration, and so on. On the other hand, we cling to established standards, products and habits. It’s a combination of innovation and inertia in equal measure. StackableUSB takes advantage of that: a combination of old and new that mates the mechanical popularity of PC/104 with the electrical popularity of USB. It promises to make embedded design easier and more rewarding for developers for many years to come.