在嵌入式系统开发中,调试和追踪功能是开发人员最依赖的工具之一。Arm CoreSight技术作为Arm架构中调试与追踪的标准化解决方案,为复杂SoC设计提供了强大的诊断能力。本文将基于Arm Development Studio环境,手把手教你如何手动配置CoreSight调试与追踪系统。
提示:本文假设你已安装Arm Development Studio 2019.0或更高版本,并对Arm系统调试有基本了解。实际操作前请确认目标板的调试接口类型(JTAG/SWD)和硬件连接正常。
CoreSight技术本质上是一套模块化的调试与追踪组件库,其核心设计哲学是通过标准化接口实现灵活的系统集成。整个架构包含三大关键子系统:
调试访问端口(DAP):作为物理调试接口,包含一个Debug Port(DP)和多个Access Ports(AP)。常见的AP类型包括:
嵌入式交叉触发(ECT):由CTI(Cross Trigger Interface)和CTM(Cross Trigger Matrix)组成,实现多核间的调试事件同步。典型应用场景包括:
追踪数据通路:包含ETM(追踪源)、Funnel/Replicator(追踪链路)以及TMC/TPIU(追踪接收器)等组件,形成完整的追踪数据流。
mermaid复制graph TD
DP -->|DAPBUS| AXI-AP
DP -->|DAPBUS| APB-AP
APB-AP --> ROM_Table
ROM_Table --> CTI
ROM_Table --> ETM
ETM --> Funnel
Funnel --> TMC_ETF
TMC_ETF --> Replicator
Replicator --> TPIU
Replicator --> TMC_ETR
我们以包含以下处理器集群的开发板为例:
在手动配置前,必须从目标板文档中获取以下信息:
DP/AP配置:
table复制| 设备类型 | AP索引 | 基地址 | 连接关系 |
|----------|--------|--------|----------|
| AXI-AP | 0 | N/A | DP |
| APB-AP | 1 | 0x80000000 | DP (含ROM表) |
| AHB-AP-M | 2 | N/A | DP |
处理器与CTI映射:
table复制| 处理器 | CTI基地址 | 同步通道 |
|-----------|-----------|----------|
| Cortex-A72_0 | 0x82020000 | 1 |
| Cortex-A53_0 | 0x83020000 | 1 |
| Cortex-M3 | 0xE0044000 | 7 |
追踪组件参数:
SUPPORTS_DATA_ADDRESS_TRACE标志File > New > Other...选择Configuration DatabaseMyBoard_Debug)New > Platform ConfigurationAdvanced platform detection or manual creation在SDF文件的Devices标签页中:
ARMCS-DP到设备列表table复制| AP类型 | 索引 | 版本 | ROM表地址 |
|---------|------|------|-------------|
| AXI-AP | 0 | APv1 | 留空 |
| APB-AP | 1 | APv1 | 0x80000000 |
| AHB-AP-M| 2 | APv1 | 自动发现 |
注意:AP索引值必须与硬件设计严格一致,错误的索引会导致调试器无法访问目标设备。
以Cortex-A72_0为例:
在APB-AP下添加Cortex-A72设备
设置关键参数:
python复制CORESIGHT_BASE_ADDRESS = 0x82010000
CTI_CORESIGHT_BASE_ADDRESS = 0x82020000
CTI_SYNCH_START = True
添加关联的CTI设备:
python复制CORESIGHT_BASE_ADDRESS = 0x82020000
SYNCH_START_ENABLE = True
SYNCH_START_CHANNEL = 1
在Component Connections中添加处理器与CTI的连接:
table复制| Master | Slave | Trigger Value |
|--------------|-------|---------------|
| Cortex-A72_0 | CSCTI | DBGRESTART=1 |
以Cortex-A53集群追踪为例:
添加ETM:
python复制# ETM for Cortex-A53_0
CORESIGHT_BASE_ADDRESS = 0x83040000
SUPPORTS_DATA_ADDRESS_TRACE = False
配置Funnel:
python复制# 4-input Funnel
CORESIGHT_BASE_ADDRESS = 0x830C0000
设置TMC ETF:
python复制CORESIGHT_BASE_ADDRESS = 0x80010000
CONFIG_TYPE = "ETF"
MEM_WIDTH = 32 # ATB总线宽度
建立数据流连接:
mermaid复制graph LR
ETM_0 -->|Port 0| Funnel_0
ETM_1 -->|Port 1| Funnel_0
Funnel_0 --> Funnel_1
Funnel_1 --> TMC_ETF
TMC_ETF --> Replicator
Replicator --> TPIU
Replicator --> TMC_ETR
SMP组配置:
同步启动参数:
python复制# CTM通道分配示例
CTI_0: Channel 1 -> CTM Channel 0
CTI_1: Channel 1 -> CTM Channel 0
CTM_0: Channel 0 -> Global CTM Channel 1
连接失败检查清单:
追踪数据异常处理:
table复制| 现象 | 可能原因 | 解决方案 |
|---------------------|--------------------------|-----------------------|
| 无追踪数据 | ETM未启用 | 检查ETM控制寄存器 |
| 数据不完整 | Funnel端口配置错误 | 核对Component Connections |
| 内存溢出 | ETR缓冲区大小不足 | 调整TMC_ETR配置参数 |
性能优化建议:
通过CTI实现复杂触发条件:
python复制# 配置CTI_7同时监控ETF和TPIU
CTI_7:
Input Triggers:
TMC_ETF_FULL = Channel 0
TPIU_OVERFLOW = Channel 1
Output Actions:
Channel 3 -> Cortex-A53 Cluster Halt
对于TrustZone系统:
重要提示:生产环境应禁用开放调试接口,仅通过安全认证方式启用调试功能。
通过本文的详细步骤,你应该已经掌握了手动配置CoreSight调试与追踪系统的核心方法。实际应用中,建议先通过自动检测生成基础配置,再根据特定需求进行手动调整。遇到复杂问题时,可结合Arm CoreSight架构手册和芯片TRM进行深度排查。