The rpc-pico-embassy repository is a project that implements an embedded RPC for interface bridging utilizing the programmable I/O peripherals on the RP2040.
firmware for the rp2040
based on the embassy
asynchronous embedded development framework for Rust.
This includes the binary application that will run on the RP2040 chip. It will listen for 'RPC' requests from a SPI master. An 'RPC' request is a multi byte message that specifies the request-id, interface, payload, and CRC-8. This request will be received and payload data will be written to the TX FIFO to the PIO state machine that implements the desired interface (SMI, SPI, JTAG, I2C, etc..)
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
- Install Cortex-M Target Toolchain Support for
Rust
# Install `thumbv6m-none-eabi` Target for `rp2040`
$ rustup target add thumbv6m-none-eabi
- Install
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
- Install
flip-link
# Install `flip-link`
$ $ cargo install flip-link
You can use a Raspberry Pi Pico as a CMSIS-DAP debug probe.
- Download CMSIS-DAP debugger firmware
DapperMime
for the Raspberry Pi Pico - Boot the Raspberry Pi Pico in "Bootloader Mode" by holding the BOOTSEL button while plugging it in
- Open the mounted Raspberry Pi Pico storage device
- Copy the
raspberry_pi_pico-DapperMime.uf2
onto the Raspberry Pi Pico - Firmware will be flashed to the Raspberry Pi Pico and it will disconnect
Any 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:
- Debug Probe Host (Raspberry Pi Pico)
- Detachable Target (Raspberry Pi Pico)
- Serial Interface
- Reset Button
- Breakout Pins
- Selection of VSys or VBus Power Sources
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
- Raspberry Pi Pico
- Rust
- Cargo
- Rustup
- Embassy
- Knurling-RS
defmt
- Knurling-RS
flip-link
- Knurling-RS
probe-run
- Probe-RS
cargo-embed
- Probe-RS
probe-rs-debugger
- Raspberry Pi Pico
elf2uf2
- Raspberry Pi Pico
picotool
- CMSIS-DAP Firmware
DapperMime
- Rust Embedded Book
- Awesome Embedded Rust
- Getting Started with Raspberry Pi Pico
- Ferrous Systems Embedded Training
- Ferrous Systems Embedded Teaching Material
- RP-RS App Template
- RP-RS Alternative Debug Probes
- RP-RS Alternative Runners
- Knurling-RS App Template
- Probe-RS Probe Setup
- Raspberry Pi Pico Dev Board