sigrok-firmware-fx2lafw 0.1.6 released!

We're happy to announce the sigrok-firmware-fx2lafw 0.1.6 release. This is an open-source firmware that allows you to use almost any of the popular Cypress FX2 based devices as logic analyzers. It also supports a number of FX2 based USB oscilloscopes/MSOs like the Hantek 6022BE/BL or the Sainsmart DDS120.

The source code and pre-built firmware files are available from the usual place:

This is a bugfix release (no new device support has been added), mainly fixing an issue that could cause non-working and/or prematurely aborted acquisitions with FX2 based logic analyzers on some systems (bug #655).

Additionally, FX2 based logic analyzers will now toggle pin PA1 during acquisition, and keep it high while idle. On fx2grok-tiny and fx2grok-flat devices there's a LED connected to PA1. Thus, those devices will visually indicate whether a firmware has been uploaded (LED will light up and stay like that while the device is idle). During any acquisition the LED will blink.

The NEWS file contains some more details.


New protocol decoder: morse

libsigrokdecode yet again gained support for another protocol decoder: morse.

This decodes the well-known Morse code signals (recorded via oscilloscope or logic analyzer).

Have a look at the source code and/or the example file in the sigrok-dumps repo for details.

The decoder was contributed by Christoph Rackwitz, thanks a lot!


sigrok at 34C3

If you're at this year's CCC Congress (34C3) December 27-30 in Leipzig, Germany, please feel free to drop by at the sigrok assembly.

We'll be there all 4 days of the congress (with the usual set of random test & measurement devices) for hackathons and random development discussions.

We're always happy to chat with users and contributors, hear about your feature requests and ideas for improvements etc. You can also bring your own devices, chances are we might be able to write drivers for some of the "simpler" devices right then and there, or at least grab some relevant information (photos, lsusb, possibly teardowns if you want).

Assembly location: Exhibition hall 2, c3nav (map). We have 4 seats (2 tables) near a wall.


fx2grok-tiny: an 11x11mm FX2 based Open Hardware logic analyzer for use with sigrok

This blog post won't be about the sigrok software for a change. Instead, it is meant to introduce a little hobby project for a tiny DIY FX2 based Open Hardware logic analyzer (that you can use with sigrok, of course): fx2grok-tiny.

The original plan for a tiny logic analyzer was devised by me (Uwe Hermann) in 2012, but being a sigrok developer, I've concentrated on various more important tasks, features, and bugs in the sigrok stack for quite a while. Near the end of 2017 I finally got around to finishing this project.

So the plan was to make an 8-channel, 24MHz FX2 based logic analyzer that is
* Open Hardware (CC-BY-SA 4.0 license for schematics and layout),
* uses Open Source EDA tools (KiCad),
* uses Open Source software on the PC side (libsigrok, PulseView),
* uses Open Source firmware on the FX2 microcontroller (sigrok-firmware-fx2lafw),
* and is as tiny as possible

As you probably know, there are tons of (larger) FX2 based LAs around already, so there's no point to make just yet another one of those. What's unique about this one is that it's completely open, and it may just be the smallest logic analyzer on the planet (don't quote me on that, though).

The original plan was to fit all required components in a 13x13mm PCB, but the final device ended up being even a little smaller, 11x11mm. The limiting factors are the Cypress CY7C68013A (a.k.a. FX2) chip itself (QFN-56, 8x8mm) plus the micro USB connector and 24MHz crystal, so getting it even smaller than 11x11mm is not easily possible.

I'm using a 2-layer PCB (components on both sides), 5 mil traces, 6 mil trace clearance, 8 mil via drill hole diameter, 5 mil annular ring. The PCB has to be 0.8mm thick so that the 5x2 1.27mm PCB edge connector will fit. All passives are 0402.

The design intentionally sacrifices a lot of things (no EEPROM, no input protection, various Cypress hardware recommendations are ignored) in order to be able to make it very tiny.

This project was a lot of fun for me. Being a software guy, I learned quite a bit about creating schematics and doing PCB layouts (in KiCad), PCB manufacturing details, solder stencil and solder oven usage, and lots more. I also learned that when you screw up the FX2 footprint, you'll get magic smoke (that's why the final version is 0.2, I had to completely reroute the whole PCB after fixing the footprint).

If you're wondering whether you can order fx2grok-tiny devices or bare PCBs, the answer is no. This is a purely non-commercial hobby project by a single guy. You can, however, make your own devices since everything is open and documented.

As an "enclosure" of sorts you can simply use e.g. transparent heatshrink tube. I'm also working on a tiny 3D printable enclosure, we'll see how that goes.

As for the probe cables there are various options as well. You can use a nice Samtec cable or just solder a DIY cable out of generic ribbon cable. In both cases, you'll have to use a crimp tool so you can later attach the usual logic analyzer grippers.

The fx2grok wiki page has a lot more details and photos about the device (including a BOM, you can get pretty much all required parts from e.g. Digikey) and how to assemble it.

You can also get the whole KiCad project, schematics, layout, and Gerber files via git:

 $ git clone git://

There's also a blue LED on the PCB for the obligatory blinkenlights, btw. It'll blink during a logic analyzer acquisition and just light up constantly in idle.

For the future I'm looking into maybe creating an even smaller FX2 based logic analyzer named fx2grok-bga, which employs (you guessed it) the BGA version of the FX2. The BGA chip is 5x5mm (instead of 8x8mm for the QFN version). Soldering this is going to be a bit more tricky though, we'll see how it goes.

There are also other fx2grok variants being worked on, e.g. fx2grok-flat by Piotr Esden-Tempski, more about that in another blog post.


New protocol decoder: maple_bus

If you're into game consoles you might want to check out the latest protocol decoder in libsigrokdecode: maple_bus.

This decodes the Maple bus, the protocol that peripherals of the Sega Dreamcast (controllers, memory cards, others) use.

The protocol decoder was contributed by Marcus Comstedt, thanks a lot!

Marcus also has documented both the low-level Maple bus wire protocol as well as the higher level frame format and the meaning of the bits and bytes involved in great detail.

As usual, there's also an example file in sigrok-dumps as well as a test-case in our sigrok-test repo to go along with it.


New protocol decoder: ds243x

Another protocol decoder recently added to libsigrokdecode is ds243x, which decodes the Maxim/Dallas DS243x 1-Wire EEPROM protocol.

It currently supports the DS2432 (1-Wire 1Kbit protected EEPROM with SHA-1 engine) and the DS2433 (1-Wire 4Kbit EEPROM). Support for additional chips in the same family can be added relatively easily.

The PD stacks on top of the onewire_network decoder (and that one in turn on top of onewire_link).

The protocol decoder was contributed by Kevin Redon (DS2433 support added by Soeren Apel), thanks a lot!


PeakTech 4390A support

It's been a while since support for a new DMM was added in libsigrok. As of yesterday we now also support the PeakTech 4390A multimeter.

This is a rebranded Metex M-3860M (even says so on the device itself, in addition to the PeakTech 4390A rebrand).

It uses the "usual" Metex 14-byte ASCII-based protocol, so adding support for it was simply a matter of adding the respective metadata entries for it in the existing serial-dmm driver.

The initial patch was contributed by Frank Stettner, thanks a lot!


New protocol decoder: eeprom93xx

libsigrokdecode supports another protocol decoder since a little while ago, eeprom93xx.

This is a PD that stacks on top of the previously announced microwire decoder, and provides higher-level 93xx Microwire EEPROM specific decoded data.

As usual, there are some example files in sigrok-dumps and some test-cases in sigrok-test.

The protocol decoder was contributed by Kevin Redon, thanks a lot!

Major sigrok releases: libsigrok, libsigrokdecode, fx2lafw, sigrok-cli, PulseView

We're happy to announce a set of major new releases of the following sigrok projects: libsigrok 0.5.0, libsigrokdecode 0.5.0, sigrok-firmware-fx2lafw 0.1.5, sigrok-cli 0.7.0, and PulseView 0.4.0.

The tarballs are available for download from, as usual.

A lot of work has gone into each of those releases, with many new supported devices, many more protocol decoders, various new GUI features, and lots more. See below for details.


Let's start with the most interesting part for most people, newly supported devices in this release:

  • Logic analyzers: CWAV USBee ZX, DreamSourceLab DSLogic and DSLogic Pro, FTDI LA (simple, limited logic analyzer using FTDI chips directly)
  • Oscilloscopes: Hameg HMO3524, Hantek 6022BE, LeCroy X-Stream series, Rigol DS1074Z Plus, Rigol DS1104Z Plus, Rigol MSO2000A series, Rocktech BM102, Rohde&Schwarz HMO 1002, Sainsmart DDS120
  • Logic analyzers / oscilloscopes (but not MSOs): Hantek 6022BL
  • Programmable power supplies: Agilent N5763A, HP 6633A, Rohde&Schwarz HMC8043
  • Electronic loads: Arachnid Labs Re:load Pro
  • Multimeters: Agilent U1241C/U1242C, Fluke 289, HP 3457A, Keysight U1281/U1282, Metrix MX56C, PeakTech 3330
  • Sound level meters: PCE PCE-322A
  • LCR meters: PeakTech 2170
  • Signal generators: Rohde&Schwarz SME0x series

Pretty much every existing hardware driver has also received numerous fixes and improvements.

The sigrok session file format can now store analog channel data in addition to logic data. It now also has an official IANA-assigned MIME-type associated: application/vnd.sigrok.session.

There have also been quite a few bugfixes, documentation fixes, portability fixes, build system improvements, and so on.

The API has changed since the last major release, you can read up all the details in the API docs.

See the NEWS file for a much more detailed list of changes, or browse the git history for even more details.


Let's start with the newly supported protocol decoders as well:

  • ade77xx: Poly phase multifunction energy metering IC protocol
  • adf435x: Wideband synthesizer with integrated VCO
  • aud: Renesas/Hitachi Advanced User Debugger (AUD) protocol
  • avr_pdi: Atmel proprietary interface for the ATxmega MCU
  • dali: DALI lighting control protocol
  • dsi: DSI lighting control protocol
  • dmx512: Professional lighting control protocol
  • eeprom93xx: 93xx series Microwire EEPROM protocol
  • em4305: EM4205/EM4305 100-150kHz RFID protocol
  • gpib: IEEE-488 GPIB / HPIB protocol
  • iec: Commodore serial IEEE-488 (IEC) bus protocol
  • microwire: 3-wire, half-duplex, synchronous serial bus
  • ps2: PS/2 keyboard/mouse interface
  • rgb_led_ws281x: RGB LED string protocol (WS281x)
  • ssi32: Synchronous Serial Interface (32bit) protocol
  • t55xx: T55xx 100-150kHz RFID protocol
  • wiegand: Wiegand interface for electronic entry systems

And with that, we now support a total of 77 different protocol decoders. There are some more in the pipeline for the next releases, and we get contributed decoders on a pretty regular basis these days, which is awesome! If you're working on additional PDs, please send patches our way!

This release also adds support for the new query-based PD v3 decoder API.

  • Decoders using PD v3 API can benefit from both readability improvements as well as performance improvements. Up to 10x speedup has been measured in some situations (depends a lot on the decoder, the amount of data, the amount of edges in the signals, and the amount of oversampling).
  • The majority of all decoders have been converted to PD API v3.
  • For the time being, both APIs (2 and 3) will remain supported until all decoders have been converted to API version 3. Then, support for API version 2 will be dropped.

There is now support for specifying the (assumed) initial pin states before the first sample that is being decoded. This can be set to 0/low, 1/high, or to "use the same value as in the first sample". This is very useful for some setups where decoders need to wait for edges.

See the NEWS file for a much more detailed list of changes, or browse the git history for even more details.


This release adds open-source FX2 firmware for the Hantek 6022BL USB scope/LA (similar, but not quite compatible to the already-supported Hantek 6022BE).

See the NEWS file for a much more detailed list of changes, or browse the git history for even more details.


The sigrok-cli command-line utility has seen a few improvements and bugfixes as well. 

The new -L|--list-supported option shows the supported drivers, modules, and decoders (this was previously listed as part of the -V|--version output).

There's now support for running multiple decoder stacks on the capture at the same time by specifying multiple -P|--protocol-decoders options; the old -S option is no longer needed and has been removed.

See the NEWS file for a more detailed list of changes, or browse the git history for even more details.


The PulseView GUI has seen a pretty large set of improvements as well.

There's a facility to add multiple sessions and views in PulseView now:

  • Sessions represent individual files/device instances. Each session is represented as a tab in PulseView.
  • Views are different data representations of one specific session. For example, different views of a session can have different zoom levels, can be scrolled to different positions, etc. Each view is a dock window within the respective session's tab.
  • The view docks can be repositioned, resized and extracted out into their own individual windows.
  • Sessions and views are partially saved and restored when PulseView exits/starts. Not all information is restored yet, though (e.g. decoders).

Various new or improved features have been added:

  • Support for saving analog data to .sr files.
  • Support for showing the sampling points in traces.
  • Various UI and usability improvements.
  • Various improvements for analog traces and their presentation.
  • There's a global settings menu now with config options for various PulseView behaviours.

There have also been a large number of other random new features, bugfixes, documentation fixes, portability fixes, build system improvements, and so on.

See the NEWS file for a much more detailed list of changes, or browse the git history for even more details.

The future

As you can imagine there's basically no end to our TODO list for sigrok; as always we want to support more hardware, more input/output modules, more protocol decoders, and so on. Your contributions are highly welcome!

There are also a bunch of regressions and/or known bugs and missing features we'll be working on for the next minor bugfix release. If you notice any issues that haven't been reported yet, please file a bug.

Thanks a lot to everyone who has contributed to any of the sigrok projects to make these releases happen! This wouldn't have been possible without the help of the numerous contributors!


New protocol decoder: ade77xx

libsigrokdecode now supports the ade77xx protocol decoder.

The Analog Devices ADE77xx chips are SPI-based "Poly Phase Multifunction Energy Metering IC with Per Phase Information".

The PD currently decodes register names and values only, more in-depth bit-level decoding can be added later, though.

As usual, there are some example files in sigrok-dumps, test-cases for sigrok-test are pending.

The protocol decoder was contributed by Karl Palsson, thanks a lot!


Subscribe to RSS - blogs