JTAG原理

JTAG原理

本文主要介绍了JTAG调试原理,基本内容包括了TAP(test acess port)的介绍。JTAG在内建自测试环境中必不可缺少的一道步骤。

IEEE Standard 1149.1

JTAG 是 JOINT TEST ACTION GROUP 的简称。IEEE 1149.1 标准就是由 JTAG 这个组织最初提出的,最终由IEEE 批准并且标准化的。所以,这个 IEEE 1149.1 这个标准一般也俗称 JTAG 调试标准。
在 IEEE 1149.1 标准里面,寄存器被分为两大类:数据寄存器(DR-Data Register)和指令寄存器(IR-Instruction Register)。数据寄存器用来实现对芯片的输入输出的观察和控制。而指令寄存器用来实现对数据寄存器的控制。

TAP

TAP 是一个通用的端口,通过 TAP 可以访问芯片提供的所有数据寄存器(DR)和指寄存器(IR)。对整个 TAP 的控制是通过 TAP Controller 来完成的。TAP 总共包括 5 个信号接口 TCK、TMS、TDI、TDO 和 TRST :其中 4 个是输入信号接口和另外 1 个是输出信号接口。
一般,我们见到的开发板上都有一个 JTAG 接口,该 JTAG 接口的主要信号接口就是这 5 个。下面,我先分别介绍这个 5 个接口信号及其作用。

Test Clock Input (TCK)
TCK 为 TAP 的操作提供了一个独立的、基本的时钟信号,TAP 的所有操作都是通过这个时钟信号来驱动的。TCK 在 IEEE 1149.1 标准里是强制要求的。
Test Mode Selection Input (TMS)
TMS 信号用来控制 TAP 状态机的转换。通过 TMS 信号,可以控制 TAP 在不同的状态间相互转换。TMS 信号在 TCK 的上升沿有效。TMS 在 IEEE 1149.1 标准里是强制要求的。
Test Data Input (TDI)
TDI 是数据输入的接口。所有要输入到特定寄存器的数据都是通过 TDI 接口一位一位串行输入的(由 TCK 驱动)。TDI 在 IEEE 1149.1 标准里是强制要求的。
Test Data Output (TDO)
TDO 是数据输出的接口。所有要从特定的寄存器中输出的数据都是通过 TDO 接口一位一位串行输出的(由 TCK 驱动)。TDO 在 IEEE 1149.1 标准里是强制要求的。
Test Reset Input (TRST)
TRST可以用来对TAP Controller进行复位(初始化)。不过这个信号接口在IEEE 1149.1标准里是可选的,并不是强制要求的。因为通过 TMS 也可以对 TAP Controller 进行复位(初始化)。

事实上,通过 TAP 接口,对数据寄存器(DR)进行访问的一般过程是:
1.通过指令寄存器(IR),选定一个需要访问的数据寄存器;
2.把选定的数据寄存器连接到 TDI 和 TDO 之间;
3.由 TCK 驱动,通过 TDI,把需要的数据输入到选定的数据寄存器当中去;同时把选定的数据寄存器中的数据通过 TDO 读出来。

TAP状态机

TAP 的状态机如图 1 所示,总共有 16 个状态。在图中,每个六边形表示一个状态,六边形中标有该状态的名称和标识代码。图中的箭头表示了 TAP Controller 内部所有可能的状态转换流程。状态的转换是由 TMS 控制的,所以在每个箭头上有标有 tms = 0 或者 tms = 1。在 TCK 的驱动下,从当前状态到下一个状态的转换是由 TMS 信号决定。假设 TAP Controller 的当前状态为 Select-DR-Scan,在 TCK 的驱
动下,如果 TMS = 0,TAP Controller 进入 Capture-DR 状态;如果 TMS = 1,TAP Controller
进入 Select-IR-Scan 状态。
图1  JTAG   TAP状态机

状态机介绍

这个状态机看似很复杂,其实理解以后会发现这个状态机其实很直接、很简单。观察图1,我们可以发现,除了 Test-Logic Reset 和 Test-Run/Idle 状态外,其他的状态有些类似。例如 Select-DR-Scan 和 Select-IR-Scan 对应,Capture-DR 和 Capture-IR 对应,Shift-DR 和 Shift-IR对应,等等。在这些对应的状态中,DR 表示 Data Register,IR 表示 Instruction Register。寄存器分为两大类,数据寄存器和指令寄存器。其实标识有 DR 的这些状态是用来访问数据寄存器的,而标识有 IR 的这些状态是用来访问指令寄存器的。
Test-Logic Reset
系统上电后,TAP Controller 自动进入该状态。在该状态下,测试部分的逻辑电路全部被禁用,以保证芯片核心逻辑电路的正常工作。通过 TRST 信号也可以对测试逻辑电路进行复位,使得 TAP Controller 进入 Test-Logic Reset 状态。前面我们说过 TRST 是可选的一个信号接口,这是因为在 TMS 上连续加 5 个 TCK 脉冲宽度的“1”信号也可以对测试逻辑电路进行复位,使得 TAP Controller 进入 Test-Logic Reset 状态。所以,在不提供 TRST信号的情况下,也不会产生影响。在该状态下,如果 TMS 一直保持为“1”,TAP Controller将保持在 Test-Logic Reset 状态下;如果 TMS 由“1”变为“0”(在 TCK 的上升沿触发),
将使 TAP Controller 进入 Run-Test/Idle 状态。
Run-Test/Idle
这个是 TAP Controller 在不同操作间的一个中间状态。这个状态下的动作取决于当前指令寄存器中的指令。有些指令会在该状态下执行一定的操作,而有些指令在该状态下不需要执行任何操作。在该状态下,如果 TMS 一直保持为“0”,TAP Controller 将一直保持在 Run-Test/Idle 状态下;如果 TMS 由“0”变为“1”(在 TCK 的上升沿触发),将使 TAPController 进入 Select-DR-Scan 状态。
Select-DR-Scan
这是一个临时的中间状态。如果 TMS 为“0” (在 TCK 的上升沿触发),TAP Controller进入 Capture-DR 状态,后续的系列动作都将以数据寄存器作为操作对象;如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入 Select-IR-Scan 状态。
Capture-DR
当 TAP Controller 在这个状态中,在 TCK 的上升沿,芯片输出管脚上的信号将被“捕获”到与之对应的数据寄存器的各个单元中去。如果 TMS 为“0” (在 TCK 的上升沿触发),TAP Controller 进入 Shift-DR 状态;如果 TMS 为“1” (在 TCK 的上升沿触发),TAPController 进入 Exit1-DR 状态。
Shift-DR
在这个状态中,由 TCK 驱动,每一个时钟周期,被连接在 TDI 和 TDO 之间的数据寄存器将从 TDI 接收一位数据,同时通过 TDO 输出一位数据。如果 TMS 为“0” (在 TCK的上升沿触发),TAP Controller 保持在 Shift-DR 状态; 如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入到 Exit1-DR 状态。假设当前的数据寄存器的长度为 4。如果 TMS 保持为 0,那在 4 个 TCK 时钟周期后,该数据寄存器中原来的 4 位数据(一般是在 Capture-DR 状态中捕获的数据)将从 TDO 输出来;同时该数据寄存器中的每个寄存器单元中将分别获得从 TDI 输入的 4 位新数据。
Update-DR
在 Update-DR 状态下,由 TCK 上升沿驱动,数据寄存器当中的数据将被加载到相应的芯片管脚上去,用以驱动芯片。在该状态下,如果 TMS 为“0”,TAP Controller 将回到Run-Test/Idle 状态;如果 TMS 为“1”,TAP Controller 将进入 Select-DR-Scan 状态。
Select-IR-Scan
这是一个临时的中间状态。如果 TMS 为“0” (在 TCK 的上升沿触发),TAP Controller进入 Capture-IR 状态,后续的系列动作都将以指令寄存器作为操作对象;如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入 Test-Logic Reset 状态。
Capture-IR
当 TAP Controller 在这个状态中,在 TCK 的上升沿,一个特定的逻辑序列将被装载到指令寄存器中去。如果 TMS 为“0” (在 TCK 的上升沿触发),TAP Controller 进入 Shift-IR状态;如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入 Exit1-IR 状态。
Shift-IR
在这个状态中,由 TCK 驱动,每一个时钟周期,被连接在 TDI 和 TDO 之间的指令寄存器将从 TDI 接收一位数据,同时通过 TDO 输出一位数据。如果 TMS 为“0” (在 TCK的上升沿触发),TAP Controller 保持在 Shift-IR 状态; 如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入到 Exit1-IR 状态。假设指令寄存器的长度为 4。如果TMS 保持为 0,那在 4 个 TCK 时钟周期后,指令寄存器中原来的 4bit 长的特定逻辑序列(在 Capture-IR 状态中捕获的特定逻辑序列)将从 TDO 输出来,该特定的逻辑序列可以用来判断操作是否正确;同时指令寄存器将获得从 TDI 输入的一个 4bit 长的新指令。
Update-IR
在这个状态中,在 Shift-IR 状态下输入的新指令将被用来更新指令寄存器。

JTAG访问的一般过程

先看看指令寄存器和数据寄存器访问的一般过程,以便建立一个直观的概念。

1. 系统上电,TAP Controller 进入 Test-Logic Reset 状态,然后依次进入:Run-Test/Idle → Select-DR-Scan → Select-IR-Scan →Capture-IR →Shift-IR →Exit1-IR→Update-IR,最后回到 Run-Test/Idle 状态。在 Capture-IR 状态中,一个特定的逻辑序列被加载到指令寄存器当中;然后进入到 Shift-IR 状态。在 Shift-IR 状态下,通过 TCK 的驱动,可以将一条特定的指令送到指令寄存器当中去。每条指令都将确定一条相关的数据寄存器。然后从 Shift-IR →Exit1-IR → Update-IR。在 Update-IR 状态,刚才输入到指令寄存器中的指令将用来更新指令寄存器。最后,进入到 Run-Test/Idle 状态,指令生效,完成对指令寄存器的访问。
2. 当前可以访问的数据寄存器由指令寄存器中的当前指令决定。要访问由刚才的指令选定的数据寄存器,需要以 Run-Test/Idle 为起点,依次进入 Select-DR-Scan →Capture-DR →Shift-DR →Exit1-DR →Update-DR,最后回到 Run-Test/Idle 状态。在这个过程当中,被当前指令选定的数据寄存器会被连接在 TDI 和 TDO 之间。通过TDI 和 TDO,就可以将新的数据加载到数据寄存器当中去,同时,也可以捕获数据寄存器中的数据。具体过程如下。在 Capture-DR 状态中,由 TCK 的驱动,芯片管脚上的输出信号会被“捕获”到相应的边界扫描寄存器单元中去。这样,当前的数据寄存器当中就记录了芯片相应管脚上的输出信号。接下来从 Capture-DR 进入到Shift-DR 状态中去。在 Shift-DR 状态中,由 TCK 驱动,在每一个时钟周期内,一位新的数据可以通过 TDI 串行输入到数据寄存器当中去,同时,数据寄存器可以通过
TDO 串行输出一位先前捕获的数据。在经过与数据寄存器长度相同的时钟周期后,就可以完成新信号的输入和捕获数据的输出。接下来通过 Exit1-DR 状态进入到Update-DR 状态。在 Update-DR 状态中,数据寄存器中的新数据被加载到与数据寄存器的每个寄存器单元相连的芯片管脚上去。最后,回到 Run-Test/Idle 状态,完成对数据寄存器的访问。

  • 22
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值