After a lot of consideration, I decided to get a Saleae Logic logic analyser to help debug my AVR code. There are a few reviews already floating around but little detail on people’s experiences of actually using the thing, so here are mine.
The package is quite nice. You get the Logic, which is tiny, probes and carry case. The probes are in the forum of a header with 9 wires (8 data + GND, so you have to have a common ground) and individual “E-Z-Hook” clips. The wires are very flexible and easy to work with, and the clips are the best I have come across. They have little pincers which fit nicely on to component legs, breadboard, DIP IC pins etc. They even clip on to trimmed component leads which have been soldered to a PCB, such as the underside of pin headers.
The pincers retract into the clip’s plastic body so they do not short with each other, even on neighbouring pins of a DIP IC. Saleae also sell replacements at reasonable prices, although so far they seem very robust.
The software provided (simply called Logic) is a bit of a mixed bag, but overall not bad. One attractive feature is that it includes decoders for RS232, SPI, I2C and 1 wire protocols at no additional cost. Future updates and new protocols will be free too, and there is an SDK which I have yet to experiment with. You can download the software from the Saleae web site to try out with some demo data.
Logic is written in .NET so takes about 10 seconds to load on my XP x64 system with 6GB RAM and a 3.1GHz Core 2 Quad CPU. Once it’s loaded though it is very quick and responsive. Not all companies bother to support XP x64 (Vista x64 is mandatory for all signed Vista drivers), so it’s nice that Saleae made the effort.
The Logic interface is non-standard, being skinned. Normally that’s a Very Bad Thing as it can break all the familiar UI elements, but fortunately the developers have stuck to the standards here. Navigation via the mouse is pretty fast, with the mouse wheel used for zooming and simple dragging used to scroll. Hovering the mouse over the recorded data gives you various bits of useful information, such as width of bit, period, binary decoding and more via configurable options.
On my system I can reliably run the Logic at 24MHz without issue. In fact, there is little reason to go any lower since 24MHz, the maximum, gives the most accurate timings. Using a lower frequency allows for longer sampling periods, although even at 24MHz several seconds of recording are possible. I was able to capture complete hardware detection, handshake and polling cycles of various games consoles without any problems. The software handles massive amounts of data with little effort.
Triggering is configurable for each data line individually, and sampling starts when any line is triggered. The Logic also gives you up to a few ms before the trigger which is handy. Trigger can be set on either a logic 1 or logic 0, but not on transitions (e.g. low to high, high to low) explicitly. In practice since most buses are held in one state until communication is started it’s not a major issue, and the Logic does not sync it’s clock to the transition edge anyway.
There are a few things missing that would be helpful, such as being able to compare two data sets side by side. You can take screenshots but it’s not quite the same. You are also limited to only two markers which you can place anywhere, but more would be helpful. The view parameters are reset every time you take a reading, so you have to re-position the display and zoom every time. Luckily the defaults are not that bad.
Saleae are quite helpful and were happy to receive my comments. A new version of the software is in the works which promises to address these issues.
Overall I am very impressed. At $150 the price is pretty good. There are seemingly higher spec’ed and cheaper USB logic analysers available from Chinese companies, but when you look closely at them they tend to have either poor software or arbitrary limitations such as the protocols you can decode (with more available at a price). The openness of the Logic via the SDK is quite attractive too.
The usefulness of the device more than justifies the expense if you do much protocol based work. The ability to see exactly what is going on is invaluable, and makes it easy to get all the timing perfect. It’s also very helpful for debugging, since you can use unused pins on your microcontroller as debug outputs that take only one instruction cycle to access. I have found that some protocols I had working already could be made much more compatible just by checking the timings instead of trying to estimate them based on instruction cycle counts.
I hope Saleae are successful with this project, as they deserve to be.