雷竞技注册
技术文章

JTAG和测试访问端口(TAP)简介

2020年11月18日通过山姆·加拉格尔

在本文中,我们将谈论JTAG,用于测试,编程和调试的无处不在的硬件工具。

JTAG已经成为嵌入式系统的标准,市场上几乎所有的微控制器和FPGA都可以使用JTAG。它是以开发它的组织命名的:the联合测试行动组。

如果您在过去几年里编写过微控制器,那么您很有可能使用过JTAG或相关标准之一。因此,有必要问一下:JTAG到底是什么?它是如何工作的?你能用它做什么?

JTAG是什么?

过去的情况是,测试一个有许多IO路径的板需要一些类似钉子床的测试工作台。然而,随着针密度的增加和球栅阵列(BGA)包装变得更加普遍,需要一种新的测试方法。需要一个解决方案,在多个集成电路之间测试硬件互连。

因此,在20世纪80年代,边界扫描被开发出来,并标准化-1990年IEEE 1149.1,测试访问端口和边界扫描架构的IEEE标准该标准技术已知开发人员和工程师作为JTAG。

JTAG边界扫描

标准本身提供了实施边界扫描:设备上的每个IO引脚都有一个内部逻辑和物理引脚之间的小逻辑单元,并且所有这些逻辑单元都连接,使得它们可以在芯片周围的一个方向上移动数据。可以读取或写入引脚值以测试功能。

此外,它指定了a测试访问端口(TAP),它是一个逻辑块,负责执行测试和管理沿边界单元的数据流。TAP本质上是一个状态机和几个移位寄存器,可以用来执行命令,比如数据加载和数据读取。但是这个框架是通用的,制造商可以自由地添加命令和逻辑块来提供编程和调试访问。

为什么JTAG如此流行?

那么JTAG如何成为设备编程的代名词?回想一下,任何具有存储器的设备都可以通过首先,解决一个单词和,第二,将数据写入该地址。

早期的存储设备利用异步寻址,通常没有解码,使用类似矩阵的地址方案。数据通过单独的数据引脚提供,每个引脚对应存储字中的位。很快,地址的二进制解码减少了所需的引脚数,并允许更大的内存,后来串行协议的应用允许程序员仅使用几个引脚与设备通信,用于任何大小的内存。

然后,随着JTAG的灵活性允许开发人员实现自定义逻辑,它也是用于编程的。JTAG Tap提供的数据流水线非常适合微控制器和FPGA编程的任务,并且界面的标准化有助于在设备上创建均匀性(但是,正如我们将看到的,实现跨越的各种各样。

标准的进一步扩展,例如ARM的串行电线调试(SWD)以及额外的IEEE 1149.x标准将扩大标准的适用性和实用程序,允许JTAG成为我们今天所知的。

虽然IEEE 1149.1是一个标准,但它给开发人员留下了很多东西。没有标准的引脚,没有标准的连接器,只有一些内置的命令。除了基本状态机之外,许多特性都不需要兼容;甚至边界扫描功能也是可选的。我们将在以后的文章中看到更多这种类型的文章。

随着这个历史课程,让我们继续前进到标准。

测试访问端口(TAP)

图1显示了基本的JTAG架构。

图1所示。JTAG架构示意图

让我们从下往上做。JTAG标准中有四个必需的信号,一个可选信号。所有符合jtag的设备必须具备:

  • 测试数据输入(TDI)针
  • 测试数据输出(TDO)针
  • 一个测试时钟PIN(TCK)
  • 一个t美国东部时间模式选择针(TMS)用于控制龙头状态机

测试复位pin (TRST),它强制状态机进入重置状态,是可选的,因为重置状态总是可以通过保持TMS低和时钟TCK五次获得。

水龙头控制器

测试访问点(TAP)由TAP控制器、一个指令寄存器和几个测试数据寄存器组成,此外还有一些胶合逻辑。TAP控制器包含测试状态机,负责解释TCK和TMS信号。数据输入引脚用于将数据加载到物理引脚和IC核心之间的边界单元,并将数据加载到指令寄存器或数据寄存器之一。数据输出引脚用于从边界单元读取数据,或从指令或数据寄存器读取数据。

TAP控制器的状态机由模式选择信号TMS控制,TMS由TCK计时。状态机只有两条“路径”,代表两种不同的模式:指令模式和数据模式。该模式是通过在TMS高位或TMS低位进行时钟选择的。然后,当处于给定模式时,状态机要么前进(TMS高),要么向复位状态移动(TMS低)。我们将在下一篇文章中详细讨论状态机。

如何使用JTAG

使用JTAG通常是这样工作的:

  1. 首先,选择指令模式。指令模式'路径'中的一个状态允许用户通过TDI指令时钟。
  2. 然后状态机继续运行,直到重置为止。
  3. 对于大多数指令,下一步是选择数据模式。在这种模式下,数据通过TDI加载和/或从TDO读取。TDI和TDO的数据路径将按照已打卡的指令进行配置。
  4. 当读或写操作完成后,状态机再次进入复位状态。

测试说明和数据寄存器

JTAG标准要求在所有设备中有两个数据寄存器和四个指令。另外6个数据寄存器和13条指令也是标准化的,但不是必需的。

所需的数据登记册如下:

  • BSR- “边界扫描寄存器”,将数据传递给边界扫描单元的主寄存器
  • 旁路- 一个单位通过THRU寄存器,将TDI连接到TDO,而无需先通过边界扫描单元格

供应商可以根据其设计需求实现其他数据寄存器,无论是标准化的还是特定于设计的。JTAG标准需要实现的唯一指令是:

  • ext-使用边界扫描单元执行“外部”边界扫描测试
  • 样本预加载- 设备功能正常的边界扫描
  • 旁路-绕过边界扫描单元

常见的JTAG指令

其他建议说明包括:

  • IDCODE—输出存储在标识数据寄存器中的标识码
  • 夹钳霍兹—用于隔离设备部件,无损坏风险。HIGHZ强制所有逻辑输出到高阻抗模式,而钳夹强制逻辑输出到特定的值,例如,确保一个设备不响应时,其他设备正在测试
  • IC_RESET当一个复位选择寄存器被实现时必须的,允许控制设备复位和功率
  • CLAMP_HOLD.,CLAMP_RELEASE,tmp_status.- 通过TMP控制器实现测试模式持久性(TMP)时必须使用
  • init_setup.,INIT_SETUP_CLAMP,INIT_RUN—当设备有可编程IO引脚时推荐使用

此外,还有一些在标准中定义但不属于必需或推荐的可选指令:

  • 跑步赛- 内置系统测试,内部控制
  • int-内部边界扫描测试
  • 用户码- 用户可编程ID代码已移出
  • ECIDCODE- 电子芯片识别码,硅片的标识符本身

指令被分配二进制代码,并且可以被视为公共(对于最终用户/设计器)或私有(用于设备供应商的设备验证)。大多数指令没有对二进制值的要求,这意味着它是制造商的选择。一个例外是旁路指令,它是{1,1,...,1},即所有。标准确实要求所有可能的指令二进制代码,无论是有效还是无效,默认为某种明确的行为。

大多数JTAG指令可以广泛地描述为将不同的数据寄存器连接到TDI / TDO路径。旁路指令通过1位移位寄存器将TDI直接连接到TDO,IDcode指令将识别码寄存器连接到TDO,最EXT,Intest,样本,预加载指令全部将边界扫描寄存器(BSR)数据寄存器连接到TDI和tdo,等等。

现在你可能会问,我们应该如何知道指令代码是什么?

正如前面提到的,这是特定于供应商的,但通常JTAG接口将被包装在一个“中间件”架构中,它不仅包括JTAG TAP,还包括接口和连接到设备核心的连接,如闪存、ROM内存或CPU寄存器。中间件架构的一个例子是Arm的coreight架构,尤其是Arm调试接口(ADI),它以调试端口、访问端口和设备资源的形式为JTAG TAP添加了额外的结构。

结论

现在我们大致了解了JTAG是什么,以及它能做什么。我们看到了JTAG TAP(测试访问端口),以及一些指令和数据寄存器。

仍然有很多信息覆盖,最重要的是水龙头状态机,这是下一篇文章的主题。通过了解状态机和点击,我们可以开始超出JTAG标准,查看ARM调试接口和特定JTAG接口,如Seggar J-Link和Black Magic Probe。