MCU programmer/debugger running wirelessly on a Raspberry Pi.
Compatible Raspberry Pi models:
- Raspberry Pi 3
- Raspberry Pi 4
- Raspberry Pi 5
- Raspberry Pi Zero 2 W (cheapest and preferred option)
- ✱ Required
- RESET is optional
- UART RX is for optional serial debug
- UART TX should not be connected
arm-none-eabi-gdb -ex="target remote mcuprogrammer.local:3333" my-firmware.elf -ex "load" -ex "monitor reset" -ex "det" -ex "q"MCU Programmer exposes a network service at port 1337 which echoes all serial messages received on UART RX.
You can connect to this service from a remote machine using netcat:
nc mcuprogrammer.local 1337MCU Programmer can be configured through a telnet service running on port 8888.
Connect to the service:
telnet mcuprogrammer.local 8888Trying mcuprogrammer.local...
Connected to mcuprogrammer.local.
Escape character is '^]'.
Connected to MCU Programmer CLI. Type 'help' for a list of commands
Target device can be set with the target command:
target rp2040MCU Programmer supports every target supported by the latest build of OpenOCD.
The baud rate for serial debugging can be set with the baudrate command:
baudrate 115200- Raspberry PI 3/4/5/Zero 2 W
- Latest MCU Programmer image (no need to unzip)
- Raspberry Pi Imager
- Open Raspberry Pi Imager
- Click
CHOOSE OS - Click
Use Customand select the MCUProgrammer image downloaded above - Click the cogwheel at the bottom right corner
- Add your Wi-Fi credentials and save
- Click
WRITE - Boot your Raspberry PI with the SD card you just flashed
Build script can be found in .github/workflows/main.yml
brew install gh actInstall Docker:
curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.shInstall act:
cd /
curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bashInstall gh:
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -ySign in to git to get access token (this only has to be done once):
gh auth loginBuild image:
act -s GITHUB_TOKEN="$(gh auth token)" --artifact-server-path ./buildSSH is enabled and can be reached at mcuprogrammer.local:
ssh mcuprogrammer@mcuprogrammer.localDefault username: mcuprogrammer
Default password: mcuprogrammer
Most likely it's an issue with your local network, specificaly a subnet issue. mDNS cannot operate across networks. If your Wi-Fi brodcasts multiple bands on the same SSID, and your computer is on 5GHz and the MCU Programmer is on the 2.4GHz, this could result in them not resolving each others mDNS services.
Add a DNS entry in the host machines /etc/hosts file:
[MCU Programmer IP] mcuprogrammer.localReplace [MCU Programmer IP] with the MCU Programmer IP address on your network.