The Embassy RP Skeleton repository is a project template intended as a starting point for developing your own
firmware for the rp2040 based on the embassy asynchronous embedded development framework for Rust.
It includes all of the knurling-rs tooling (defmt, defmt-rtt, panic-probe, flip-link,
probe-run) to enhance the embedded development process.
The default cargo runner is configured as probe-run, so you can build, flash and run your firmware with
output from the device via a probe-rs compatible debug probe with the command:
$ cargo run
If you want to use a different runner with your debugger (e.g., cargo-embed, probe-rs-debugger, etc.) or
if you aren't using a debugger and want the runner to flash the firmware via USB (e.g., elf2uf2-rs,
picotool, etc.) then see: Alternative Runners
# Install `rustup` for Rust Toolchain
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Rust# Install `thumbv6m-none-eabi` Target for `rp2040`
$ rustup target add thumbv6m-none-eabi
probe-run# Install Linux Dependencies
$ sudo apt install -y libusb-1.0-0-dev libudev-dev
# Install `probe-run`
$ cargo install probe-run
# (Optional) Install `udev` Rules and Reload
$ sudo curl https://probe.rs/files/69-probe-rs.rules -o /etc/udev/rules.d/69-probe-rs.rules
$ sudo udevadm control --reload
$ sudo udevadm trigger
# (Optional) Add User to `plugdev` Group
$ sudo usermod -aG plugdev $USER
flip-link# Install `flip-link`
$ cargo install flip-link
You can use a Raspberry Pi Pico as a CMSIS-DAP debug probe.
DapperMime for the Raspberry Pi Picoraspberry_pi_pico-DapperMime.uf2 onto the Raspberry Pi PicoAny probe-rs compatible debug probe can be used with probe-run. For a short list of alternative
compatible debug probes see: Alternative Debug Probes.
The diagram below shows the wiring loom between Raspberry Pi Pico A (left) and Raspberry Pi Pico B (right), configuring Raspberry Pi Pico A as a debug probe.
The connections shown in the diagram above are listed below.
Pico A GND -> Pico B GND
Pico A GP2 -> Pico B SWCLK
Pico A GP3 -> Pico B SWDIO
Pico A GP4/UART1 TX -> Pico B GP1/UART0 RX
Pico A GP5/UART1 RX -> Pico B GP0/UART0 TX
Pico A VSYS -> Pico B VSYS
For more information on connecting the two Raspberry Pi Picos, the wiring loom between them and its connections, see the section Appendix A > Wiring Loom in: Getting Started with Raspberry Pi Pico
Alternatively, a custom printed Raspberry Pi Pico Dev Board can be used to enhance development, which includes:
The custom printed Raspberry Pi Pico Dev board is shown below:

For more information on printing your own custom Raspberry Pi Pico Dev Board, see: Raspberry Pi Pico Dev Board
To run the firmware in debug mode:
$ cargo run
To run the firmware in release mode:
$ cargo run --release
To change the default defmt log level, see .cargo/config.toml:
[env]
DEFMT_LOG = "trace"
You can also set the log level inline:
$ DEFMT_LOG=debug cargo run
$ DEFMT_LOG=error cargo run --release
defmtflip-linkprobe-runcargo-embedprobe-rs-debuggerelf2uf2picotoolDapperMime$ claude mcp add embassy-rp-skeleton \
-- python -m otcore.mcp_server <graph>