Datasheet
www.tektronix.com/oscilloscopes 3
Debugging Serial Buses in Embedded System Designs
Parallel vs. Serial 
With a parallel architecture, each component of the bus has 
its own signal path. There may be 16 address lines,16 data 
lines, a clock line and various other control signals. Address 
or data values sent over the bus are transferred at the same 
time over all the parallel lines. This makes it relatively easy to 
trigger on the event of interest using either the State or Pattern 
triggering found in most oscilloscopes and logic analyzers. 
It also makes it easy to understand at a glance the data you 
capture on either the oscilloscope or logic analyzer display. For 
example, in Figure 1 we’ve used a logic analyzer to acquire the 
clock, address, data and control lines from a microcontroller. 
By using a state trigger, we’ve isolated the bus transfer we’re 
looking for. To “decode” what’s happening on the bus, all we 
have to do is look at the logical state of each of the address, 
data, and control lines. With a serial bus all this information is 
sent serially on a few conductors (sometimes one). This means 
that a single signal may include address, control, data, and 
clock information. As an example, look at the Controller Area 
Network (CAN) serial signal shown in Figure 2. 
This message contains a start of frame, an identifier (address), 
a data length code, data, CRC, and end of frame as well as a 
few other control bits. To further complicate matters, the clock 
is embedded in the data and bit stuffing is used to ensure an 
adequate number of edges for the receiving device to lock to 
the clock. Even to the very trained eye, it would be extremely 
difficult to quickly interpret the content of this message. Now 
imagine this is a faulty message that only occurs once a day 
and you need to trigger on it. Traditional oscilloscopes and 
logic analyzers are simply not well equipped to deal with this 
type of signal. 
Even with a simpler serial standard such as I
2
C, it is still 
significantly harder to observe what is being transmitted over 
the bus than it is with a parallel protocol. 
I
2
C uses separate clock and data lines, so at least in this case 
you can use the clock as a reference point. However, you still 
need to find the start of the message (data going low while the 
clock is high), manually inspect and write down the data value 
on every rising edge of the clock, and then organize the bits 
into the message structure.
It can easily take a couple of minutes of work just to decode 
a single message in a long acquisition and you have no idea 
if that’s the message you are actually looking for. If it’s not, 
then you need to start this tedious and error prone process 
over on the next one. It would be nice to just trigger on the 
message content you are looking for, however the state and 
pattern triggers you’ve used for years on scopes and logic 
analyzers won’t do you any good here. They are designed to 
look at a pattern occurring at the same time across multiple 
channels. To work on a serial bus, their trigger engines would 
need to be tens to hundreds of states deep (one state per bit). 
Even if this trigger capability existed, it would not be a fun task 
programming it state-by-state for all these bits. There has to 
be a better way! 
There is a better way. The following sections highlight how 
Tektronix oscilloscopes
1
 can be used with some of the most 
common low-speed serial standards used in embedded 
system design.
Figure 2. One message acquired from a CAN bus. Figure 3. One message acquired from an I
2
C bus.
1 
Support for serial bus standards vary depending on the oscilloscope model. For a table of buses supported by different Tektronix oscilloscopes, please see Appendix A or 
visit www.tektronix.com.










