ETM10RV(Embedded Trace Macrocell)是ARMv5架构处理器调试子系统的核心组件,采用哈佛架构设计,独立处理指令流和数据流的跟踪需求。其硬件结构包含三个关键路径:指令跟踪单元(ITU)、数据跟踪单元(DTU)和触发控制单元(TCU)。ITU通过4组32位地址比较器实现指令断点触发,支持精确到单周期的指令流捕获。DTU则配备2组数据地址比较器和1组数据值比较器,可监控特定内存区域的读写操作。
注意:ETM10RV的跟踪深度受限于FIFO缓冲区大小,在ARM1026EJ-S典型配置中为4KB,连续跟踪时需注意缓冲区溢出风险。
跟踪数据通过专用Trace Port接口输出,支持两种工作模式:
ETMCR(ETM Control Register)是主控制寄存器,关键字段包括:
典型配置流程:
c复制// 启用4位并行跟踪模式
ETMCR = (1 << 15) | (0b0001 << 0);
// 设置指令地址比较器0
ETMACVR0 = 0x80001000; // 监控地址
ETMACTR0 = (1 << 12); // 启用比较器
ETM10RV支持四级触发条件组合:
触发序列配置示例:
c复制// 设置触发链:地址匹配后捕获后续10条指令
ETMTRIGGER = 0x1; // 使用比较器0作为触发源
ETMTRIGGERSEQ = 0x1A; // 触发后记录10条指令(0xA)
电源去耦:
信号线布线:
| 信号类型 | 线宽(mil) | 阻抗(Ω) | 最大长度(mm) |
|---|---|---|---|
| TRACECLK | 6 | 50 | 50 |
| TRACEDATA | 5 | 50 | 60 |
| DBGTMS | 5 | 50 | 100 |
终端匹配方案选择:
时钟信号处理:
电源噪声抑制:
对于动态加载的代码(如Linux内核模块),需配置ETM10RV的上下文ID跟踪功能:
bash复制cat /proc/[pid]/status | grep ContextID
c复制ETMCIDCVR0 = context_id; // 设置上下文ID值
ETMCIDCMR = 0x1; // 启用上下文匹配
在双核ARM1026EJ-S系统中,共享跟踪端口需特殊处理:
c复制// 核0配置
ETMSYNCFR = 0x1; // 设置为同步源
// 核1配置
ETMSYNCFR = 0x2; // 设置为同步跟随
ETM10RV支持IEEE 1149.1标准测试接口,扫描链配置要点:
测试模式引脚连接:
扫描链顺序:
code复制TDI → [边界扫描单元] → [ETM内部寄存器] → [Wrapper cells] → TDO
进入测试模式的完整序列:
bash复制# 通过JTAG接口发送命令
irscan ETM 0xC; // 选择测试指令寄存器
drscan ETM 32 0x1; // 启用测试模式
关键测试寄存器:
可能原因及解决方案:
时钟不同步:
电源噪声过大:
诊断步骤:
c复制// 读取比较器状态
uint32_t status = ETMSTATUS;
if (!(status & (1 << n))) {
// 第n个比较器未激活
}
跟踪数据压缩:
选择性跟踪策略:
c复制// 只跟踪特定函数范围
ETMACVR0 = func_start;
ETMACVR1 = func_end;
ETMACTR0 = 0x9; // 范围匹配+触发使能