What in-circuit debuggers or programmers have you used? Which one do you like or hate?
(Technical core — what these tools are and what they do.)
In-circuit debuggers/programmers connect a host PC to the target microcontroller's on-chip debug interface so you can program flash and control/inspect a running CPU. The two dominant debug interfaces are:
- JTAG — the classic IEEE 1149.1 multi-pin chain (TCK, TMS, TDI, TDO, TRST); also supports boundary scan.
- SWD (Serial Wire Debug) — ARM Cortex's 2-pin alternative (SWDIO, SWCLK) that frees up pins while providing the same debug access; often paired with SWO for trace output.
Common probes/programmers:
- SEGGER J-Link — very popular, fast, broad device support, and includes RTT (Real-Time Transfer) for high-speed printf-style logging over the debug link.
- ST-Link — ST's probe, built onto every STM32 Nucleo/Discovery board.
- CMSIS-DAP / DAPLink — ARM's open, vendor-neutral debug probe firmware standard.
- MPLAB ICD / PICkit — Microchip's in-circuit debuggers/programmers for PIC/AVR/SAM.
- Atmel-ICE — for AVR and SAM (Cortex-M) parts.
Core functions provided: programming/erasing flash, setting hardware and software breakpoints, single-stepping, halting/resuming the core, reading and writing CPU registers and memory, watchpoints/data breakpoints, and trace/logging via SWO or RTT. They integrate with GDB and IDEs (and OpenOCD as an open-source bridge). A good probe makes the edit-flash-debug loop fast and reliable; flaky/slow probes or poor driver support are the usual sources of frustration.
