外围电路应用
1.1 TMS
- TMS是启动使能信号(标准PAGE-11),上拉。
1.2 TCK
- TCK是时钟信号(标准PAGE-9),上升沿或下降沿有效,可以上拉也可下拉,根据具体的器件要求选择。
1.3 TDI
- TDI是数据输入(标准PAGE-11),上拉。
1.4 TDO
- TDO是数据输出(标准PAGE-12),三态输出,可以和TDI做级联,上拉或浮空。
1.5 TRST
- TRST 是复位信号(标准PAGE-13),低电平为复位状态,上拉。
接口信号
JTAG接口使用以下五个专用信号,每个支持该标准的芯片都必须提供这些信号:
- TRST(测试复位):这是一个测试复位输入信号,用于初始化并禁用测试接口。
- TCK(测试时钟):这是测试时钟输入信号,它独立于任何系统时钟来控制测试接口的时序。TCK由控制测试的设备提供脉冲信号,而不是由被测试设备提供。它可以以任何频率(最高可达几兆赫兹)产生脉冲,甚至可以以不同的速率产生脉冲。
- TMS(测试模式选择):这是测试模式选择输入信号,用于控制测试接口状态机的状态转换。
- TDI(测试数据输入):这是测试数据输入线,用于向JTAG寄存器(边界扫描寄存器、指令寄存器或其他数据寄存器)提供数据。
- TDO(测试数据输出):这是测试数据输出线,用于将JTAG寄存器中的数据以串行方式输出到控制测试的设备。它携带从边界扫描链(或其他JTAG寄存器)采样的值,并将这些值传输到串行测试电路中的下一个芯片。
在一块包含多个支持JTAG芯片的电路板上,测试电路的常见连接方式是将TRST*、TCK和TMS信号并行连接到每个芯片上,并将一个芯片的TDO连接到下一个芯片的TDI,形成一个单环结构。这样,电路板就呈现出一个具有上述五个相同信号的单一测试接口。对于只有少数几个带有JTAG接口芯片的电路板,一种更简单的布置方式是为每个这样的芯片提供一个JTAG测试端口,并独立控制测试。
JTAG功能——边界扫描

JTAG总线可以连接多个设备,每个设备都有JTAG总线接口,每个设备都有自己的ID码和寄存器。可以通过总线相连,一次扫描多个设备。
再来看每个芯片,内部扫描器连接所有的GPIO寄存器,可以控制GPIO电平状态,写入数据,读取数据。
利用这个特性,我们可以主动拉高某个GPIO,然后读取其他GPIO的电平状态,如果其他GPIO电平发生了变化,则可以判断出GPIO是否连锡。通过一定的算法,可以实现对所有芯片的所有GPIO进行扫描,判断一批板子的连接情况。
其实网上那些廉价盗版的JTAG调试器基本都没有这个功能,而且这种调试器硬件成本比其售价要低不少,自己动动手也能做一个功能非常简单的调试器。
想要深入了解内部工作原理的话,可以参考以下文章:A Brief Introduction to the JTAG Boundary Scan Interface —— Nick Patavalis
JTAG协议的状态机(TAP控制器)
JTAG协议工作的基本逻辑全依赖内部的TAP控制器(Test Access Port),其实就是一个状态机,通过TMS信号来切换不同的状态。

Test-Logic-Reset 测试逻辑复位状态
- 处于这种状态下,测试逻辑被禁止以允许芯片正常操作,读 IDCODE 寄存器将禁止测试逻辑。
- 无论 TAP 控制器处于何种状态,只要将 TMS 信号在 5 个连续的 TCK 信号的上升沿保持高电平,TAP 就将进入 Test-Logic-Reset 状态。如果 TMS 信号一直为高电平,那么 TAP 将保持在 Test-Logic-Reset 状态。另外,TRST 信号也可以强迫 TAP 进入 Test-Logic-Reset 状态。
- 处于 Test-Logic-Reset 状态的 TAP,如果下一个 TCK 的上升沿时 TMS 信号处于低电平,那么 TAP 将被切换到 Run-Test-Idle 状态。
Run-Test-Idle 运行测试空闲状态
- Run-Test-Idle 是 TAP 控制器扫描操作空闲状态。如果 TMS 信号一直处于低电平,那么 TAP 将保持在 Run-Test-Idle 状态。
- 当 TMS 信号在 TCK 上升沿处于高电平,TAP 控制器将进入 Select-DR-Scan 状态。
Select-DR-Scan 选择数据寄存器扫描状态
- Select-DR-Scan 是 TAP 控制器的一个临时状态,边界扫描寄存器 BSR 保持它们先前的状态。
- 当 TMS 信号在下一个 TCK 上升沿处于低电平,TAP 控制器进入 Capture-DR 状态,一个边界扫描寄存器的扫描操作同时被初始化。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 控制器将进入 Select-IR-Scan 状态。
Capture-DR 捕获数据寄存器状态
- 如果 TAP 控制器处于 Capture-DR 状态,且当前指令是 SAMPLE/PRELOAD 指令,那么边界扫描寄存器 BSR 在 TCK 信号的上升沿捕获输入管脚的数据。如果此时不是 SAMPLE/PRELOAD 指令,那么 BSR 保持它们先前的值。另外,BSR 的值被放入连接在 TDI 和 TDO 管脚之间的移位寄存器中。
- 处于 Capture-DR 状态时,指令不会被改变。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Exit1-DR 状态。如果 TMS 信号在下一个 TCK 上升沿处于低电平,则 TAP 进入 Shift-DR 状态。
Shift-DR 移位数据寄存器状态
- 在 Shift-DR 状态下,在每个 TCK 的上升沿,TDI - 移位寄存器 - TDO 串行通道向右移一位,TDI 的数据移入移位寄存器,移位寄存器最靠近 TDO 的位移到 TDO 管脚上。
- 处于 Shift-DR 状态时,指令不会被改变。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Exit1-DR 状态。如果 TMS 信号处于低电平,则 TAP 一直进行移位操作。
Exit1-DR 退出数据寄存器状态 1
- Exit1-DR 是 TAP 控制器的一个临时状态。如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Update-DR 状态;如果 TMS 信号在下一个 TCK 上升沿处于低电平,则 TAP 进入 Pause-DR 状态。
- 处于 Exit1-DR 状态时,指令不会被改变。
Pause-DR 暂停数据寄存器状态
- Pause-DR 状态允许 TAP 控制器暂时停止 TDI - 移位寄存器 - TDO 串行通道的移位操作。
- 处于 Pause-DR 状态时,指令不会被改变。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Exit2-DR 状态;如果 TMS 信号处于低电平,则 TAP 一直保持暂停状态。
Exit2-DR 退出数据寄存器状态 2
- Exit2-DR 也是 TAP 控制器的临时状态。如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Update-DR 状态,结束扫描操作;如果 TMS 信号在下一个 TCK 上升沿处于低电平,则 TAP 重新进入 Shift-DR 状态。
- 处于 Exit2-DR 状态时,指令不会被改变。
Update-DR 更新数据寄存器状态
- 在正常情况下,边界扫描寄存器 BSR 的值是被锁存在并行输出管脚中,以免在 EXTEST 或 SAMPLE/PRELOAD 命令下执行移位操作时改变 BSR 的值。当处于 Update-DR 状态时选择的是 BSR 寄存器,那么移位寄存器中的值将在 TCK 的下降沿被锁存到 BSR 寄存器的并行输出管脚中去。
- 处于 Update-DR 状态时,指令不会被改变。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Select-DR-Scan 状态;如果 TMS 信号在下一个 TCK 上升沿处于低电平,则 TAP 进入 Run-Test-Idle 状态。
Select-IR-Scan 选择指令寄存器扫描状态
- Select-IR-Scan 是 TAP 控制器的一个临时状态。
- 如果 TMS 信号在下一个 TCK 上升沿处于低电平,TAP 控制器进入 Capture-IR 状态,一个对指令寄存器的扫描操作同时被初始化。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 控制器将进入 Test-Logic-Reset 状态。
- 处于 Select-IR-Scan 状态时,指令不会被改变。
Capture-IR 捕获指令寄存器状态
- 处于 Capture-IR 状态时,指令寄存器中的值被固定设置成 0b0000001,并将它放入连接在 TDI 与 TDO 之间的移位寄存器中。
- 处于 Capture-IR 状态时,指令不会被改变。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Exit1-IR 状态;如果 TMS 信号在下一个 TCK 上升沿处于低电平,则 TAP 进入 Shift-IR 状态。
Shift-IR 移位指令寄存器状态
- 在 Shift-IR 状态下,在每个 TCK 的上升沿,TDI - 移位寄存器 - TDO 串行通道向右移一位,JTAG 指令从 TDI 管脚上被逐位移入移位寄存器,而移位寄存器中的 0b0000001 则被逐位从 TDO 管脚移出。
- 处于 Shift-IR 状态时,指令不会被改变。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Exit1-IR 状态;如果 TMS 信号处于低电平,则 TAP 一直进行移位操作。
Exit1-IR 退出指令寄存器状态 1
- Exit1-IR 是 TAP 控制器的一个临时状态。如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Update-IR 状态;如果 TMS 信号在下一个 TCK 上升沿处于低电平,则 TAP 进入 Pause-IR 状态。
- 处于 Exit1-IR 状态时,指令不会被改变。
Pause-IR 暂停指令寄存器状态
- Pause-IR 状态允许 TAP 控制器暂时停止 TDI - 移位寄存器 - TDO 串行通道的移位操作。
- 处于 Pause-IR 状态时,指令不会被改变。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Exit2-IR 状态;如果 TMS 信号处于低电平,则 TAP 一直处于暂停状态。
Exit2-IR 退出指令寄存器状态 2
- Exit2-IR 也是 TAP 控制器的临时状态。如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Update-IR 状态,结束扫描操作;如果 TMS 信号在下一个 TCK 上升沿处于低电平,则 TAP 重新进入 Shift-IR 状态。
- 处于 Exit2-IR 状态时,指令不会被改变。
Update-IR 更新指令寄存器状态
- 处于 Update-IR 状态时,移位寄存器中的值将在 TCK 的下降沿被锁存到指令寄存器中,一旦锁存成功,新的指令将成为当前的指令。
- 如果 TMS 信号在下一个 TCK 上升沿处于高电平,TAP 进入 Select-DR-Scan 状态;如果 TMS 信号在下一个 TCK 上升沿处于低电平,则 TAP 进入 Run-Test-Idle 状态。
JTAG 接口指令集
JTAG 接口指令集包含以下常用指令:
EXTEST 指令
- 外部测试指令,必须全为 0,TAP 强制定义。该指令初始化外部电路测试,主要用于板级互连以及片外电路测试。
- EXTEST 指令在 Shift-DR 状态时将扫描寄存器 BSR 寄存器连接到 TDI 与 TDO 之间。在 Capture-DR 状态时,EXTEST 指令将输入管脚的状态在 TCK 的上升沿装入 BSR 中。EXTEST 指令从不使用移入 BSR 中的输入锁存器中的数据,而是直接从管脚上捕获数据。在 Update-DR 状态时,EXTEST 指令将锁存在并行输出寄存器单元中的数据在 TCK 的下降沿驱动到对应的输出管脚上去。
SAMPLE/PRELOAD 指令
- 采样/预装载指令,TAP 强制定义。在 Capture-DR 状态下,SAMPLE/PRELOAD 指令提供一个从管脚到片上系统逻辑的数据流快照,快照在 TCK 的上升沿提取。
- 在 Update-DR 状态时,SAMPLE/PRELOAD 指令将 BSR 寄存器单元中的数据锁存到并行输出寄存器单元中,然后由 EXTEST 指令将锁存在并行输出寄存器单元中的数据在 TCK 的下降沿驱动到对应的输出管脚上去。
BYPASS 指令
- 旁路指令,必须全为 1,TAP 强制定义。BYPASS 指令通过在 TDI 和 TDO 之间放置一个 1 位的旁通寄存器,这样移位操作时只经过 1 位的旁通寄存器而不是很多位(与管脚数量相当)的边界扫描寄存器 BSR,从而使得对连接在同一 JTAG 链上主 CPU 之外的其他芯片进行测试时提高效率。
IDCODE 指令
- 读取 CPU ID 号指令,TAP 强制定义。该指令将处理器的 ID 号寄存器连接到 TDI 和 TDO 之间。
一般我们应用只需要记住上下拉电阻即可,内部对于我们来说更像是黑匣子。
参考链接: