Quickstart

以下は、基本を示すための例です。より詳しい情報と利用可能なすべての API については、 ドキュメントを参照してください。

ターゲットへの接続

use probe_rs::probe::{list::Lister, Probe};
use probe_rs::Permissions;
// 利用可能なすべてのデバッグプローブの一覧を取得する。
let lister = Lister::new();
let probes = lister.list_all();
// 最初に見つかったプローブを使用する。
let mut probe = probes[0].open()?;
// チップに接続する。
let mut session = probe.attach("nRF52840_xxAA", Permissions::default())?;
// コアを選択する。
let mut core = session.core(0)?;
// 接続済みのコアに halt を要求し、リクエストが成功するまで最大 1 秒待機する
core.halt(Duration::from_secs(1))?;

probe-rs は、ワークフローの自動化に使用できます。

次のことをしたいですか?

  • hardware-in-the-loop テスト
  • 自動 WCET 解析
  • プロジェクト内での自動ファームウェアダウンロード

probe-rs は、そのようなユースケースを念頭に設計されています。

詳しくは 構造 を参照してください。

メモリの読み取りと書き込み

use probe_rs::{MemoryInterface, Permissions, Session};
// 最初に接続されたプローブに接続する。
let session = Session::auto_attach("nRF52840_xxAA", Permissions::default())?;
// 最初に見つかったコアを選択する。
let mut core = session.core(0);
// 32 ビットワード 50 個のブロックを読み取る。
let mut buff = [0u32;50];
core.read_32(0x2000_0000, &mut buff)?;
// 単一の 32 ビットワードを読み取る。
let word = core.read_word_32(0x2000_0000)?;
// 書き込みも同じくらい簡単。
let buff = [0u32;50];
core.write_32(0x2000_0000, &buff)?;
// もちろん 8 ビットワードを書き込むこともできる。
let buff = [0u8;50];
core.write_8(0x2000_0000, &buff)?;

probe-rs を使えば、メモリの読み取りと書き込みは簡単です。

probe-rs は、さまざまなワードサイズとブロック転送をサポートしています。

書き込む前に、フラッシュのロック解除を忘れないでください!

詳しくは メモリ操作 を参照してください。

フラッシュへのダウンロード

use probe_rs::Probe;
use probe_rs::flash::download::{
Format,
download_file,
};
// 利用可能なすべてのデバッグプローブの一覧を取得する。
let probes = Probe::list_all();
// 最初に見つかったプローブを使用する。
let probe = probes[0].open()?;
// チップに接続する。
let session = probe.attach("nrf52")?;
// メモリマップを読み込む。
let mm = session.memory_map();
download_file(
&session,
std::path::Path::new("/path/to/elf"),
Format::Elf,
&mm,
).unwrap();

ターゲットへのファームウェアのダウンロードも同様に簡単です。

もちろん、フラッシュ機能は進捗を報告することもできます。

CMSIS-Pack を持つ任意のターゲットは、私たちの ユーティリティ を使って probe-rs のフラッシュダウンロードターゲットに変換できます。