#debug-probes #probe #target #chip #protocols #communicate

app probe-rs-tools

用于与微芯片通信的片上调试工具集合

1个不稳定版本

0.24.0 2024年5月22日

#343调试

Download history 57/week @ 2024-05-16 378/week @ 2024-05-23 248/week @ 2024-05-30 263/week @ 2024-06-06 324/week @ 2024-06-13 290/week @ 2024-06-20 234/week @ 2024-06-27 213/week @ 2024-07-04 224/week @ 2024-07-11 221/week @ 2024-07-18 240/week @ 2024-07-25 243/week @ 2024-08-01

952 次每月下载

MIT/Apache

3MB
65K SLoC

probe-rs

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

crates.io documentation Actions Status chat

该库的目的是提供一套工具,用于与各种嵌入式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上支持该项目,以获得更好的支持和更多功能。

工具

除了是一个库之外,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,则必须自己编写目标定义和烧录算法。您可以使用我们提供的模板来编写算法。请遵循该仓库中README.md中的说明。

致谢

在库的早期阶段,我们从pyOCD代码中受益匪浅,了解了闪存的工作原理。同时,它也是一个很好的参考,可以交叉验证ARM特定功能的工作方式。因此,非常感谢pyOCD背后的团队!

许可证

根据以下任一许可证授权:

贡献

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

依赖关系

~93MB
~2M SLoC