RISC-V 与 Xtensa
03 ARM 调试架构讲的是本卷的主线。另外两种架构各用一页讲结构,重点放在「和 ARM 哪里不一样」:
- RISC-V 调试模块:调试器经 DTM 访问调试模块(DM)的寄存器总线 DMI;核心寄存器靠抽象命令读写,内存有抽象命令、程序缓冲区、系统总线三种走法,attach 时按芯片支持的能力挑;0.32 加了 Debug Spec 1.0 和 RV64;RP2350 的 RISC-V 核把 DMI 挂在 ARM 的 MEM-AP 后面。
- 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.rs | 3 318 | DM 寄存器、抽象命令、三种内存访问 |
architecture/riscv/mod.rs、registers.rs、registers64.rs | 2 154 | RiscvCore(RV32 / RV64)、触发器断点、semihosting |
architecture/riscv/dtm/ | 1 093 | JTAG DTM、隧道 JTAG、MEM-AP DTM |
architecture/xtensa/ | 4 440 | XDM、执行指令访问寄存器与内存、寄存器缓存 |
probe-rs-espressif/src/ | 3 633 | ESP 的序列、USB-JTAG 驱动、IDF 镜像格式、目标描述 |
💬 关联讨论
发起讨论加载中...