Raspberry Pi Pico JTAG


The Raspberry Pi Pico JTAG has emerged as a popular and capable microcontroller development board thanks to its low cost, versatile feature set and large community support. As with any embedded system, robust debugging is crucial during product development and testing cycles. The Pico supports industry-standard JTAG which provides a standardized debug interface at the hardware level.

Raspberry Pi Pico JTAG

JTAG (Joint Test Action Group) enables functions like stopping code execution, reading/writing memory contents, setting breakpoints and more. This article delves deeper into utilizing JTAG with the Raspberry Pi Pico across its entire development workflow. We will explore establishing various JTAG connections, custom debugging with open-source tools as well as industrial best practices. Real-world projects showcasing diverse JTAG applications will also be demonstrated. By the end, readers will gain valuable expertise in wielding this debug standard to optimize Pico-based designs.

Understanding the Pico JTAG Interface

Let us first understand the JTAG implementation on the Raspberry Pi Pico:

  • Integrated within the RP2040 chip are ARM CoreSight modules compliant with JTAG-DP (Debug Port) including ETB (Embedded Trace Buffer).
  • CoreSight allows non-intrusive monitoring and inspection of core internal state during run-time operations.
  • Standard JTAG pins are routed out from the RP2040 – TCK, TMS, TDI, TDO and optional TRST.
  • TCK is the Test Clock input, TMS is Test Mode Select, TDI is Test Data Input and TDO is Test Data Output.
  • TRST is Test Reset, an optional low-true asynchronous reset for the JTAG logic.
  • Raspberry Pi Pico schematics precisely document the pinouts of these JTAG signals.
  • For physical access, the signals need to be connected to a host JTAG debugger unit via a compatible interface.

This overview presents the Pico JTAG interface at the hardware specification level. Let us now see ways to establish real-world connectivity.

Establishing the Pico JTAG Connection

There are multiple approaches to physically linking the Pico’s JTAG port with a host system for debugging:

  1. JTAG ICE Breakout Board:
  • Provides handy debug adaptor with pin headers for various debug tools.
  1. Pickit 4 In-Circuit Debugger:
  • Plugs directly into the Pico via a 6-pin ICSP connector with debug probe.
  1. Raspberry Pi Pico Debug Cable:
  • Custom cable which comes fitted with Pico or requires soldering to pads.
  1. 3rd Party Docking Boards:
  • Expansion carriers offer JTAG-enable debug port via pin headers.
  1. Custom debugging harness:
  • Craft your own cable assembly by soldering test probes onto Pico pads.
  1. OpenOCD:
  • Supports flashing/debugging over Virtual COM Port using Pi Pico USB connection.

Each approach pairs the debug signals with host adapter hardware opening complete JTAG access. Commonly used debug tools are also explored ahead.

Pico Programming with Raspberry Pi Pico SDK

Once physically connected, low-level debugging control is provided by the Pico’s official Raspberry Pi Pico SDK:

  • Install SDK on host PC along with debug tools like picoprobe.
  • Build Pico programs using provided Make-based build system.
  • Program/debug directly from command line with picoprobe.
  • Alternative IDE plugins for Visual Studio Code, CLion etc.
  • Key functions include flashing, breakpoints, variable inspection.
  • Interfaces with hardware JTAG-DP and trace buffer modules.
  • Mass storage bootloader allows firmware updating.
  • SDK is open-source empowering customizations if needed.
  • Debug information is retained even after building for release.

The SDK streamlines JTAG workflows into versatile IDE/debugger experiences.

Enhancing Debugging with OpenOCD

OpenOCD enhances Pico JTAG accessibility further:

  • Open-source collection of tools for JTAG/SWD debugging.
  • Extends Pico debugging to hosts lacking ARM tools like Linux.
  • Configurable through powerful scripting engine TCL.
  • Automatically discovers Pico via USB VID:PID (no manual cable).
  • Remotely debug wireless Picos over WiFi/Ethernet.
  • Exposes low-level MCU control via scripting.
  • Integrates with several IDEs and embeddable into own projects.
  • Default configuration files exist for Pico out-of-box usage.

OpenOCD empowers debugging anywhere, anytime with seamless tool-agnostic workflows.

JTAG at Work – Code Quality Tool

Let’s explore building a code analysis utility leveraging Pico JTAG features:

  1. Design extensible object-oriented architecture for rules.
  2. Implement basic quality checks via abstract base class.
  3. Derive concrete check classes (e.g nullptr, formatting).
  4. Integrate with debugger – set breakpoint, inspect objects.
  5. Analyze crashes, refine rules – debug problematic code.
  6. Add suppression, configuration options.
  7. Package as Pico library for project integration.
  8. Distribute via SDK build system/package manager.

This demonstrates professional-grade software development best-practices using JTAG every step of the way.

JTAG Project – CAN Bus Node

As another real-world example, we will develop a CAN bus node for automotive diagnostics:

  1. Interface MCP2515 CAN transceiver to Pico.
  2. Implement CAN protocol stack in embedded-C.
  3. Debug bus signals, message transmission/reception.
  4. Build sample diagnostic services like ECU resets.
  5. Configure node ID, bit rates etc and test over CAN bus.
  6. Address crashes/errors – set memory breakpoints.
  7. Add wireless modem for remote firmware updates.
  1. Distribute as open-hardware automotive module.

Such projects demonstrate industrial embedded design processes relying on JTAG standard at each phase.

Advanced Pico Programming using JTAG

Beyond debugging, JTAG enables sophisticated programming techniques:

  • In-System Programming:
    • Remotely update deployed Pico firmware in the field non-intrusively over ISP.
  • Secure Bootloading:
    • Digitally sign firmware for integrity verification during updates.
  • Over-the-Air Updates:
    • Deploy firmware changes wirelessly to networked Pico systems.
  • Hardware Debugging:
    • Examine low-level SoC register control and silicon behaviors.
  • Commercial Tool Support:
    • Leverage debug probes, simulators from ARM, Seggeretc with adapted scripts.
  • Virtual JTAG:
    • Simulate Pico target in a debugging emulator like QEMU.
  • Continuous Integration:
    • Automate building, debugging, testing within DevOps pipelines.

JTAG expertise thus boosts Pico development efficiencies across the board.


In conclusion, JTAG presents itself as a versatile interface advancing Raspberry Pi Pico development paradigms. Its standards-compliance and extensive support through open-source tools lower the barrier to advanced embedded software engineering practices. This article explored establishing various JTAG connections, leveraging industry-standard utilities alongside IDE-based workflows for optimizing projects. Real-world examples demonstrated diverse JTAG applications across sectors. Overall, mastery of the JTAG debugging standard unlocks the Pico’s true potential for delivering robust and reliable embedded innovations. Continuing adoption will undoubtedly cement its reputation as a leading commercial-grade microcontroller platform.

About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
Scroll to Top