Error message

  • Warning: count(): Parameter must be an array or an object that implements Countable in theme_table() (line 1998 of /data/sigrok.org/apache/blog/includes/theme.inc).
  • Warning: count(): Parameter must be an array or an object that implements Countable in theme_table() (line 2061 of /data/sigrok.org/apache/blog/includes/theme.inc).
  • Deprecated function: implode(): Passing glue string after array is deprecated. Swap the parameters in drupal_get_feeds() (line 394 of /data/sigrok.org/apache/blog/includes/common.inc).

New protocol decoders: ARM TPIU, ITM, ETMv3

We're happy to announce that libsigrokdecode now supports three new, closely related, protocol decoders: arm_tpiu, arm_itm, and arm_etmv3.

Here's a quick overview of the protocols that are decoded:

  • The TPIU (Trace Port Interface Unit) is a stream formatter and multiplexer that combines data from several sources into one stream. It is used inside an ARM-based microcontroller or SoC to combine ITM and ETM trace output into a single port.
  • ARM ITM (Instrumentation Trace Macroblock) allows tracing of software events, and also with the help of DWT (Debug, Watchpoint and Trace) the tracing of exceptions and data watchpoints. It also supports periodic sampling of PC values.
  • ARM ETM (Embedded Trace Macroblock) allows tracing of every instruction executed on the CPU. Currently only ETM version 3 (the newest version, present in Cortex-M3 and other ARMv7-m) is supported.

The data is captured on the SWO (TRACESWO) pin, e.g. on commonly available ARM SWD (serial wire debug) programmers/debuggers. Hint: libsigrokdecode also ships with an SWD decoder, if you're interested in that...

You can test the decoders with some sample files from the sigrok-dumps repository. If you optionally supply the location of ARM (cross-)toolchain utilities such as arm-none-eabi-objdump or arm-none-eabi-addr2line you can decode even more information, including source code snippets (see screenshot below)!

That opens up a whole new bunch of debugging possibilities; you can basically debug your code by not only tracing instructions but also tracing them in relation to other signals you're capturing with your logic analyzer at the same time (e.g. GPIOs you're toggling, UART, SPI, I²C, or whatever else may be going on in the system you're debugging)!

All three decoders were contributed by Petteri Aimonen (including sample *.sr files and a small test-suite for our sigrok-test repository), thanks a lot!

Happy debugging!