嵌入式调试避坑指南:Trace32里SRST和TRST信号到底该怎么接?

在嵌入式系统开发中,调试接口的正确连接往往是项目成败的关键一步。作为硬件工程师,我们可能都遇到过这样的场景:精心设计的电路板焊接完毕,满怀期待地连接上Trace32调试器,却发现无论如何都无法建立稳定的调试连接。这时,SRST和TRST这两个看似简单的复位信号往往会成为排查的焦点。本文将深入剖析这两个信号在ARM/JTAG调试架构中的实际作用,从硬件连接到软件配置,提供一套完整的调试问题解决方案。

1. SRST与TRST信号的本质区别

1.1 硬件层面的功能差异

SRST(System Reset)和TRST(Test Reset)虽然都带有"复位"字样,但在嵌入式调试系统中扮演着完全不同的角色:

  • SRST信号

    • 功能:复位整个处理器系统,包括CPU核心和所有外设
    • 方向:双向(可由调试器发出,也可由目标板发出)
    • 电平:低电平有效(通常拉低至少1ms才能确保可靠复位)
    • 典型连接:直接连接到处理器的nRESET引脚
  • TRST信号

    • 功能:仅复位JTAG TAP控制器和内部调试逻辑
    • 方向:单向(通常由调试器输出到目标板)
    • 电平:低电平有效(但脉冲宽度要求比SRST短得多)
    • 典型连接:连接到处理器的nTRST引脚(如果存在)

注意:并非所有ARM处理器都提供TRST引脚,有些芯片将此信号内部拉高,此时外部连接TRST可能无效。

1.2 信号时序的关键差异

通过示波器捕获这两个信号的波形,可以清晰看到它们的行为差异:

信号特征 SRST TRST
最小有效脉宽 1ms 50ns
上电默认状态 低电平 高电平
与其他信号的关系 独立于调试接口 依赖TCK稳定
复位范围 全系统 仅调试子系统

在调试连接建立过程中,Trace32会按照特定序列操作这两个信号。典型的启动序列是:

  1. 同时拉低TRST和SRST
  2. 先释放TRST(拉高),建立JTAG通信
  3. 最后释放SRST,让系统开始运行

2. 硬件设计中的常见连接方案

2.1 标准JTAG接口连接方式

对于完整的20针JTAG接口,推荐以下连接方案:

JTAG引脚  目标板连接      备注
1         VREF         目标板参考电压
3         nTRST        可选,部分芯片可省略
5         TDI          
7         TMS          
9         TCK          
11        TDO          
13        nSRST        强烈建议连接
15        RTCK         可选,用于自适应时钟

2.2 简化接口的取舍策略

当使用10针或更小尺寸的连接器时,需要在信号完整性功能间做出权衡:

  • 必须保留的信号

    1. TCK(时钟)
    2. TMS(模式选择)
    3. TDI(数据输入)
    4. TDO(数据输出)
    5. GND(地线)
  • 可选的信号

    • nSRST:虽然可选,但强烈建议保留
    • nTRST:对于没有专用nTRST引脚的处理器可省略
    • VREF:如果目标板电压与调试器不同则必须保留

提示:即使省略nTRST,也要确保目标板上的nTRST引脚通过适当电阻上拉到VDD,防止JTAG TAP控制器处于不确定状态。

3. SYStem.Mode与复位信号的关联

3.1 各模式下的信号行为

Trace32的不同系统模式会直接影响SRST和TRST信号的操作方式:

模式 TRST操作 SRST操作 典型应用场景
SYStem.Mode Up 脉冲 脉冲 常规调试启动
SYStem.Mode Attach 连接运行中的系统
SYStem.Mode Go 脉冲 脉冲 直接运行不调试
SYStem.Mode Prepare 脉冲 保持 内存访问调试

3.2 模式选择实战建议

根据不同的调试需求,选择合适的模式可以避免许多连接问题:

  1. 首次调试新板卡

    SYStem.Mode Up
    

    此模式会执行完整的复位序列,确保系统从已知状态开始。

  2. 调试已运行的系统

    SYStem.Mode Attach
    

    当需要调试一个已经启动的系统时,此模式不会触发任何复位。

  3. Flash编程操作

    SYStem.Mode Prepare
    

    此模式保持SRST有效,确保系统不会意外执行代码干扰编程过程。

4. 常见问题排查指南

4.1 典型故障现象分析

以下是SRST/TRST连接不当导致的常见问题及解决方案:

现象1:Trace32报告"Can't halt CPU"

  • 可能原因:SRST未正确连接
  • 解决方案:检查目标板nRESET到调试接口的连接,确认上拉电阻值合适

现象2:JTAG扫描链识别错误

  • 可能原因:TRST信号不稳定或处理器内部JTAG逻辑未复位
  • 解决方案:尝试在Trace32脚本中手动添加TRST脉冲:
    SIGNAL.TRST 0
    WAIT 100us
    SIGNAL.TRST 1
    

现象3:系统在调试连接后运行异常

  • 可能原因:SRST释放时序不当
  • 解决方案:调整SYStem.CPU配置中的复位延迟参数:
    SYStem.CPU <your_cpu> RST.Delay 100ms
    

4.2 示波器诊断技巧

使用示波器观察调试连接过程时,重点关注以下时间点:

  1. 上电瞬间

    • 确认SRST在电源稳定前保持低电平
    • 检查TRST是否在TCK稳定后才有动作
  2. 模式切换时

    • 观察SYStem.Mode Up命令发出后的信号序列
    • 验证SRST释放后TCK是否持续稳定
  3. 断点触发时

    • 检查SRST是否保持高电平
    • 确认TRST没有意外脉冲

在实际项目中,我曾遇到一块板卡在-40℃低温下调试连接不稳定的问题。通过示波器捕获发现,低温导致目标板的复位电路响应变慢,SRST释放后TCK尚未稳定。解决方案是在Trace32配置中增加了额外的复位延迟:

SYStem.CPU Cortex-M4 RST.Delay 200ms

这个案例说明,理解信号间的时序关系对于解决复杂的调试问题至关重要。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐