#debug-probes #probe #target #arm #chip

probe-rs

一组用于与微芯片通信的片上调试工具

31 个版本 (破坏性更新)

0.24.0 2024 年 5 月 22 日
0.23.0 2024 年 2 月 24 日
0.22.0 2024 年 1 月 3 日
0.21.1 2023 年 10 月 12 日
0.2.0 2019 年 10 月 23 日

#42 in 嵌入式开发

Download history 1007/week @ 2024-05-03 933/week @ 2024-05-10 1252/week @ 2024-05-17 1077/week @ 2024-05-24 773/week @ 2024-05-31 781/week @ 2024-06-07 809/week @ 2024-06-14 751/week @ 2024-06-21 663/week @ 2024-06-28 631/week @ 2024-07-05 663/week @ 2024-07-12 547/week @ 2024-07-19 925/week @ 2024-07-26 704/week @ 2024-08-02 670/week @ 2024-08-09 498/week @ 2024-08-16

2,890 每月下载量
用于 18 软件包

MIT/Apache

2.5MB
51K SLoC

probe-rs

一个用 Rust 编写的现代嵌入式调试工具集

crates.io documentation Actions Status chat

该库的目标是提供一套工具,以与各种嵌入式 MCU 和调试探头进行交互。

类似的项目如 OpenOCD、PyOCD、Segger 工具集、ST 工具集等。它们都实现了 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 上支持该项目,以获得更好的支持和更多功能。

工具

除了是一个库之外,probe-rs 还包含一套工具,可用于烧录和调试。

安装

安装工具的推荐方法是下载预编译版本,使用以下方法之一。有关更详细的说明,请参阅https://probe.rs/docs/getting-started/installation/

使用 shell 脚本

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-installer.sh | sh

使用 powershell 脚本

irm https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-installer.ps1 | iex

从源码安装

工具也可以从源码安装。安装必要的先决条件后,可以使用以下命令安装最新开发版本:cargo install

cargo install probe-rs-tools --git https://github.com/probe-rs/probe-rs --locked

这将编译工具并将它们放入 cargo 的 bin 目录。有关详细信息,请参阅Cargo 书籍

cargo-flash

可以使用 cargo-flash 工具作为 cargo 子命令将编译好的 Rust 程序下载到目标设备。它也可以用于下载来自 C/C++ 编译器的任意 ELF 文件。有关更多信息,请参阅cargo-flash

cargo-embed

如果您正在寻找更丰富的调试体验,请参阅cargo-embed,它提供对 GDB、RTT 和配置文件的支持。

编辑器和 IDE

我们已经实现了Microsoft Debug Adapter Protocol (DAP)。这使得通过 probe-rs 进行嵌入式调试在实现该标准的现代代码编辑器中变得可用,例如 VSCode。DAP 网站包括支持 DAP 的编辑器和 IDE 列表

VSCode

probe-rs 网站包括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 安装。在 Linux 上,这些可以通过您的包管理器安装使用 rustup

# Ubuntu
> sudo apt install -y libudev-dev

# Fedora
> sudo dnf install -y libudev-devel

添加目标

目标文件是由target-gen生成的,它使用此处提供的 CMSIS 打包。生成的文件随后被放置在 probe-rs/targets 中,以便将其包含在 probe-rs 项目中。

编写新的闪存算法

如果没有可用的带有闪存算法的CMSIS-Pack,则需要自己编写目标定义和闪存算法。您可以使用我们的算法模板来编写算法。请遵循该repo中的README.md中的说明。

致谢

在此库的早期阶段,我们从pyOCD代码中受益匪浅,了解了闪存的工作原理。此外,它始终是交叉检查ARM特定事物如何工作的良好参考。因此,向pyOCD背后的团队表示衷心的感谢!

许可

根据以下任一许可进行许可:

贡献

除非您明确说明,否则根据Apache-2.0许可中定义的,任何有意提交以包含在作品中的贡献,均应双重许可如上,无任何附加条款或条件。

依赖

~21–33MB
~474K SLoC