Read That Datasheet
Abstract
This is the first of Jack Ganssle's columns in EDN (the main magazine
- others appeared in EDN Products earlier). Its general thesis
is to never assume any signal is at a particular level. This is
not really a TTL world anymore, yet far too many designers get
into trouble making assumptions that it is.
Published in EDN in August, 1994.
 |
For hints, tricks and ideas about better ways to build embedded systems, subscribe to The Embedded Muse, a free biweekly e-newsletter. No hype, just down to earth embedded talk. 23,000 other engineers subscribe. It takes just a few seconds (all we need is your email address, which is shared with absolutely no one) to subscribe to the Embedded Muse. |
When Steve Leibson, Editor-in-Chief of EDN, asked me to write
a monthly column about embedded system hardware issues I told
him I wasn't sure I had enough to say to fill 2000 words a dozen
times a year. Besides, this business changes so fast that all
of us are constantly on the verge of becoming technological dinosaurs.
Still, some basics of engineering never change, so I agreed to
try and pound out a few tarnished pearls of wisdom each month.
I've been fortunate in being a part of the microprocessor revolution
almost from the start. My first job as a (very) junior engineer
was the design of 8008-based systems. In only a couple of decades
this industry has mushroomed from tiny embedded systems with .05
MIPs CPUs running 2k programs to today's inexpensive 50 MIPs+
designs with millions of lines of code. It's amazing and breathtaking
to see how far we've come in so little time. While the popular
press loves to babble on about the information society, focusing
on the widespread availability of the cheap PCs that, to a non-engineer,
look like computers, I suspect history will show that the true
revolution in late 20th century civilization was the introduction
of embedded microprocessors in every bit of our lives. If we could
hear the hum of embedded processors quietly computing we'd be
overwhelmed by a roar of this new paradigm of society.
It's a terrible tragedy that the great mass of humankind have
no understanding of how their lives are subtly enhanced by the
embedded microprocessor. Instead most fret and fume if the ATM
machine takes an extra second to dispense cash (or issue that
oh-so-dreaded "insufficient funds" message), yet few
understand that the machine is verifying the card, communicating
with mainframes at Visa Central, debiting accounts, and electronically
adjusting balances at banks all over the country, just to drop
some pocket money into one's impatient hands.
This lack of understanding creates a widespread misconception
about the nature of the computer industry. 8 bit designers can't
get no respect! After all, it's a 32/64 bit RISC/SPARC/DSP high
end 100 MIPs world... ain't it?
Well, no, it ain't. High end CPUs account for a minuscule fraction
of the entire computer business. The tens of millions of 386 and
up processors shipped are practically an insignificant blip compared
to the five billion processors sold each year... most of which
are 4 or 8 bit machines; virtually all of which are buried inside
millions of embedded systems.
Even in technical publications fast and powerful processors get
the glory - no doubt a regression to our past loves of fast cars
and flashy clothes. Just as Hollywood's favorites garner the majority
of attention from the press while we, the less charismatic and
maybe less beautiful people, carry on the real work of society,
so do little CPUs shoulder most of the computational burden of
the world.
Similarly, while we read of vast team design efforts, of the thousands
in involved in coding big weapon systems or the latest Lotus masterpiece,
I believe that most embedded systems are born of solitary designers
and programmers working alone or with just a few colleagues.
And so I believe the press skews our perception of ourselves.
Take heart, ye clever inventors changing the world! You are not
working on obsolete technology just because your processor is
a Z8 or 6805. Your tiny project team is not a throwback to the
days of yore. Don't be lulled into thinking you are out of the
mainstream!
Daily I talk to dozens of design engineers in all corners of the
globe. It seems the happiest, those most content with this profession,
are those working on smaller projects, in small groups, where
their impact is immediately important. And so, after this long-winded
introduction, I make the following disclaimer: since 4, 8 and
16 bit systems are just as important, and a lot more fun, than
the minuscule high end of the market, this column will focus mostly
on these sorts of systems.
Clocks
I see a lot of embedded systems in my travels, and get to take
a look under-the-hood at most of these. Many are wonderfully designed;
some are not. One persistent problem I see is a total disregard
for data sheets.
For a number of years embedded systems lived in a wonderful era
of compatibility. Just about all the signals on any logic board
were relatively slow and generally TTL compatible. This lulled
designers into a feeling of security, until far too many of us
started throwing digital ICs together without considering their
electrical characteristics. If a one is 2.4 volts and a zero 0.7,
if we obey simple fanout rules, and as long as speeds are under
10 Mhz or so this casual design philosophy works pretty well.
Unfortunately, today's systems are not so benign.
In fact, few microprocessors have ever exclusively used TTL levels.
Surprise! Pull out a data sheet on virtually any microprocessor
and look at the electrical specs page - you know, the section
without coffee spills or solder stains. Skip over those 300 tattered
pages about programming internal peripherals, bypass the pizza-smeared
pinout section, and really look at those one or two pristine pages
of DC Specifications.
Most CPUs accept TTL-level data and control inputs. Few are happy
with TTL on the clock and/or reset inputs. Each chip has different
requirements, but in a quick look through the data books I came
up with the following:
8086: Minimum Vih on clock: Vcc-0.8
386: Minimum Vih on clock: Vcc-0.8 at 20 Mhz
3.7 volts at 25 and 33 Mhz
Z80: Minimum Vih on clock: Vcc-0.6
8051: Minimum Vih on clock and reset: 2.5 volts.
In other words, connect your clock and maybe reset input to a
normal TTL driver, and the CPU is out of spec. The really bad
news is that these chips are manufactured to behave far better
than the specs, so often they'll run fine despite illegal inputs.
If only they failed immediately on any violation of specifications!
Then, we'd find these elusive problems in the lab, long before
shipping 1000 units into the field.
Fully 75% of the systems I see that use a clock oscillator (rather
than a crystal) violate the clock minimum high voltage requirement.
It's scary to think we're building a civilization around embedded
systems that, well, may be largely misdesigned.
If you drive your processor's clock with the output of a gate
or flip flop, be sure to use a device with true CMOS voltage levels.
74HCT is a good choice. Don't even consider using 74LS without
at least a heavy- duty pull-up resistor.
Those little 14 pin silver cans containing a complete oscillator
are a good choice... if you read the data sheet first. Many provide
TTL levels only. I'm not trying to be alarmist here, but look
in the latest DigiKey catalog - they sell dozens of varieties
of CMOS and TTL parts.
Clocks must be clean. Noise will cause all sorts of grief on this
most important signal. It's natural to want to use a Thevenin
termination to more or less match impedance on a clock routed
over a long PCB trace or even off board. Beware! Thevenin terminations
(typically a 220 ohm resistor to +5 and a 270 to ground) will
convert your carefully-crafted CMOS level to TTL.
Use series damping resistors to reduce the edge rate if noise
is a problem. A pull-up might help with impedance matching if
the power supply has a low impedance (as it should).
A better solution is to use clock-shaping logic near the processor
itself. If the clock is generated a long way away use a CMOS hystersis
circuit (like a 74HCT14) to clean it up. The extra logic adds
delay, though. If your system requires clock synchronization then
use a special low-skew clock driver made for that purpose.
In slower systems -- under 20 Mhz or so -- I prefer to design
circuits that don't depend on a synchronous clock. What happens
if you change to a second sourced processor with slightly different
timing? Keep lots of margin.
Never drive a critical signal like clock off board without buffering
it. There are a very few absolutely critical signals in any system
that must be noise-free. Examine your design and determine what
these are, and take appropriate steps. Clock, of course, is the
first that comes to mind. Another is ALE (Address Latch Enable),
used on processors with a multiplexed address/data bus. A tiny
bit of noise on ALE can cause your address register to latch in
the middle a data cycle, driving an incorrect address to the memories.
OK - so now your voltage levels are right. Go back to the data
sheet and make sure the clock's timing is in spec.
The 8088 requires a 33% clock duty cycle. Sure, it's a little
odd, but this is a fundamental rule of nature to 8088 designers.
Other chips have tight duty cycle requirements as well.
Rise and fall times are just as important, though difficult to
design for. Some chips have minimum rise/fall time requirements!
It's awfully hard to predict the rise/fall time for a track routed
all over the board. That's one attraction of microprocessors with
a clock-out signal. Provide a decent clock-input to the chip,
connect nothing to this line other than the processor, and then
drive clock-out all over the board.
Motorola's 68HC16 pulls a really neat trick. You can use a 32768
Hz standard watch crystal to clock the device. An internal PLL
multiplies this to 16 Mhz or whatever, and drives a clock output
to feed to the rest of the board. This gets around many of the
clock problems, and gives a "free" accurate time-of-day
clock source.
Reset
The processor's reset input is another source of trouble. Like
clock, some processors have unusual input voltage requirements
for reset. Be wary.
Other chips require synchronous circuits. The old Z280 had a very
odd timing spec, clearly spelled out in the documentation, that
everyone ignored only to find massive troubles getting the CPU
to start. I think every single Z280 design in the world suffered
from this particular ill at one time or another.
Sometimes slew rate is an issue. The old RC startup circuit generates
a long ramp that some processors cannot tolerate. You might want
to feed it into a circuit with hystersis, like a Schmidt Trigger,
to clean up the ramp.
The more complex CPUs require a long time after power-up to stabilize
their internal logic. Reset cannot be unasserted until this interval
goes by. Further complicating this is the ramp-up time of the
system power supply, as the CPU will not start it's power-up sequence
until the supply is at some predefined level. The 386, for example,
requires 2**19 clock cycles if the self-test is initiated before
it is ready to run.
Think about it: in a 386 system four events are happening at once.
The power supply is coming up. The CPU is starting it's internal
power-up sequence. The clock chip is still stabilizing. The reset
circuit is getting ready to unassert reset. How do you guarantee
that everything happens to spec?
The solution is a long time delay on reset, using a circuit that
doesn't start timing out till the power supply is stable. Motorola,
Dallas, and others sell wonderful little reset devices that clamp
until the supply hits 4.5 volts or so. Use these in conjunction
with a long time constant so the processor, power supply, and
clocks are all stable before reset is released.
When Intel released the 188XL they subtly changed the timing requirements
of reset from that of the 188. Many embedded systems didn't function
with this "compatible" part simply because they weren't
compliant with the new chip's reset spec. The easy solution is
a three-pin reset clamp.
The Moral
Always read the data sheets. Don't skip over the electrical specifications
with a mighty yawn. Those details make the difference between
a reliable production product and a life of chasing mysterious
failures.
One of my favorite bumper stickers reads "Question Authority".
It's a noble sentiment in almost all phases of life... but not
in designing embedded systems. Obey the specifications listed
in the chip vendors' datasheets!
If you've read many annual reports from publicly held companies
you know that the real meat of their condition is contained in
the notes. This is just as true in a chip's data sheet. It seems
no one specifies sink and source current for a microprocessor's
output, but the specification of the device's Vol and Voh will
always reference a note that gives the test condition. This is
generally a safe maximum rating.
Despite our apparent digital world, the harsh reality is that
every component we use pushes electrons around. Electrical specifications
are every bit as important to us as to an analog designer. This
field is still electronic engineering filled with all of the tradeoffs
associated with building things electronic. Ignore those that
would have you believe that designing an embedded system is nothing
more than slapping logic blocks together.
|