Quickstart
A quick example how to use the probe-rs library.
The following are illustratory examples to demonstrate the basics. Please check out the documentation for more detailed information and all available APIs.
Attaching to a target
use probe_rs::probe::{list::Lister, Probe};
use probe_rs::Permissions;
// Get a list of all available debug probes.
let lister = Lister::new();
let probes = lister.list_all();
// Use the first probe found.
let mut probe = probes[0].open()?;
// Attach to a chip.
let mut session = probe.attach("nRF52840_xxAA", Permissions::default())?;
// Select a core.
let mut core = session.core(0)?;
// Ask to halt the attached core, waiting for no longer than 1 second for the request to succeed
core.halt(Duration::from_secs(1))?;
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 use-cases in mind.
Read more about the structure.
Reading and writing memory
use probe_rs::{MemoryInterface, Permissions, Session};
// Attach to the first connected probe.
let session = Session::auto_attach("nRF52840_xxAA", Permissions::default())?;
// Select the first core found.
let mut core = session.core(0);
// 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