18个版本 (重大更新)
0.18.0 | 2023年3月31日 |
---|---|
0.16.0 | 2023年1月29日 |
0.13.0 | 2022年7月12日 |
0.12.0 | 2021年11月24日 |
0.6.0 | 2020年3月30日 |
1676 在 嵌入式开发 中
每月103 次下载
用于 postform_rtt
2.5MB
51K SLoC
probe-rs
一个用Rust编写的现代嵌入式调试工具包
此库的目标是提供一套工具来与各种嵌入式MCU和调试探针进行交互。
类似的项目如OpenOCD、PyOCD、Segger Toolset、ST Tooling等。它们都实现了GDB协议并在其之上实现自己的协议,以便GDB能够与调试探针通信。只有Segger提供了一个用于与JLink通信的闭源DLL。
此项目去除了GDB层,并提供了一个直接与调试探针的接口,从而使其他软件可以使用其调试功能。
此项目的最终目标是拥有一个完整的库工具集,以便其他工具能够与嵌入式目标通信。
功能
截至版本0.10.0,此库可以
- 连接到DAPLink、STLink或JLink
- 通过SWD或JTAG与ARM和Risc-V核心通信
- 读取和写入目标任意内存
- 暂停、运行、单步执行、设置断点和更多核心功能
- 使用标准的CMSIS-Pack闪存算法将ELF、BIN和IHEX二进制文件下载到ARM核心
- 提供关于目标状态的调试信息(堆栈跟踪、堆栈帧等)
要查看添加了哪些新功能,请参阅变更日志
支持
如果您认为probe-rs让您的嵌入式之旅更加愉快,甚至为您带来了收入,请考虑在Github Sponsors上支持该项目,以获得更好的支持和更多功能。
下载文件
cargo-flash
实用程序可以用作cargo子命令,将编译的Rust程序下载到目标设备上。它也可以用于下载可能来自C/C++编译器的任意ELF文件。有关更多信息,请参阅cargo-flash。
使用probe-rs进行更好的调试
如果您正在寻找更丰富的调试体验,请查看cargo-embed,它提供了对GDB、RTT和配置文件的支持。
VSCode
我们已经实现了Microsoft DAP协议。这使得通过probe-rs进行嵌入式调试在现代支持该标准的代码编辑器(如VSCode)中变得可行。有关更多信息,请参阅probe-rs-debugger和vscode。
使用示例
停止连接的芯片
use probe_rs::{Permissions, Probe};
fn main() -> Result<(), probe_rs::Error> {
// 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 mut session = probe.attach("nRF52840_xxAA", Permissions::default())?;
// Select a core.
let mut core = session.core(0)?;
// Halt the attached core.
core.halt(std::time::Duration::from_millis(300))?;
Ok(())
}
从RAM中读取
use probe_rs::{MemoryInterface, Permissions, Session};
fn main() -> Result<(), probe_rs::Error> {
// Attach to a chip.
let mut session = Session::auto_attach("nRF52840_xxAA", Permissions::default())?;
// Select a core.
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)?;
Ok(())
}
常见问题解答
我需要帮助!
请不要犹豫,在这里提交问题,在Matrix上提问,或通过电子邮件联系@Yatekii。
我如何帮助?
请查看问题或如果您觉得需要的话,可以提出一个新的问题。
任何贡献都非常受欢迎!
还可以查看CONTRIBUTING.md。
我们公司需要功能X,愿意为此开发付费
请联系@Yatekii
构建
构建需要Rust和Cargo,可以使用rustup进行安装。probe-rs还依赖于libusb和libftdi。在Linux上,这些可以通过您的包管理器安装。
# Ubuntu
> sudo apt install -y libusb-1.0-0-dev libftdi1-dev libudev-dev libssl-dev
# Fedora
> sudo dnf install -y libusbx-devel libftdi-devel libudev-devel openssl-devel
在Windows上,您可以使用vcpkg
# dynamic linking 64-bit
> vcpkg install libftdi1:x64-windows libusb:x64-windows
> set VCPKGRS_DYNAMIC=1
# static linking 64-bit
> vcpkg install libftdi1:x64-windows-static-md libusb:x64-windows-static-md
有关如何使用rust配置vcpkg的更多信息,请参阅vcpkg crate文档。
添加目标
目标文件是由target-gen从这里提供的CMSIS包生成的。然后,生成的文件被放置在probe-rs/targets
中,以便在probe-rs项目中包含。
编写新的闪存算法
如果没有可用的带有闪存算法的CMSIS-Pack,则必须自己编写目标定义和闪存算法。您可以使用我们的模板来编写算法。请按照该repo中的README.md
中的说明操作。
致谢
在库的早期阶段,我们从pyOCD代码中受益匪浅,了解了闪存是如何工作的。它始终是交叉检查ARM特定事物的好参考。因此,我们对pyOCD背后的团队表示衷心的感谢!
许可证
根据以下任一许可证授权
- Apache License, Version 2.0 (LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT),任选其一。
贡献
除非您明确说明,否则根据Apache-2.0许可证定义,您有意提交以供作品包含的贡献将按上述方式双许可,不附加任何额外条款或条件。
依赖项
~12-22MB
~309K SLoC