Rust in Everything
基于 probe-rs 0.32.0

RISC-V 与 Xtensa

03 ARM 调试架构讲的是本卷的主线。另外两种架构各用一页讲结构,重点放在「和 ARM 哪里不一样」:

  1. RISC-V 调试模块:调试器经 DTM 访问调试模块(DM)的寄存器总线 DMI;核心寄存器靠抽象命令读写,内存有抽象命令、程序缓冲区、系统总线三种走法,attach 时按芯片支持的能力挑;0.32 加了 Debug Spec 1.0 和 RV64;RP2350 的 RISC-V 核把 DMI 挂在 ARM 的 MEM-AP 后面。
  2. Xtensa 与 ESP 插件:Xtensa 的调试模块 XDM 没有「抽象命令」,读一个寄存器要让核执行一条 WSR,读内存要执行 LDDR32.P;单步靠 ICOUNT 计数异常;ESP 芯片(Xtensa 和 RISC-V 两种都有)的目标、序列、USB-JTAG 驱动和 IDF 镜像格式全在 probe-rs-espressif 插件里,库用户不注册就看不到。
flowchart TB
  sess["Session、Core:架构无关"] --> arm["ARM:DP、AP、MEM-AP"]
  sess --> rv["RISC-V:DTM、DMI、Debug Module"]
  sess --> xt["Xtensa:XDM、NAR / NDR"]
  rv --> jtag["JTAG DTM"]
  rv --> memapdtm["MemApDtm:DMI 挂在 MEM-AP 后面"]
  memapdtm --> arm
  xt --> jtag2["JTAG"]

三种架构在 Core 这一层汇合:它们都实现 CoreInterface,Session 按目标描述里的核类型选一个,上层的烧录、RTT、栈展开不关心底下是哪一种(Session、Core 与 MemoryInterface)。

主要文件(行数含文件内测试):

文件行数管什么
architecture/riscv/communication_interface.rs3 318DM 寄存器、抽象命令、三种内存访问
architecture/riscv/mod.rs、registers.rs、registers64.rs2 154RiscvCore(RV32 / RV64)、触发器断点、semihosting
architecture/riscv/dtm/1 093JTAG DTM、隧道 JTAG、MEM-AP DTM
architecture/xtensa/4 440XDM、执行指令访问寄存器与内存、寄存器缓存
probe-rs-espressif/src/3 633ESP 的序列、USB-JTAG 驱动、IDF 镜像格式、目标描述

💬 关联讨论

发起讨论
加载中...