This three-part article is abstracted from the book "Embedded Hardware Know It All", which provides a "360 degree" view from best-selling authors.
I recommend x86 as the platform of choice if you are either building just a few of your appliance
or if you are prototyping something and want to pull together a lot of miscellaneous
hardware features without spending a great deal of time debugging the hardware design. It's
also a good choice for an initial production run that you can ship to early adopters while you
are developing a cheaper second-round customized hardware design. There are other special
situations where you might find x86 to be a good choice, but these are the major ones.
Of course, you aren't restricted to using Intel parts; for instance, one x86-compatible part that
is fairly popular in embedded applications is the Geode series from National Semiconductor
(based on intellectual property acquired from Cyrix). This part was designed for Internet
appliances and can be found in several such devices on the market today. There are also
numerous single-board computers built around Geode chips, with various peripheral functions
according to the intended application. Geode was also used as the reference platform to
develop and showcase the new Microsoft Smart Display device, so the product family is likely
to be supported for quite a while.
Using x86 also doesn't mean that your device needs to have a large PC motherboard and
expansion cards inside it. Unless your needs are highly specialized (and perhaps even if they
are), it is probable that you will be able to find a single-board computer with most or all of
your required hardware already integrated. These boards range in size from "biscuit PCs" with
the same footprint as a 5.25" disk drive down to a fairly new standard (consisting of a user-designed
baseboard holding an off-the-shelf module containing the CPU and some peripherals)
usually referred to as ETX. Embedded computer boards like this typically have PC/104
expansion buses (a condensed, stackable version of ISA using 100 mil headers) or Mini-PCI.
Some of the larger boards will have regular PCI slots, but these start to make the overall
system unavoidably rather bulky, approaching the size of a normal slim-line PC.
Note that PC-compatible SBC pricing falls into two widely separated categories: industrial
and commercial. Industrial SBCs are extremely expensive – at least twice the cost of commercial versions. Commercial SBCs, though substantially more expensive than consumer-grade
PC hardware of the same nominal specifications, are a much better choice for the budget-constrained
purchaser. Many SBC vendors specialize in industrial automation only, so if the
prices you are being quoted seem unrealistically high, you should investigate other vendors
before concluding that x86 is too expensive for your project.
Moving onto the RISC platforms, MIPS, SuperH and PowerPC are good candidates for many
applications, and in particular the SuperH family is large and contains a wide variety of useful
devices, though MIPS seems to be a more widely licensed core in third-party ASICs and
ASSPs. PowerPC seems to be found mainly in applications requiring very high performance.
In evaluating all these parts for various projects, I have found them to be fairly difficult to
develop with on a shoestring budget; evaluation hardware is usually costly, and most variants
of these parts are not readily available to buyers who are unable to demonstrate a need for
large quantities. However, all these cores are likely to remain available and well supported for
the foreseeable future, so they are all viable choices as long as you can obtain development
systems and parts.
At least in the case of SuperH and MIPS, your cheapest path to a prototype based on these parts
is generally to repurpose some existing piece of hardware such as a PDA; for PowerPC, I would
suggest buying a commercial single-board industrial control computer based around the chip
of interest. Be warned that this is likely to be expensive; PowerPC boards don't have the same
kind of mass-market pricing as x86-compatible boards and you can expect to pay between two
and three times as much for a PowerPC SBC as for a comparable x86-based board.
Bearing the above discussion in mind, unless some of the Intel arguments apply to your case,
my primary recommendation for a 32-bit embedded platform is ARM. This architecture has
many important advantages (some of these are also applicable to the other RISC platforms
mentioned above, of course):
- It is a mature, well-understood architecture with a solid engineering history and many
refinements. The large number of current licensees and now-shipping parts makes
ARM a very safe bet for future availability.
- The cores are small and have excellent power consumption vs. performance
characteristics.
- Many features – coprocessors, external bus widths, memory-management unit, cache
size, etc. – are tunable by the chip designer, meaning that a core variant can be found
to meet almost any performance/size/power requirement.
- There are a huge number of attractively priced standard, custom, and semi-custom
parts on the market with a wide variety of integrated peripherals.
- Since ARM provides reference designs for many different peripherals as well as the
core itself, there are often similarities in peripheral control on different ARM implementations,
even from different vendors. To take a trivial example, code to send data
out of a serial port can usually be ported from one ARM variant to another with little
effort.
- Partly due to the above factors, there is a huge amount of freely available intellectual
Property – reference designs, ready-ported operating systems, etc. – already extant for
this core.
The cliché is that "ARM is the 32-bit 8051," meaning that it is the universal 32-bit microcontroller core known to everybody and used everywhere. This is barely an exaggeration; ARM is
to the embedded world what x86 is to the desktop PC world.
It's important to keep your priority – low overall development cost – in sight at all times during the selection process. For example, I almost always reject parts that are only available in
BGA packages, because it is practically impossible to hand-build prototypes around these
devices, and it's costly to hire an external contract assembly house to build your initial development
boards. You'll also need to consider the price and availability of evaluation hardware
for the devices you're comparing, as well as the complexity of building a working hardware
platform of your own. For example, a chip that requires complex analog support circuitry and
careful PCB layout will be very difficult to work with in a hand-prototype environment. For
such a chip, you would quite likely be better off investing in an expensive known-good evaluation
board before attempting to build your own PCB. Diving straight into the deep end by
designing your own board around such a part is likely to be costly because of the need for several
respins of your board to resolve layout-related and other analog issues.