调试核心
ARM Cortex-M内核调试
TPIU、ITM和DWT是CoreSight调试架构中的三个关键组件;
DWT(Data Watchpoint and Trace)——数据观察与跟踪单元
DWT主要用于实时监控程序运行时的数据行为。它能够:
设置数据访问断点(读/写特定内存地址)
监控程序计数器(PC)的采样,用于统计指令执行次数
计数器功能:如循环次数、指令周期数、异常进入次数等
支持事件触发,用于性能瓶颈定位(如某段代码执行耗时过长)
DWT是性能分析的核心,尤其在资源受限的嵌入式系统中,无需外部探针即可获取关键运行指标。
ITM(Instrumentation Trace Macrocell)——仪器化跟踪宏单元
ITM负责生成和传输调试信息流,常与DWT配合使用:
- 通过软件调用(如
ITM_SendChar())向调试器发送自定义日志、变量值或状态消息 - 支持格式化输出(整数、字符串、浮点数),便于开发者实时观察程序内部状态
- 与DWT共享同一个跟踪通道,实现“数据+日志”双轨调试
ITM是“printf调试”的硬件实现,极大提升了嵌入式开发中动态调试的效率,避免了传统串口打印的性能干扰。
TPIU(Trace Port Interface Unit)——跟踪端口接口单元
TPIU是调试数据的输出控制器,作用是:
将DWT和ITM产生的高速跟踪数据进行格式化和打包
通过有限的引脚(如1~4线)将数据串行输出到外部调试器(如JTAG/SWD接口)
支持数据压缩与同步,确保在低带宽通道下仍能稳定传输
没有TPIU,DWT和ITM产生的数据就无法被外部工具(如Keil、IAR、OpenOCD)接收和解析,它是调试信息通往开发环境的“桥梁”。
DWT 检测到关键事件(如某变量被修改)→ 生成跟踪事件
ITM 接收软件注入的日志信息(如“传感器读数:123”)→ 打包成数据包
TPIU 收集来自DWT和ITM的数据流 → 压缩并经SWO引脚输出
调试工具(如IDE)接收数据 → 实时显示性能曲线、变量变化、日志输出
DWT负责“看数据”,ITM负责“说日志”,TPIU负责“传出去”。
| 英文缩写 | 中文名称 | 功能 |
|---|---|---|
| ETM(Embedded Trace Macrocell) | 嵌入式跟踪宏单元 | 功能:监控处理器指令执行,压缩传输指令信息。 应用场景:分析程序执行流程,定位性能瓶颈。 |
| PTM(Program Trace Macrocell) | 程序跟踪宏单元 | 功能:监控处理器运行状况,压缩传输指令信息。 应用场景:与ETM协同工作,提供更全面的跟踪数据。 |
| STM(System Trace Macrocell) | 系统跟踪宏单元 | 功能:捕捉系统事件信息,以数据跟踪形式传输。 应用场景:跟踪系统级事件,如中断、异常等。 |
| DAP(Debug Access Port) | 调试访问端口 | 功能:连接外部调试工具的物理接口,允许访问芯片上的CPU、CoreSight等。 应用场景:作为调试工具与芯片之间的桥梁。 |
| ETB(Embedded Trace Buffer) | 嵌入式跟踪缓冲区 | 功能:芯片内RAM,存储捕捉到的跟踪信息。 应用场景:临时存储跟踪数据,容量有限。 |
| TMC(Trace Memory Controller) | 跟踪内存控制器 | 功能:可配置的跟踪内存控制器,支持ETB、ETR和ETF模式。 应用场景:灵活配置跟踪数据存储方式。 |
| ETR(Embedded Trace Router) | 嵌入式跟踪路由器 | 功能:将跟踪数据存储到系统内存。 应用场景:大容量跟踪数据存储。 |
| ETF(Embedded Trace FIFO) | 嵌入式跟踪FIFO | 功能:缓冲数据输出,平滑数据输出速率。 应用场景:处理突发大量跟踪数据。 |
| CTI/CTM(Cross Trigger Interface/Module) | 交叉触发接口/模块 | 功能:多核协同调试的关键技术。 应用场景:协调多核调试,确保调试信息同步。 |
| Replicator | 复制器 | 功能:将单个输入复用到多个输出。 应用场景:实现跟踪信息的多路输出。 |
| Trace Funnel | 跟踪集线器 | 功能:将多个跟踪源的信息组合成单个流输出。 应用场景:整合多源跟踪数据。 |
| Synchronous 1:1 ATB Bridge | 同步1:1高级跟踪总线桥 | 功能:同步1:1的高级跟踪总线桥接。 应用场景:实现跟踪数据的同步传输。 |