19 个版本 (重大更改)

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.11.0 2021 年 6 月 23 日

#240 in 嵌入式开发

Download history 882/week @ 2024-05-01 931/week @ 2024-05-08 914/week @ 2024-05-15 1063/week @ 2024-05-22 650/week @ 2024-05-29 618/week @ 2024-06-05 685/week @ 2024-06-12 609/week @ 2024-06-19 591/week @ 2024-06-26 490/week @ 2024-07-03 616/week @ 2024-07-10 490/week @ 2024-07-17 724/week @ 2024-07-24 682/week @ 2024-07-31 533/week @ 2024-08-07 481/week @ 2024-08-14

每月 2,514 次下载
用于 16 个包 (直接使用 3 个)

MIT/Apache

49KB
784

probe-rs

用 Rust 编写的现代嵌入式调试工具包

crates.io documentation Actions Status chat

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

类似的项目,如 OpenOCD、PyOCD、Segger Toolset、ST Tooling 等。都存在。它们都实现了 GDB 协议以及在其之上实现的自己的协议,以使 GDB 能够与调试探头通信。只有 Segger 提供了一个封闭源代码的 DLL,您可以使用它来与 JLink 通信。

此项目移除了 GDB 层,并为调试探头提供了直接接口,从而使得其他软件能够使用其调试功能。

此项目的最终目标是拥有一个完整的库工具集,以使其他工具能够与嵌入式目标进行通信。

功能

截至版本 0.10.0,此库可以

  • 连接到 DAPLink、STLink 或 JLink
  • 通过 SWD 或 JTAG 与 ARM 和 Risc-V 内核通信
  • 读取和写入目标任意内存
  • 暂停、运行、单步执行、设置断点等核心功能
  • 使用标准的 CMSIS-Pack flash 算法将 ELF、BIN 和 IHEX 二进制文件下载到 ARM 内核
  • 提供有关目标状态(堆栈跟踪、堆栈帧等)的调试信息

要查看添加了哪些新功能,请查看 CHANGELOG

支持

如果您认为 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调试适配器协议(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上,这些可以通过您的包管理器安装。

# 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许可证定义的您有意提交的工作的任何贡献,都应按照上述方式双授权,不附加任何额外的条款或条件。

依赖

~1.7–2.6MB
~79K SLoC