Getting started with a logic analyzer

From sigrok
Jump to navigation Jump to search

After installing sigrok you can immediately start using sigrok through different frontends. Currently, those are PulseView, sigrok-cli and sigrok-meter.

Capturing Signals

The sigrok suite needs some kind of hardware to interface to the signals you want to examine. While multimeters are certainly supported, we found that most people are currently using logic analyzers based on the Cypress FX2 microcontroller. With fx2lafw, sigrok's open source runtime firmware, any device containing an FX2 can become a powerful streaming logic analyzer.

A variety of compatible low cost chinese made logic analyzer products are available for as little as $10. These can easily be found by searching for 24MHz Logic Analyzer. There are also base-board Cypress FX2 boards such as the Lcsoft Mini Board, which can usually be found by searching for Cypress FX2 Board or similar.

In addition, a good set of quality probe hooks is recommended. The E-Z-Hook XKM series hooks are highly recommended, and are available from resellers such as DigiKey.

Sigrok Signal Capture

For this example we are going to perform an analysis on a signal captured from a Dallas DS1307 I²C Real-Time Clock chip, which measures the time of day.

The sigrok-dumps repository contains a pre-made capture of DS1307 signalling.

We now start up the PulseView sigrok GUI, and open the file sigrok-dumps/i2c/rts_dallas_ds1307/ We can see the captured signal, which features a conversation between a microcontroller and the DS1307, where the microcontroller repeatedly sets and queries the time of day:

Sigrok intro 1-loaded.png

Sigrok Signal Decoding

Now we have the captured signal we can make use of sigrok's support for signal decoding. It allows signal decoding through the use of Python-language Protocol Decoder scripts. This makes it very quick and easy to build powerful decoders for all forms of digital signalling. We hope to be able to build a vibrant decoder library that will contain a large selection of supported chips and protocols.

Because we know that this is I²C signalling, we can add an I²C decoder from the Decoders menu:

Sigrok intro 2-add-decoder.png

Normally we would need to associate the logic probes with the logic analyzer inputs, but in this case, because the probes are already labelled SCL and SDA, PulseView can do this automatically. We can now see that sigrok has decoded the I²C messages and displays them with a blob diagram.

Sigrok intro 3-i2c-decode.png

This is already very useful, and a massive improvement over counting out pulses on an oscilloscope screen. However, sigrok allows us to go one step further with the use of so-called stacked decoders.

To add a stacked decoder we go to the Stack Decoder menu, and select the DS1307 decoder.

Sigrok intro 4-stack-decoder.png

With the stacked decoder added, we can now see that sigrok has decoded the meaning of the I²C commands, so that we don't need to bother searching the reference manual. In this view, we can see that the I²C packet was a command to read the date and time, which was 10.03.2013 23:35:30.

Sigrok intro 5-ds1307-decode.png

Advanced analysis with sigrok-cli

sigrok-cli is a command line front-end for sigrok. Signal analysis via the command line is a powerful method of working, particularly when used with UNIX pipes. Downstream programs and scripts can be used to search, filter, condition or format the data in whatever way is desired.

This blog post demonstrates how to extract a .WAV file from I²S digital sound signalling, for example.

In the case of our DS1307 example, we can also load the file with sigrok-cli. The data is displayed as bits by default:

Sigrok intro 1-sigrok-cli.png

Or we can display the signal as ASCII art:

Sigrok intro 2-sigrok-cli-ascii.png

Now we can decode the I²C packet data, just like in PulseView:

Sigrok intro 3-sigrok-cli-i2c-decode.png

And as before we can decode the DS1307 commands:

Sigrok intro 4-sigrok-cli-ds1307.png

Additionally, it is possible to run analyzers with a live capture such as in this example utilizing the fx2lafw driver and monitoring one side of a SPI transaction:

sigrok-cli --config samplerate=1M --driver=fx2lafw --continuous -P spi:mosi=1:clk=3:cs=4

When combined with tools such as grep, egrep, sed, perl, python, and many others, all kinds of powerful analysis becomes possible.

More examples

UART decoding

This picture shows data from a UART where the signal is inverted and returns to zero after a short pulse instead of staying at the level for the entire duration of a symbol:


To decode this, it is possible to configure the UART decoder to invert the RX channel and sample at the beginning of a pulse (here: 5%) instead of the middle:

sigrok-cli -d fx2lafw -c samplerate=250000 -t D0=r -P uart:rx=D0:baudrate=9600:invert_rx=yes:sample_point=5 -A uart=rx_data --continuous

With some scripting this can be used to continuously log the data on the bus: