以下は、基本を示すための例です。より詳しい情報と利用可能なすべての 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 のフラッシュダウンロードターゲットに変換できます。