Raspberry Pi Debugger Raspberry Pi Debug Probe, an all-in-one USB-to-Serial debugger

From Margit Kuther | Translated by AI 7 min Reading Time

The Raspberry Pi Debug Probe is a debugging solution for ARM-based microcontrollers. The kit includes hardware and wiring to support "plug and play" debugging of devices like the Raspberry Pi Pico with host platforms such as PC, Mac, and Linux computers.

Raspberry Pi Debug Probe in an open case: featuring serial debug and UART interface.(Picture: Raspberry Pi/Atlantik Elektronik Raspberry Pi/Atlantik Elektronik)
Raspberry Pi Debug Probe in an open case: featuring serial debug and UART interface.
(Picture: Raspberry Pi/Atlantik Elektronik Raspberry Pi/Atlantik Elektronik)

The Raspberry Pi Debug Probe provides both a serial debug interface for the processor (typically the ARM Serial Wire Debug interface by default) and a UART interface to industry standards. 
Eben Upton, Chief Executive of Raspberry Pi Trading, presents the Raspberry Pi Debug Probe as follows: "Since we launched the Raspberry Pi Pico and our RP2040 microcontroller in January 2021, people have been using a Pico to debug code running on another. Inspired by this trend, today we are releasing the Raspberry Pi Debug Probe, a complete hardware debugging solution for ARM-based microcontrollers, powered by the RP2040, and priced at just $12."

While the Raspberry Pi Debug Probe was specifically designed for the Raspberry Pi Pico and other RP2040-based targets, it still offers standard CMSIS-DAP debug interfaces (CMSIS-DAP is a simple low-level USB protocol for debug probes) as well as a UART interface via USB to industry standards. Both interfaces use a 3-pin debug connector, as specified in the Raspberry Pi 3-pin debug connector specification (see below). The Raspberry Pi Debug Probe can thus be used for debugging any ARM-based microcontrollers that provide an SWD port with 3V3 I/O. Additionally, the Raspberry Pi Debug Probe can be easily used as an inexpensive USB-to-UART cable.

The Raspberry Pi Debug Probe is based on the hardware design of the Raspberry Pi Pico and operates with the open-source software Raspberry Pi Picoprobe. Firmware updates are done in the same manner as a Raspberry Pi Pico, making it easy to keep the device up-to-date with the latest Picoprobe firmware or to use custom firmware.

Delivery of the Raspberry Pi Debug Probe

The Raspberry Pi Debug Probe is delivered as a kit, according to Atlantik Elektronik, containing the hardware in a plastic case and cables: a USB cable and three different types of debug cables to cover most use cases. The Raspberry Pi Debug Probe is priced at $12 (list price) and can be obtained directly from Raspberry Pi.

Debug Probe aids in troubleshooting

"Debugging is a necessary evil, and if you want to hunt bugs, sooner or later, you need a debugger," says Eben Upton. While most debuggers offer a set of basic functions (single-stepping, breakpoints, variable and memory inspection), these functions are provided in different ways depending on the language and operating environment. 
You might be using an interpreted high-level programming language like Python, where debug functions are integrated directly into the runtime environment. Or you could be using a low-level compiled programming language like C, but your program is running on an operating system like Linux; in this case, a debugger, often running on the same machine, can interact with your program as it runs to provide the same functions.

But what if your C program runs directly on the processor without an operating system (this is often referred to as bare-metal operation)? What if you are writing an operating system? In this case, you need a way to access the debug functions built into the processor itself. And this is precisely where the Debug Probe comes into play.

What is a Debug Probe?

All modern ARM-based microcontrollers, including the RP2040, implement the CoreSight Debug Architecture by ARM. Each processor core, such as the Cortex-M0+ used in the RP2040 microcontroller, provides an Access Port (AP) that can be used for single-stepping, setting breakpoints, observing the values of processor registers, and accessing memory and peripheral devices through the processor's bus interface. 
The microcontroller itself offers a Debug Port (DP) externally connected with pins on the package and internally connected to each AP in the system. The RP2040 provides its DP via a Low-Pin-Count Serial Wire Debug (SWD) port: Through the SWD protocol over this port, a host computer can control the AP of each core to debug a program running on the core.
 
A debug probe acts as a bridge between USB and the SWD protocol. While not strictly necessary if the host computer is a Raspberry Pi (you can directly connect the target's SWD port to the GPIO header of a Raspberry Pi), it is much more convenient to establish a connection via USB. And if you are using a PC or Mac, USB is the only option.

The Raspberry Pi Debug Probe provides the SWD signals on a three-pin JST connector, adhering to the Raspberry Pi Debug Connector specification. Raspberry Pi offers adapter cables for solderless connection to a breadboard and to the debug port of the Raspberry Pi Pico H and WH models.
 
Arm has standardized the protocol for communication over USB between a host computer and a debug probe. The Raspberry Pi Debug Probe complies with this CMSIS-DAP standard, making it instantly compatible with many existing debug software platforms, including our favorite, OpenOCD.

Serial Communication

Eben Upton emphasizes, "We often want to establish a serial console connection between a microcontroller target and a host computer. This provides an easy way to interact with the software running on the target and retrieve logging and other diagnostic data. If the host computer is a Raspberry Pi, you can use one of the UART peripherals accessible via the GPIO header. However, if you're using a PC or Mac, it's very unlikely that you have access to a built-in serial interface." 
The Raspberry Pi Debug Probe functions as a serial USB adapter, sharing the same USB port as the SWD bridge. It provides the UART signals on a second three-pin JST connector, which, once again, adheres to the Raspberry Pi Debug Connector specification.
 
For users who don't require debugging functionality, the Raspberry Pi Debug Probe is a cost-effective alternative to other serial USB adapters due to its low price. It has largely replaced the once ubiquitous FTDI cable as our preferred adapter here at Pi Towers.

Details about the developers of the Raspberry Pi Debug Probe

Eben Upton: "The Raspberry Pi Debug Probe project was led by James Adams, who developed the concept and designed the hardware. Jonathan Bell wrote the software, drawing inspiration from the DapperMime project. John Cowan-Hughes designed the plastic parts and the rather neat packaging mechanics. Jack Willis designed the packaging graphics. Rose Nott was in charge of the supply chain. Alasdair Allan and Andrew Scheller worked on the documentation."

Details on the specification of the 3-pin debug connector

The Raspberry Pi defaults to using a small, encoded 3-pin connector that can be used for UART or 2-wire serial debug interfaces. The oldest and most universal "debug" connector is a simple UART of the 16550 type. A UART requires two unidirectional pins, one for transmitting data from the target to the host (TX) and one for the other direction (RX). 
The 3-pin interface of the serial debug connector was designed to work with a single unidirectional clock pin and a bidirectional data I/O pin. This arrangement can support ARM's Serial Wire Debug (SWD) or something like cJTAG.
 
Important: When referring to UART TX and RX, according to Raspberry Pi Trading (responsible for the manufacturing and distribution of the Raspberry Pi single-board computer), it is about the pins from the perspective of the target! If the target is, for example, a BCM2711 SoC, then RX means the signal going into the SoC, and TX means the signal coming out of the SoC.

Subscribe to the newsletter now

Don't Miss out on Our Best Content

By clicking on „Subscribe to Newsletter“ I agree to the processing and use of my data according to the consent form (please expand for details) and accept the Terms of Use. For more information, please see our Privacy Policy. The consent declaration relates, among other things, to the sending of editorial newsletters by email and to data matching for marketing purposes with selected advertising partners (e.g., LinkedIn, Google, Meta)

Unfold for details of your consent

Pin assignment

Each of the interfaces requires two pins and a ground, allowing for the use of a coded 3-pin connector for both:

Figure Pinout: Each of the interfaces requires two pins and a ground, allowing for the use of a coded 3-pin connector for both:(Picture: Raspberry Pi Raspberry Pi)
Figure Pinout: Each of the interfaces requires two pins and a ground, allowing for the use of a coded 3-pin connector for both:
(Picture: Raspberry Pi Raspberry Pi)

Raspberry Pi Trading set the pin assignment in a way that the unidirectional SC (going into the debug target) is on the same pin as the UART RX signal, which also goes in the same direction. This avoids conflicts since Raspberry Pi Trading uses the same connector for both UART and serial debugging, preventing incorrect plugging.

Raspberry Pi Trading also specified that SD and UART TX share the same pin. The reason: Plugging a UART into a serial debug interface is 'safe,' and there won't be conflicts. If a serial debug interface is connected to a UART, there might be conflicts on the TX/SD pin, but the current is limited by the termination resistors. 
Raspberry Pi Trading also specified 'source termination' resistors on both pins at both ends of the connection:

  • 100-ohm resistor on the SC/TX and SD/RX IC pins at the host.

  • 100-ohm resistors on the SC/RX and SD/TX IC pins at the target.

Further details on the specification of the 3-pin debug connector can be found on the Raspberry Pi website. 
The article is based on documentation from Raspberry Pi and Atlantik Elektronik.