什么是JTAG?


30

我对嵌入式系统还很陌生,我一直都在使用这个术语,但是我不太明白它是什么。在线快速搜索即可找到以下Wikipedia页面:https : //en.wikipedia.org/wiki/Joint_Test_Action_Group,将其描述为某种调试协议。但是在其他情况下,它就像能够像程序员一样对芯片的存储器进行编程。它是什么?


4
这个问题中藏着一些有用的宝石。
大卫,

2
我给dwelch +1了。另外,有时会将JTAG误用作动词,通常意思是“调试/测试”某事物。一个“ JTAG正在做某事”的人实际上可能正在使用设备制造商与物理JTAG引脚(即SWD)重叠的不同协议。您可以使用SWD或JTAG,但不能同时使用两者。但是,没有人社署的设备(“ swoods”?)。
2016年

是的,您可以使用JTAG进行编程-Snoop
2016年

Answers:


21

它就像USB,SPI,I2C和其他“总线”一样,并且具有许多流行的用途,不仅限于:

  • 特别是在对每个零件投入过多之前对硅进行测试,例如,当芯片仍在晶片上时,您可以检查大部分零件。划片可能会损坏晶圆,因此您想再次测试,但也许要在包装之前,之后进行。

  • 您可以使用它在板上进行边界扫描。您可以在生产线上使用电路板(必须正确设计电路板,并且一定比例的芯片必须支持此功能),但是您可以进行低速连接测试,刺激走线一端的引脚并扫描另一端零件,以根据电路板的设计查看是否已连接。

  • 由于芯片已经具有这些专用引脚,因此对于处理器而言,为什么不使用相同的接口作为与片上调试器(OCD)进行通信的方式,在处理器中进行设计并允许通过jtag与之进行通信。

这是一种通用的方式,可让您隔离要向其发送一系列比特或从中获取一系列比特的链上的事物,从而使您想与之交谈的每个事物都可以针对各种数字进行设计从少量到大量的位。对于调试器,您自然会使其写入或读取芯片中寄存器大小的东西-可能是16位寄存器或32位。但是对于芯片或电路板测试,您的扫描链可能需要数十位。如果需要,您要处理的每个单独事物的大小都可以与其他事物有所不同,这使得它成为具有多种引脚的非常通用的总线,对于这些类型的用例来说很有吸引力。

也许由于软件调试的普及,他们现在有一些两种引脚的解决方案可以节省微控制器的引脚数,也许其他人会采用这种方式,也许没有。


JTAG是否有技术方面的优势可用于这些用途,还是仅出于历史原因?
欧文

好好阅读维基百科的文章。我的意见是因为它已经存在并连接到板和芯片中,并且因为它足够灵活以支持其他用途,并且至少有一些已经具有工具,所以有人必须说为什么不将其用于其他用途。我认为它的灵活性与引脚数比较非常有吸引力。对于调试器或电路编程,还有并且将继续存在其他解决方案,但是由于有了FTDI MPSSE指令以及FTDI在所有USB方面都取得了成功,现在廉价的jtag工具已广泛可用。
old_timer '16

10

JTAG最初是用于在组装后测试PCB的接口。可以通过JTAG端口控制和读取芯片上的IO线,从而可以执行板级测试序列。后来,它也开始用作编程和调试接口。JTAG上可用的功能将取决于您要处理的特定IC。

与大多数其他编程接口相比,JTAG的优势之一是可以采用菊花链方式连接设备。因此,一个JTAG端口可以用于对多个设备进行编程/调试/测试(尽管我建议您设计系统,以便可以将不同品牌的芯片划分到不同的链上,而不幸的是,低级JTAG协议已经相当标准化了,编程/调试芯片不是)。


9

JTAG有点奇怪。首先,该术语可以指定特定的连接器和协议,包括时钟信号(TCK),模式选择(TMS)和数据输入/输出(TDI / TDO)。它由设备网络组成,其中每个设备的TDO在所谓的扫描链中连接到下一个设备的TDI。TMS用于将所有设备同时置于各种模式

扫描链上的设备通常以一个大移位寄存器的形式连接,该移位寄存器由每个单独设备中的寄存器组成。当设备处于SHIFT_IR或SHIFT_DR状态时,它们将连接到两个临时寄存器之一的扫描链:指令寄存器和数据寄存器。

移入值后,可以在切换TCK时适当设置TMS来激活UPDATE_IR或UPDATE_DR模式。此时,该值移入寄存器“生效”。例如,将各种序列移入FPGA的IR并转换为UPDATE_IR,将使FPGA进入各种模式,例如配置,回读,正常运行时,或访问设计中实例化的特定用户寄存器和特定于JTAG的原语。

同样,捕获状态可用于从设备“读取”值并将其放入IR或DR,以通过TDO移出并最终由JTAG程序员读取。


4

JTAG定义了一个串行协议和一些命令,以允许访问复杂IC中的内部寄存器。这允许测试人员使用很少的引脚以标准方式获得可观察性控制性

最初的用途是“边界扫描”,其中所有I / O引脚都可以由环绕芯片的大型移位寄存器读取和驱动。但是,很快增加了它,增加了更多的移位寄存器来访问芯片的内部,包括存储器。

您很少会碰碰碰碰JTAG,访问通常是通过库,也就是驱动程序进行的,这些库,驱动程序由IC制造商提供,并由测试系统和测试访问适配器使用。


那么,芯片实际上需要通过硬件和软件来支持JTAG吗?
UnTraDe

@UnTraDe不,该芯片在硬件和软件方面都支持JTAG(例如,FPGA可能会公开JTAG与用户设计之间的某些接口),但是不需要芯片上具有软件支持。可以通过JTAG与设备交互的工具将同时具有软件和硬件支持(计算机上的软件,以及连接到该计算机上的JTAG编程器的硬件)
–ζ

3

JTAG是什么意思,JTAG是什么。正如其他人指出JTAG“是”用于制造测试一个工业标准总线接口,如在Ĵ oint Ť EST ction G ^ roup。

JTAG对嵌入式软件开发人员的“含义”是SoC /微处理器上的调试接口,用于对芯片上运行的嵌入式软件进行外部调试。市场上几乎所有的CPU / SoC均使用JTAG接口,不仅用于制造测试,而且用于软件调试支持。您会在从服务器类x86 CPU到价格低于50美元的家用WiFi路由器的所有产品上找到JTAG接口。使用正确的接口硬件和正确的软件,这些接口将使您能够读取/写入内存,设置断点和单步代码。

当然,关键是获得正确的硬件和软件。即使基本的JTAG接口是标准化的,设备中可用的特定软件调试功能也可能没有。JTAG就像TCP / IP。它存在于应用程序堆栈的中间。您需要正确的物理层与设备进行通信(即,这表示该事物使用10-Base-2吗?!?!?),并且还需要上面的正确应用软件(这意味着我需要Gopher)客户?!?!?!)。但是,ARM生态系统的优势已经导致了某种程度的标准化(请参阅OpenOCD)。

您还询问了有关使用JTAG编程闪存的问题。是的,某些软件也将其用于此目的。SoC可以提供从CPU存储器地址空间读取/写入的JTAG功能,可以提供对闪存控制器的直接访问,而JTAG至少可以提供对芯片边缘I / O引脚的原始低级别访问(这是JTAG的初衷是为了在制造测试期间实现芯片到芯片互连的连续性测试,即“ JTAG边界扫描”)。如果设备意外“变砖”,那么聪明的程序员可以使用这些工具中的任何一种来驱动对闪存芯片进行重新编程所需的信号。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.