[JTAG]跟我学JTAG协议破解——第一弹+初识JTAG+TAP状态机 下载本文

内容发布更新时间 : 2024/6/4 23:57:01星期一 下面是文章的全部内容请认真阅读。

[JTAG]跟我学JTAG协议破解——第一弹 初识JTAG TAP状态机

2012年9月18日 5:28

[准备知识]

A、基本的状态机知识

B、基本的C语言能力,包括位操作、常用宏定义、数组、指针等常见内容 C、会使用一种单片机

D、熟悉SPI协议的物理原理 E、对JTAG的好奇和兴趣

[ 序 言 ]

JTAG协议是目前应用最广泛的下载和仿真协议,对协议的最初缔造者来说,这也许有点无心插柳柳成荫

的感觉——最初的JTAG协议只是用来辅助专门的硬件质检部门对印刷电路进行检测的。这些老账现不再提了

我们现在看到的各种JTAG下载和仿真协议都是各生产厂商在原有JTAG协议的思想上进行扩充的,并不具有通

用性,甚至连最基本的电路检测部分功能也被加以改造——比如,一个JTAG指令可能在大部分的版本中是4

位长度的,而对于AVR32来说,一个JTAG指令却是5位。总之,现在大行其道的JTAG协议,不变的部分就只有

其核心TAP状态机了。ARM有ARM的JTAG,AVR有AVR的JTAG,51有51的JTAG……

在这样一个缺乏统一标准的“街头”JTAG时代,如果你想学好JTAG下载仿真协议的破解,就必须从TAP 状态机开始。

[原理解析]

在你被复杂的时序图弄得眼花缭乱之前,你应该首先记住以下的断言:

A、JTAG协议的本质与SPI协议并没有什么不同,它等于一个复杂的SS状态机+变长的MOSI和MISO数据移位

操作。不过所谓的变长,都是事先约定好的。

B、JTAG协议是一个同步通讯协议,它是全双工的。它的通讯原则是“以物易物”——即你如果想得到某

些东西,你必须先给与相同长度的内容;你如果只是想发送一些数据,也会自动获取相同长度的内容,

至于交换的内容是否有意义,这是另外一回事了。

C、JTAG协议无论多么复杂,实际上只有4根线起作用(有时候还有两根鸡肋的nSRST和TRST),他们分别

是TMS、TCK、TDI和TDO,他们分别对应SPI协议里面的SS、SCK、MOSI和MISO。在本质上,他们并没有

什么不同。即便是ARM的JTAG那么多的引脚,实际上起作用JTAG的也就这4根线而已。

D、JTAG的数据操作都是基于移位寄存器的。

E、如果JTAG协议在某个下载仿真协议中只是用来发送控制信息和少量的数据,而大量的数据传输是通过

额外的其它引脚进行的,即便这个协议被称为JTAG仿真其本质也早已超过JTAG了,严格来说,不应该

称之为JTAG。因为JTAG协议中就只有4根线(有时候也算上nSRST和TRST)而已。典型的如NEXUS协议。

说了这么多,我们终于可以开始正式的讲解了。

一、从SPI到JTAG

如果熟悉SPI,你会发现SPI是如此的简单、和谐——一根用于二进制位同步的时钟线SCK,一根用于

主机发送到从机的数据线MOSI(Master Out Slave In),一根用于从机发送到主机的数据线MISO(Master

In Slave Out),外加一根用于复位SPI从机控制器以达到通讯同步的控制信号SS(不妨理解为Slave

Synchronization)。如果乐意,你很容易就通过消减MOSI和MISO的方法获得精简的单向通讯。

前面我们提到,JTAG的数据操作都是基于移位寄存器的,这一点和SPI是相同的。JTAG协议的核心在

于能够有效地传输指令和数据,并且传输指令和数据的过程是能够明确的加以区别对待而不会造成歧义的。

如何实现这一功能呢?JTAG协议只是将原本用来复位从机的SS信号扩展为一个状态机。而该状态机每一个

状态都有两个状态触发——在TCK(也就是SCK)的上升沿,TMS(也就是SS)的电平决定了跳转的分支。

下图就是一个典型的TAP状态机,值得庆幸的是,该状态机所有JTAG协议中都会遵守的部分。

如果这是你第一次研究TAP状态机,首先你不必去追究TAP究竟是哪些英文单词的缩写,因为Test Access

Port已经是过去很久的事情了,现在的JTAG状态机虽然功能没变,但早就从事其它“高科技”行业了。

第二眼看着附图,你会发现,其实整个状态机不过分为三个部分:信道选择部分、数据信道和指令信道。

所谓的信道选择,就是图中最顶上由四个状态组成的矩形,分别对应着四个状态: 1、JTAG TAP状态机复位状态

顾名思义,就是进入该状态,将导致整个硬件TAP控制器复位,所有的寄存器都将被初始化。在

TCK的上升沿,TMS为低电平时,进入下一个状态;否则保持不变。 2、JTAG TAP的Run-Test/Idle状态

其实就是“开工”和“休息”的选择分支点。在TCK的上升沿,TMS的高电平将导致状态切换,进

入数据信道的通讯状态;否则保持不变。 3、JTAG TAP的Select-DR Scan状态

Select DR Scan翻译成中文就是“选择数据移位寄存器进行移位操作”,简单说来,就是当我们

在该状态下,TCK的上升沿读取到了TMS的低电平将直接进入数据信道的操作子状态机;在TCK的上升

沿读取到了TMS的高电平,将切换到指令信道的通讯状态。 4、JTAG TAP的Select-IR Scan状态

Select-IR Scan翻译成中文就是“选择指令寄存器进行移位操作”,简单来说,就是当我们在该状

态下,TCK的上升沿读取到了TMS的低电平将直接进入指令信道的操作状态机;在TCK的上升沿读取到了

TMS的高电平,将重新回到JTAG的复位状态。