调试原理[简要描述]

1.不同模式下的调试接口

  1. 相对于JTAG SWD的有效载荷会更高

2.调试架构

  1. 调试主机(Debug Host, PC)

作为调试的发起端,通过USB 以太网与 "调试接口硬件" 通信,发送调试指令(如设置断点、读取寄存器、下载程序等)。

  1. 调试接口硬件(Debug Interface Hardware)

负责将 PC 的指令转换为调试协议(Serial Wire 或 JTAG ,是 PC 与微控制器之间的 "硬件翻译层"。

  1. 调试端口(Debug Port, DP)接口

微控制器的外部调试入口,包含 SWJ-DP/SW-DP 模块:

  • SWJ-DP:支持 Serial Wire 和 JTAG 两种调试协议的复用端口;

  • SW-DP:仅支持 Serial Wire 协议的简化端口。它通过内部调试总线将调试信号传入微控制器内部。

  1. 调试访问端口(Debug Access Port, DAP)

微控制器内部的调试控制核心,包含 Memory Access Port(MEM-AP)

  • AHB-AP:基于 AHB 总线的访问端口,负责将调试指令转换为总线操作,访问微控制器的内部总线互联(bus matrix)。
  1. 内部总线互联(Internal bus interconnect, bus matrix)

微控制器的总线调度中心,连接以下核心模块:

  • 处理器核心(Processor core):Cortex-M3/M4 内核,是程序执行的核心。

  • NVIC 调试模块(NVIC, debug):嵌套向量中断控制器的调试组件,支持中断相关的调试操作。

  • 断点 单元( Break Point Unit):用于设置代码断点,使程序在指定位置暂停。

  • 观察点单元(Watch Point Unit):用于监控数据访问(如变量读写),触发调试动作。

  • 其他调试单元(Other debug units):支持覆盖率分析、性能统计等扩展调试功能。

  • APB 桥(APB Bridge :连接到扩展私有外设总线(Ext PPB),用于访问外设。

  • 存储器(Memory) :通过SystemD-Code(数据总线)、I-Code(指令总线)三类总线访问程序存储区和数据存储区。

3.内核总线侵入式调试(交互过程)

  1. AHB Access Port就会接再那个debug口(SW-DP or SWJ-DP),那么就可以和我们的系统进行一个交互

通过内核这个JTAG&SW(DAP外设)进行访问(通信协议)

通过DAP进来找到一个AP,ap就可以找内部总线上寻址(对应上面的Bus Matrix)

继续访问SRAM或Flash和外设寄存器 也可以往内核走 看cpu或nvic的寄存器

因为要访问总线 整个cpu的运行速度和外部沟通的速度会变慢。无法解决 所以叫侵入式调试

3.非侵入式调试(高阶调试)

  1. 与上面不同 通过ETM单元 可以直接与cpu DWT和Bus Matrix对接,这可以让cpu没有任何的延迟,直接获取cpu的指令

2.获取到的数据就通过tpiu出来

3.通过trace通道输出出来 数据量庞大

拓展知识

. 总线矩阵(Internal bus interconnect, bus matrix)的核心作用

总线矩阵是内核内部的总线调度中心,负责管理多主设备对多从设备的并发访问,核心功能包括:

  • 多主设备仲裁:支持多个主设备(如处理器核心、DMA、调试模块的 AHB-AP)同时发起总线请求,通过仲裁机制(如优先级配置)确保高优先级访问(如中断、调试)优先响应。

  • 多总线 并行 访问:I-Code、D-Code、System 总线可并行操作,例如处理器同时从 I-Code 取指令、从 D-Code 读数据、从 System 总线访问外设,大幅提升内核吞吐量。

  • 从设备路由:将主设备的访问请求路由到对应的从设备(如指令 Flash、数据 SRAM、外设寄存器),实现 "一主多从" 的灵活访问。

  1. 与 AHB/APB 总线的区别与关联
  • 区别 :Cortex-M4 内部总线(I-Code、D-Code、System)是内核级总线 ,专注于内核与最核心的存储 / 外设交互;而 AHB/APB 属于芯片级总线(由芯片厂商在 Cortex-M4 内核外扩展),AHB 用于高速外设 / 存储器,APB 用于低速外设,属于 "内核外的总线层级"。

  • 关联 :总线矩阵通过APB 桥(APB Bridge 连接到芯片级的 APB 总线,实现内核与外部低速外设的通信;同时,调试模块的 AHB-AP 通过总线矩阵,可访问内核的 I-Code、D-Code、System 总线,从而实现对指令、数据、外设的调试操作(如断点、寄存器读取)。

相关推荐
阿源-3 小时前
C语言编译过程 & ELF文件加载过程解析
嵌入式·c/c++
大聪明-PLUS1 天前
Linux 中 timeout、watch 和 at 的指南:管理命令执行时间
linux·嵌入式·arm·smarc
阿源-2 天前
嵌入式面试中常见的一些编程题目
嵌入式·c/c++
Evan_ZGYF丶2 天前
深入解析CFS虚拟运行时间:Linux公平调度的核心引擎
linux·驱动开发·嵌入式·bsp
大聪明-PLUS2 天前
Linux 上的 GitOps:使用 Git 进行无缝基础设施管理
linux·嵌入式·arm·smarc
大聪明-PLUS3 天前
嵌入式 Linux 初学者指南 – 第 2 部分
linux·嵌入式·arm·smarc
一枝小雨3 天前
【OTA专题】2 初级bootloader架构和基础工程移植
stm32·单片机·嵌入式·ota·bootloader·固件升级·加密升级
阿源-4 天前
CPP 学习笔记 & 语法总结
嵌入式·cpp
xskukuku4 天前
华为技术有限公司 C语言编程规范
c语言·嵌入式