4. 总线访问分析原理与硬件接口
在TRACE32中做内存与总线访问分析,第一步不是打开窗口,而是确认“调试主机—调试接口—目标芯片—片上总线”这条链路是否成立。JTAG、SWD、TracePort并不是同一层的东西:JTAG和SWD是调试访问通道,负责把读写请求送进芯片内部的调试逻辑;TracePort是跟踪数据出口,负责把CPU执行流、总线事务或时间戳送出芯片。二者方向相反、用途不同,但都会影响你看到的总线行为。
理解总线访问,需要先区分三种典型路径。第一种是调试访问路径:TRACE32通过JTAG/SWD把命令交给DAP(Debug Access Port),再由DAP经AHB-AP或APB-AP发起总线读写。第二种是内核执行路径:CPU取指、访存产生的总线事务,通常只能通过TracePort或片上跟踪单元观察。第三种是系统总线路径:DMA、外设、多核之间在NoC或AXI矩阵上的真实流量,往往需要总线监视器或ETM/ETB配合才能完整捕获。把这三条路径混在一起,就会出现“窗口能读寄存器,却看不到DMA突发”的困惑。
JTAG 与 SWD 对总线访问的实际影响
JTAG是五线制(TCK、TMS、TDI、TDO,可选TRST),采用TAP状态机逐位扫描;SWD是两线制(SWCLK、SWDIO),用包协议直接访问DAP寄存器。两者在TRACE32里都通过 SYStem.CONFIG 选择,但总线访问效率差别明显。以一次32位内存读为例:JTAG需要经过“选择DR—移位地址—更新—捕获数据”多个TAP周期,典型一次访问在几微秒到几十微秒;SWD用8位包头加32位数据,一次访问通常在几百纳秒到几微秒。因此,大批量内存转储优先用SWD,而多器件级联、需要边界扫描或芯片只支持JTAG时,才用JTAG。
更关键的是时钟与等待。TRACE32的 SYStem.JtagClock 或 SYStem.SwdClock 决定TCK/SWCLK频率。频率过高会出现“读回全0或全F”“偶发校验错”;频率过低则转储慢。工程上建议从1 MHz起步,逐步提高到目标稳定工作的上限,例如某Cortex-M目标在SWD 4 MHz下稳定,8 MHz时出现间歇性ACK错误,则最终取4 MHz。若目标处于低功耗模式,还需先通过 SYStem.Up 或唤醒序列让DAP可用,否则总线访问会直接超时。
TracePort 与总线事务观察
TracePort不是用来“读内存”的,而是用来“看总线”。当CPU执行、DMA搬运或外设访问发生时,ETM/ETB会把这些事务编码成跟踪包,经TracePort并行输出。TRACE32侧需要配置 Trace.CONFIG 的端口宽度、时钟模式(单沿/双沿)、引脚映射和采样延迟。若端口宽度配错,典型现象是跟踪窗口能启动但数据全乱或频繁溢出;若采样延迟不对,会出现指令地址错位。实际调试中,可先用 Trace.STATistic 观察溢出计数,再调整 Trace.CONFIG.PortWidth 与 Trace.CONFIG.Samplerate。
下面给出一个可参考的配置片段,用于同时建立SWD调试访问与4位TracePort跟踪。参数为示例值,需按目标手册替换:
; 选择 SWD 调试接口,时钟 4 MHz
SYStem.CONFIG DEBUGPORT SWD
SYStem.CONFIG SWDClock 4MHz
; 建立调试连接并复位目标
SYStem.Up
SYStem.Mode Attach
; 配置 TracePort:4 位数据,双沿采样
Trace.CONFIG PortWidth 4
Trace.CONFIG ClockMode DDR
Trace.CONFIG Samplerate 200MHz
Trace.CONFIG PinMapping 0x00000000
; 启动跟踪并查看状态
Trace.STATistic
Trace.List
物理连接与协议参数核对
物理连接错误往往表现为“能连上但访问异常”。常见问题包括:SWDIO缺少上拉导致空闲电平漂移;TCK与TMS走线过长引起反射;TracePort引脚与GPIO复用冲突;地线回流不足导致高速跟踪误码。建议在连接后先做三项检查:一是用 SYStem.CONFIG 读回当前接口与时钟;二是用 SYStem.CPU 确认内核识别正确;三是用 Data.Line 或 Data.Dump 读一个已知寄存器(如SCB->CPUID),看返回值是否与手册一致。若读回值稳定且正确,说明调试访问路径基本可靠,再进入总线分析。
最后要建立“接口能力—分析目标”的对应关系:读寄存器、改内存、单步执行,用JTAG/SWD即可;要看DMA突发、总线争用、Cache缺失带来的实际事务,必须依赖TracePort或片上总线监视器。把接口选对、时钟调稳、引脚核对清楚,后续的TRACE32总线访问分析才有可信的输入。