Have you ever wondered if you could use the AVR debug probe you found in your Grandpa’s spare parts box to debug your latest hardware project? Here comes the comprehensive list of AVR debug probes, which will answer such questions.
Terminology
First, you may wonder whether there are any differences between debug probes, debug adapters, debuggers, and ICEs (In-Circuit Emulators). The short answer is: These days, the terms are used synonymously.
Historically, In-Circuit Emulators have been complex electronic circuits that replaced an actual microcontroller, emulating the behavior of the MCU and allowing, at the same time, to inspect the inner workings of the MCU. Atmel, for example, sold such an ICE called AVR ATmegaICE for roughly US-$ 4000 in the 90’s.
Over time, it became possible to include debugging circuitry on the production chips to allow for what is called on-chip debugging (OCD). With that, you do not need to replace the microcontroller, but you only need some free pins to interact with the OCD module on the chip. As the interface, often the JTAG transport mechanism is used. In 2001, AVR launched its first debugger called AVR JTAG ICE. In its manual, they explain
… how On-chip Debugging differs from other In-circuit Emulator (ICE).
So, on-chip debugging is viewed as just another form of in-circuit emulation, although nothing is emulated anymore. All execution is performed on the chip itself. Nevertheless, Atmel and Microchip continued to call their debuggers ICEs.
In the ARM ecosystem, these gadgets are usually called debug adapters or debug probes. All in all, it usually refers to the same thing: It is a piece of hardware that provides an interface between the MCU and the host, on which the debugging software, e.g., the GDB debugger, is running. We will use the term debug probe throughout the text.
Proprietary Atmel/Microchip debug probes
The following table gives an overview of all AVR debug probes that have been marketed by Atmel and later Microchip.
| Name | Launched | Obsolete | EDBG protocol | AVaRICE support | Studio 7 support | MPLAB X support | Supported interfaces |
|---|---|---|---|---|---|---|---|
| AVR JTAG ICE | 2001 | Yes | No | Yes | No | No | only JTAG |
| AVR JTAGICE mkII | 2004 | Yes | No | Yes | Yes | No | all but UPDI |
| AVR Dragon | 2006 | Yes | No | Yes | Yes | No | all but UPDI |
| AVR ONE! | 2008 | Yes | No | No | Yes | No | all but UPDI |
| AVR JTAGICE3 | 2011 | Yes | Yes | Yes | Yes | No | all |
| Atmel-ICE | 2014 | No | Yes | Yes | Yes | Yes | all |
| Atmel Power Debugger | 2017 | No | Yes | Yes | Yes | Yes | all |
| MPLAB PICkit 4 ICE | 2018 | No | Yes | Yes | Yes | Yes | all |
| MPLAB SNAP | 2018 | No | Yes | Yes | Yes | Yes | all |
| MPLAB PICkit 5 ICE | 2023 | No | No | No | No | Yes | all |
| MPLAB 5 ICD | 2023 | No | No | No | No | Yes | all |
| MPLAB PICkit Basic ICE | 2025 | No | No | No | No | Yes | all |
The column EDBG protocol is synonymous with support by the GDB servers Bloom and PyAvrOCD.
While most of the older debug probes are still supported by Microchip Studio 7 and the open-source system AVaRICE, most of them lack support for the more recent UPDI debug interface. The AVR ONE!, one of the more expensive tools (> € 600), did apparently never receive any support from AVaRICE. At least, I could not find any evidence in the source code or the documentation that this debug probe is supported. This is probably the case because no open source enthusiast bothered to buy one.
Furthermore, the first of the probes, the AVR JTAG ICE, is severely limited in what chips it can connect to. The AVaRICE man page mentions just: AT90CAN128, ATmega128, ATmega16, ATmega162, ATmega169, ATmega32, ATmega323, ATmega64.
Finally, one should mention the hardware debuggers integrated on development boards, such as ATmega328P Xplained Mini boards. Here, the debug probe is part of the board, and one does not have to worry about how to connect the probe and set the right fuses.
Open-source probes and clones
Of course, people also tried to come up with solutions that are cheaper than the original debug probes, or that are not tied to the proprietary IDEs offered by Atmel and Microchip. In addition to writing open-source software that interfaces with the Microchip debug probes, there were also efforts to build debug probes. In the beginning, Atmel published all information about the protocol on the JTAG bus, which made it possible to build clones of JTAG ICE and JTAGICE mkII. You can still buy a JTAG ICE clone from Olimex for less than € 20. And also JTAGICE MkII clones used to be popular. With MPLAB SNAP costing less than € 10, such clones are, of course, not attractive any longer.
The debugWIRE protocol and the UPDI protocol, which use a single wire, were the target of reverse engineering efforts, resulting in some open-source solutions. In both cases, it is basically an asynchronous, half-duplex, serial protocol, and the communication is not encrypted. For this reason, it is not too difficult to intercept and interpret the communication. The first such effort by RiskusW led to a documentation sketch recorded at http://www.ruemohr.org/docs/debugwire.html (by now only accessible via the Wayback Machine). Based on that, some projects created open-source interface software, resulting in a basic symbolic debugger or even a GDB server. The most well-known is probably dwire-debug. In this case, the debug probe is simply a USB-UART bridge with an additional diode, as shown in the following picture.

dwire-debug hardware (picture by David C W Brown from the GitHub repo)
All the intelligence is in the host program driving the USB-UART bridge. Based on the dwire-debug concept, a number of other projects have been developed. As the hardware, they all used simply the USB-UART bridge.
An alternative approach is to put more processing into the probe hardware, as has been done in the DebugWireDebuggerProgrammer. A follow-up is dw-link, which is the firmware for an Arduino UNO that implements a GDB server on the UNO, i.e., you can interface it directly to GDB over the serial line.

UNO as dw-link debug probe (own photo)
As mentioned, UPDI has also been reverse-engineered (to a certain extent). Again, the debug probe is a USB-UART bridge, this time driven by a Scheme program: updi-gdbserver.
While all these approaches are interesting and intellectually stimulating, they lack a bit of robustness, e.g., in the area of level-shifting. However, in this area, a repackaging effort was interesting. The microUPDI debugger is an Arduino Pro Micro that is flashed with the officially available firmware of Microchip’s mEDBG debuggers, extended by level-shifting and buffering circuitry. In contrast to all the proprietary debug probes, it powers the target. The hardware design is all open source.

microUPDI-programmer/debugger (picture by MCUdude from the Tindie shop)
Summary and Conclusion
With the given information, it should be easy to classify any debug probe that shows up on your desk. If you consider buying a new probe, MPLAB SNAP is probably the best deal, costing less than € 10. With an additional adaptor board and postage, the price may, however, easily go up to € 50.

SNAP with adapter board (own photo)
As an alternative, I recommend Atmel-ICE, which is now also sold at less than € 90, which includes all adapters already. It is much faster than the SNAP and looks also more robust.
The featured picture of this blog post was created by ChatGPT.
Leave a Reply