相关链接:
JTAG基础
JTAG调试原理
JTAG调试实例
模拟系统崩溃,使用JTAG调试找到崩溃点
JTAG调试原理
两个重要概念:边界扫描和TAP
边界扫描
JTAG如何用于芯片测试呢? 其中用到的最主要部件就是边界扫描链。
边界扫描(Boundary-Scan)即在芯片的每个输入输出管脚上都增加一个移位寄存器单元(Boundary-Scan Register Cell),因为这些移位寄存器单元分布在芯片的边界上,所以被称为边界扫描寄存器。
命名为边界扫描链,是由于它位置处于处理器的边界上。我们知道cpu是通过引脚与外围交流的,所有的数据都会通过引脚输入或者输出,而JTAG就是通过监控引脚的信号达到芯片测试的目的。而边界扫描链就是在引脚上的一个部件。如下图:
在JTAG 调试中,边界扫描是一个很重要的概念,当需要调试芯片时,这些寄存器将芯片与外围电路隔离,实现对芯片输入输出信号的观察和控制:
对于输入管脚,可以通过与之相连的边界扫描寄存器单元把数据加载到该管脚中;
对于输出管脚,可以通过与之相连的边界扫描寄存器“捕获”(CAPTURE)该管脚上的输出信号;
通过边界扫描链,当有信号输入的时候,边界扫描链就能获取信号,当cpu要输出信号的时候,边界扫描链也能获取要输出的信号。另外也可以通过边界扫描链来直接向外部输出信号。
无论是信号的抓取还是输出,都需要有接口来保存这些信号,TDI跟TDO就是做这样一些工作的。
本来边界扫描链保存着引脚上的信号,当通过TDI引脚输入我们自己的信号的时候,会发生沿上面红线方向的移位操作:
TDI ——〉 边界扫描链 —— 〉 TDO |
就能从TDO获取边界扫描链上的信号,我们从TDI输入的信号也会到边界扫描链上去。
在cpu跟外界通信的引脚上的数据无非就是 指令 跟 数据信号(包括地址跟数据) 两种。但是这两者的结合形成了一个完整的程序,能对它们进行监控就表明我们能进行程序的调试。
正常运行状态下,这些边界扫描寄存器单元对芯片是透明的,所以正常的运行不会受到影响。另外,芯片输入输出管脚上的边界扫描(移位)寄存器单元可以相互连接起来,在芯片的周围形成一个边界扫描链(Boundary-Scan Chain),它可以串行的输入和输出,通过相应的时钟信号和控制信号,实现对处在调试状态下的芯片的输入和输出状态的观察和控制。
TAP
TAP(TestAccessPort)是一个通用的端口,通过TAP 可以访问芯片提供的所有数据寄存器(DR)和指令寄存器(IR)。对整个TAP的控制是通过TAP控制器(TAPController)来完成的。TAP的几个接口信号及其作用全部都在《硬件知识-JTAG接口》中全部表示了。
简单地说,PC机对目标板的调试就是通过TAP接口完成对相关数据寄存器(DR)和指令寄存器(IR)的访问。