probe-rs quickstart

Attaching to a target

use probe_rs::Probe;

// Get a list of all available debug probes.
let probes = Probe::list_all();

// Use the first probe found.
let probe = probes[0].open()?;

// Attach to a chip.
let session = probe.attach("nrf52")?;

// Select a core.
let core = session.attach_to_core(0)?;

// Halt the attached core.
core.halt()?;

probe-rs can be used to automate your workflow.

Want to do

  • hardware-in-the-loop testing?
  • automatic WCET analysis?
  • automatic firmware downloads in your project?

probe-rs was designed with such usecases in mind.

Read more about the structure.

Reading and writing memory

use probe_rs::Core;

let core = Core::auto_attach("nrf52")?;

// Read a block of 50 32 bit words.
let mut buff = [0u32;50];
core.read_32(0x2000_0000, &mut buff)?;

// Read a single 32 bit word.
let word = core.read_word_32(0x2000_0000)?;

// Writing is just as simple.
let buff = [0u32;50];
core.write_32(0x2000_0000, &buff)?;

// of course we can also write 8bit words.
let buff = [0u8;50];
core.write_8(0x2000_0000, &buff)?;

Reading and writing memory is trivial with probe-rs.

probe-rs supports different word sizes and block transfers.

Don't forget to unlock the flash before you write to it!

Read more about memory operations.

Downloading to flash

use probe_rs::Probe;
use probe_rs::flash::download::{
    Format,
    download_file,
};

// Get a list of all available debug probes.
let probes = Probe::list_all();

// Use the first probe found.
let probe = probes[0].open()?;

// Attach to a chip.
let session = probe.attach("nrf52")?;

// Load the memory map.
let mm = session.memory_map();

download_file(
    &session,
    std::path::Path::new("/path/to/elf"),
    Format::Elf,
    &mm,
).unwrap();

Downloading firmware to your target is as easy.

Of course the flash facility can also report progress.

Any target that has a CMSIS-Pack can be converted into a probe-rs flash download target with our utility

Read more about downloading flash.