常见JTAG链故障排查
来源: | 作者:风标电子工程师 | 发布时间: 2024-09-10 | 3 次浏览 | 🔊 点击朗读正文 ❚❚ | 分享到:

各种电路故障可能导致JTAG链错误。本文描述了最常见的故障以及如何使用JTAG Chain Debugger找到问题的源头。


JTAG Chain Debugger的“Check Chain”命令执行以下序列:

1. 计算链中的设备数量。

2. 读取每个设备的ID代码,并在库中搜索匹配的BSDL文件。

3. 测量链中指令寄存器的总长度,并根据BSDL文件中的数据检查预期的总长度。

4. 对链中的每个设备,测量其采样寄存器长度,并与BSDL文件中声明的值进行比较。

通过点击JTAG Chain Debugger屏幕底部的“Check Chain”按钮可以运行此测试:



图1 – 从JTAG Chain Debugger运行Check Chain


JTAG链的常见问题有:

(1) 外部信号之一(TDI、TMS、TCK或TDO)开路或短路,如图2中的错误1和4所示

(2) 公共信号之一(TMS或TCK)仅对一个设备开路,如下所示错误2。

(3) 设备之间的一个链接断开,如错误3所示。

(4) 一个设备处于复位状态,如错误5所示。这是最常见的问题。




图2 – 三设备JTAG链中的电路故障

  • 如果存在故障1,所有设备仍将正常工作,因此在Check Chain测试期间可以读取到芯片的ID代码。但是,测试还通过将所有设备置于BYPASS模式,将已知数据模式输入链中,并等待该模式从最后一个TDO输出,来计算链中的设备数量。故障1将阻止这种情况发生,因此将报告无法计算链中的设备数量,而会显示它们的ID代码。

  • 如果在设备上存在故障2(即一个IC缺少TCK和/或TMS信号),则无法从其TDO引脚输出数据。如果最后一个设备出现此故障,链中将看不到任何数据。如果在链中的早期设备发生此故障,将从最后的TDO读取数据,因此受影响设备之后的设备的ID代码仍将正确读取;受影响设备及其之前链上的设备的ID代码将缺失。此外,因为TDI上的数据无法通过整个链进行时钟同步,Check Chain测试将报告无法计算设备数量。

  • 如果存在故障3,设备之间将无法传输数据,但是这可以正确读取断开点后设备的ID代码。因此,读取的ID代码数量将与板上的设备数量不匹配。同样,因为这阻止了数据通过整个链传递,Check Chain测试将会报告无法计算设备数量。

  • 如果存在故障4,其效果将如同链中的最后一个设备没有TMS或TCK信号,处于复位状态,或需要测试复位序列但未正确应用。Check Chain测试将报告没有有效数据。

  • 如果设备存在故障5,即设备处于复位状态(或所需的测试复位序列未正确应用),它将无法驱动其TDO引脚。如果带有故障的设备是链中的最后一个设备,这意味着无法从链中读取数据。如果受影响的设备在链中较早,测试将能够读取处于复位状态的设备之后的设备的ID代码。在任一情况下,数据都无法通过系统完全进行时钟同步,这意味着Check Chain测试还将报告无法计算设备数量。


示例

这些板级故障可以通过运行Check Chain测试来发现。下面将使用具有两个JTAG芯片的链的示例,描述测试的可能结果以及它们与这些不同故障的关系。

示例1:所有ID代码读取但设备数量未计数



因为两个设备的ID代码都正确读取了,可以得出以下结论:

两个设备的TCK和TMS功能正常(即不是故障2)。

设备之间的连接完好(即不是故障3)。

最后一个TDO连接正确(即没有故障4)。

设备未处于复位状态(即不是故障5)。

设备的数量是通过将已知序列输入第一个设备的TDI引脚来计数的。因为XJTAG无法计算设备数量,结论是TDI信号没有到达链中的第一个设备。

示例2:某些ID代码缺失且设备数量未计数



因为读取了部分ID代码,最后一个设备必须正常工作:

最后一个设备的TCK和TMS功能正常(即最后一个设备不是故障2)。

最后一个TDO连接正确(即没有故障4)。

链中的最后一个设备未处于复位状态(即最后一个设备不是故障5)。

故障必须位于第一个设备或两个设备之间的连接上,可能由以下问题之一引起:

尽管第二个设备的TCK和TMS功能正常,但第一个设备的其中一个或两个信号开路。

两个设备未连接在一起(故障3)。

链中的第一个设备处于复位状态或需要测试复位序列但未正确应用(故障5)。

示例3:未返回有效数据



在此示例中,没有从TDO读取到有效数据。这可能是由以下各种问题引起的:

连接到最后一个设备的TMS和/或TCK信号不正确(故障2)。

最后一个TDO连接不正确(故障4)。

链中的最后一个设备处于复位状态(故障5),或者需要测试复位序列但未正确应用。


手动调试

为了帮助精确定位问题的原因,可以通过从“Check Chain”下拉菜单点击“Scan ID Codes”来执行JTAG重置后跟读取ID代码的连续循环。将JTAG Chain Debugger置于这种模式会使数据持续通过链流动,并允许使用示波器来帮助定位问题的源头。