JTAG & SWD

JTAG(Joint Test Action Group,联合测试工作组):是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。

JTAG最初是用来对芯片进行测试的,JTAG的基本原理是在器件内部定义一个TAP(Test Access Port,测试访问口)通过专用的JTAG测试工具对内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。如今,JTAG接口还常用于实现ISP(In-System Programmer,在系统编程),对FLASH等器件进行编程。
JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程然后再装到板上,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。JTAG接口可对DSP芯片内部的所有部件进行编程。

如今大多数比较复杂的器件都支持 JTAG 协议,如 ARM 、 DSP 、 FPGA 器件等。标准的 JTAG 接口是 4 线: TMS 、 TCK 、 TDI 、 TDO ,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。如今 JTAG 接口的连接有两种标准,即 14 针接口和 20 针接口,其定义分别如下所示。

在这里插入图片描述

JTAG 接口引脚

JTAG调试接口必须使用VCC、GND电源信号,以及TMS、TCK、TDI、TDO四根调试信号,可选TRST、RESET复位信号和RTCK(同步时钟)信号。

  • VRef:目标板参考电压信号,但不向外输出电压。用于检查目标板是否供电,直接与目标板VDD联;
  • GND:公共地信号;
  • TRST:JTAG复位,连接到目标CPU的nTRST引脚,用于复位CPU调试接口的TAP控制器;目标板上应将此脚上拉到高电位,避免意外复位;
  • TDI:仿真器连接至目标CPU的数据输入信号,建议在目标板上将此脚上拉到Vdd;TMS:仿真器输出给目标CPU的JTAG模式设置信号。必须在目标板上将此脚上拉;TCK:仿真器输出给目标CPU的JTAG时钟信号,建议在目标板上将此脚上拉;TDO:目标CPU返回给仿真器的数据信号;
  • RTCK:目标CPU提供给仿真器的时钟信号。有些目标要求JTAG的输入与其内部时钟同步。仿真器利用此引脚的输入可动态地控制自己的TCK速率。若不使z用此功能,在目标板上将此脚接地,有些芯片可能要求上拉;
  • RESET:仿真器输出至目标CPU的系统复位信号。’

虽然TRST、RESET是可选的信号;但一般都建议接上,使得仿真器能够在连接器件前对器件进行复位,以获得较理想的初始状态,便于后续仿真。

SWD 接口引脚

SWD是ARM公司提出的另一种调试接口,相对于JTAG接口,使用更少的信号。四根信号如下:

  • VRef:目标板参考电压信号,但不向外输出电压。用于检查目标板是否供电,直接与目标板VDD联;
  • GND:公共地信号;
  • SWDIO:串行数据输入输出,作为仿真信号的双向数据信号线,建议上拉;
  • SWCLK:串行时钟输入,作为仿真信号的时钟信号线,建议下拉;
  • SWO:串行数据输出引脚,CPU调试接口可通过SWO引脚输出一些调试信息。该引脚是可选的;
  • RESET:仿真器输出至目标CPU的系统复位信号。

同样的,虽然RESET是可选的信号;但一般都建议接上,使得仿真器能够在连接器件前对器件进行复位,以获得较理想的初始状态,便于后续连接仿真。

JTAG 和 SWD 的调试方式区别

  1. SWD模式比JTAG在高速模式下面更加可靠。
    在大数据量的情况下面JTAG下载程序会失败,但是SWD发生的几率会小很多。
    基本使用JTAG仿真模式的情况下是可以直接使用SWD模式的,只要你的仿真器支持。
    所以推荐大家使用 SWD 模式。

  2. SWD模式支持更少的引脚,在大家GPIO刚好缺一个的时候,可以使用SWD仿真。

  3. 在大家板子的体积有限的时候推荐使用SWD模式,它需要的引脚少,当然需要的PCB空间就小啦!比如你可以选择一个很小的2.54间距的5芯端子做仿真接口。

仿真器对SWD模式支持情况

(1)JTAGV6支持SWD仿真模式,速度较慢。

(2)JTAGV7比较好的支持SWD仿真模式,速度有了明显的提高,速度是JTAGV6的6倍。

(3)JTAGV8非常好的支持SWD仿真模式,速度可以到10M。

(4)ULINK1不支持SWD模式。

(5)盗版ULINK2非常好的支持SWD模式,速度可以达到10M。

(6)正版ULINK2非常好的支持SWD模式,速度可以达到10M。

硬件接口上的区别

  1. JTAGV6需要的硬件接口为:GND,RST,SWDIO,SWDCLK
  2. JTAGV7需要的硬件接口为:GND,RST,SWDIO,SWDCLK
  3. JTAGV8需要的硬件接口为:VCC,GND,RST,SWDIO,SWDCLK
  4. ULINK1 不支持SWD模式
  5. 盗版ULINK2需要的硬件接口为:GND,RST,SWDIO,SWDCLK
  6. 正版ULINK2需要的硬件接口为:GND,RST,SWDIO,SWDCLK

由此可以看到只有JTAGV8需要5个引脚,即多了一个VCC引脚; 其好处是:仿真器对目标板子的仿真需要用到RST引脚,使用仿真器内部的VCC作这个功能其实并不是非常美妙。因此,JTAGV8选择了只和目标板共GND,但不共VCC。因此我觉得这种模式最合理,当然通常情况下仿真器和目标板共GND和VCC是没有错的。