Pico probe programmer with OpenOCD and POGO style adapter

pcb of the pico probe programmer

The Raspberry Pi has made efforts to use the Pico to program other devices. However, currently, there is no open-source board that can function as a general-purpose programmer with OpenOCD for Raspberry Pi. The main objective of this board would be to make it compatible with a pogo connector, which would allow power, debugging (SWD), and UART signals to be directed to the development board. This design would reduce the number of cables required, and if you no longer require power to the board, you can disconnect the power header jumper and use a battery instead. Another benefit of this board is that during production, costly headers that are only used for programming once are not required. Connectors without holding-legs can be easily pressed onto the board, allowing the device to be programmed in a matter of milliseconds, and you can move on to the next board.


The following, picture shows the Muino programmer connected to a development board using the Pogo cable. This setup offers the benefit of fewer connectors, which can reduce issues with incorrectly set up of the devices.

pcb of the pico probe programmer

Why Probe and not segger jlink?

The use of the Segger J-Link at home became an issue as it is no longer compatible with the latest generation of Cortex chips. Another concern was the occurrence of mistakes, which do not happen frequently, but in such cases, the ability to modify the pinout with features like RX/TX swap is crucial. In one of the development boards, there was a mix-up where SWO and Rx were connected to the incorrect pins. Thankfully, the Pico probe came to the rescue, and the pin locations were changed to rectify the issue, resulting in smooth functionality.

# Change the pins : pico-probe/src/picoprobe_config.h
# Build:
cd pico-probe
mkdir build/
cd build/
cmake ..
make -j
# Connect the picoprobe, pressing the boot button
# it shows a folder and place the file picoprobe.uf2 from the build folder
# Updated picoprobe
# for windows see docs/windows-install.md
pi nchange

Smalle note: the Tx 5 is not usable in this example. I didn’t need it anyway.

A quick order ordering

Take a PCB maker like JLCPCB. Use all the files from the pcb-readyto-order/ directory. The BOM file is not necessary for the order, but a list of the various component types is required. It is important to note that the complete list will need to be updated soon. Once the BOM generation in Kicad is understood, a temporary list can be found below in the Design choice chapter.

What software is needed?

The software found in the submodules. I also added the pico-sdk to it, for code compatibility.

cd pico-probe-/img/programmer/
git submodule update --init

Then go to the folder pico-probe, run the commands:

mkdir build/
cd build/
cmake ..

This will generate picoprobe.uf2. Or use the prebuild file: binaries/picoprobe.uf2. I prebuild this file, so I can quickly update it to a programmer if I need it again.

Design choice

I like to use the Pogo style adapter. For work and hobby projects it saves a head to solder, and the PCB looks more cleaner. Sometimes I need a 3V3 power pin or 5V power pin so I added an extra header for it. If you are not interested in the 3V3 or want to save componentens? The schema part 3V3 supply does not need to be added to the pcb. Actually, the PIM558 and the programmer header are madetory. For custom program headers I added the possiblity to add 5V to pin 5 of the programmer header to disable power to the board that needs to be programmed. For my own custom boards I use the 5V to directLy power purposes.

Schematic of the PCB

List of values, soon to be added to the schematics

  • C1: 1UF
  • C2: 100nF
  • C3: 10nF
  • C4: 4.7uF
  • C5: 100nF
  • R1: 10K
  • R2: 100
  • d1,2,3: BAT60JFILM
  • 2.54mm male headers 02x05
  • A1: PIM558 - Tiny 2040
  • U1: LD3985M33R

In the future I want to add some extra features like read voltage of target and detection of GND. Though making it a pull-up (internally in the 2040), and read the voltage on the pin. The voltage read is what Segger-Jlinks do to detect voltage issues on target board.


Layout of the PCB

Hardware licence

The hardware is licensed under CERN-OHL-S v2.