Skip to main content
Version: 2.8

SWDIO using a Raspberry Pi

Most Meshtastic devices can be flashed simply using USBUSB (Universal Serial Bus). The wired connection used to power a device, flash firmware onto it, and communicate with it over serial.. However, some (eg Seeed WM1110 Dev Kit) require the use of an external device that can connect via "SWDIO". There are dedicated devices such as the RAKDAP1 that can do this work, and there are also other devices such as the Segger J-Link or ST-Link that can be used. that can do this work. However, for many people a Raspberry Pi is more convenient.

This article provides instructions on how use a Raspberry Pi as a SWDIO Flash Tool.

Set up Wiring

The first step is to connect two wires between your Raspberry Pi and the SWDIO ports on your NRF52nRF52A microcontroller chipset made by Nordic, used by several devices such as the RAK Meshtastic Starter Kit and the Lilygo T-Echo. Lower power usage than ESP32.-based device.

Connect GPIOGPIO (General Purpose Input/Output). An uncommitted digital signal pin on a device. pin 11 on your Raspberry Pi to the CLK pin on the Meshtastic Device. Connect GPIOGPIO (General Purpose Input/Output). An uncommitted digital signal pin on a device. pin 8 on your Raspberry Pi to the DIO pin on the Meshtastic Device.

Ensure you get the GPIOGPIO (General Purpose Input/Output). An uncommitted digital signal pin on a device. numbers correct.

Plug in your Raspberry Pi to USBUSB (Universal Serial Bus). The wired connection used to power a device, flash firmware onto it, and communicate with it over serial. power. Plug in the Meshtastic Device to power.

Install OpenOCD

You can use OpenOCD to manage the SWDIO connection with the Meshtastic Device. Install it on your Raspberry Pi.

$ sudo apt update
$ sudo apt install libtool autoconf automake texinfo telnet gdb-multiarch git
$ git clone git://repo.or.cz/openocd.git
$ cd openocd/
$ ./bootstrap
$ ./configure --enable-bcm2835gpio
$ make -j4
$ sudo make install

Check connection

Let's try connecting to the NRF52nRF52A microcontroller chipset made by Nordic, used by several devices such as the RAK Meshtastic Starter Kit and the Lilygo T-Echo. Lower power usage than ESP32.-based device with SWDIO before we do anything with firmware. All the configuration you need is in the openocd repository.

$ openocd -f ./openocd/tcl/interface/raspberrypi-native.cfg -c "transport select swd" -f openocd/tcl/target/nrf52.cfg -s tcl

The first flag selects the Raspberry Pi as your host machine, the transport is SWDIO, and the last flag says you are connecting to a nRF52nRF52A microcontroller chipset made by Nordic, used by several devices such as the RAK Meshtastic Starter Kit and the Lilygo T-Echo. Lower power usage than ESP32.-based chip. You should see something like this:

Open On-Chip Debugger 0.12.0+dev-00633-gad87fbd1c
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
srst_only separate srst_gates_jtag srst_push_pull connect_deassert_srst
swd
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : BCM2835 GPIO JTAG/SWD bitbang driver
Info : clock speed 100 kHz
Info : SWD DPIDR 0x2ba01477
Info : [nrf52.cpu] Cortex-M4 r0p1 processor detected
Info : [nrf52.cpu] target has 6 breakpoints, 4 watchpoints
Info : [nrf52.cpu] Examination succeed
Info : [nrf52.cpu] starting gdb server on 3333
Info : Listening on port 3333 for gdb connections
Info : accepting 'telnet' connection on tcp/4444

If you see “Error connecting DP: cannot read IDR”, then you've probably connected the wires to the wrong place.

Obtaining Firmware

Check the instructions for your hardware to find the correct firmware for your device. For most devices following this guide, a .hex file is required. Then, copy the firmware file to your Raspberry Pi.

Flashing Firmware

Once you have openocd running, you can connect to your Meshtastic device using telnet. Flashing is as simple as running a few commands inside the telnet session:

$ telnet 127.0.0.1 4444
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Open On-Chip Debugger
> init
> reset init
> halt
> nrf5 mass_erase
> program firmware.hex verify
> reset
> exit 0

Unplug the power and plug it back in after flashing.

Connecting

Congratulations, you should now be able to connect to your device through Bluetooth in the Meshtastic app.