[交流][jtag]跟我学jtag协议破解——第一弹初识jtagtap状态机_第1页
[交流][jtag]跟我学jtag协议破解——第一弹初识jtagtap状态机_第2页
[交流][jtag]跟我学jtag协议破解——第一弹初识jtagtap状态机_第3页
[交流][jtag]跟我学jtag协议破解——第一弹初识jtagtap状态机_第4页
[交流][jtag]跟我学jtag协议破解——第一弹初识jtagtap状态机_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、准备知识a、基本的状态机知识b、基本的c语言能力,包括位操作、常用宏定义、数组、指针等常见内容c、会使用一种单片机d、熟悉spi协议的物理原理e、对jtag的好奇和兴趣jtag协议是目前应用最广泛的下载和仿真协议,対协议的最初缔造者來说,这也许 有点无心插柳柳成荫的感觉一一最初的jtag协议只是用来辅助专门的硬件质检部门对卬 刷电路进行检测的。这些老账现不再提了我们现在看到的各种jtag下载和仿真协议都是各生产厂商在原有jtag协议的思想上进 行扩充的,并不具有通用性,甚至连最基本的电路检测部分功能也被加以改造一一比如, 一个jtag指令可能在大部分的版本中是4位长度的,而对于avr32來说,

2、一个jtag指 令却是5位。总乙现在大行具道的jtag协议,不变的部分就只有具核心tap状态机了。 arm 有 arm 的 jtag, avr 有 avr 的 jtag, 51 有 51 的 jtag.在这样一个缺乏统一标准的"街头jtag时代,如果你想学好jtag下载仿真协议的破 解,就必须从tap 状态机开始。原理解析在你被复杂的时序图弄得眼花缭乱z前,你应该首先记住以下的断言:a、jtag协议的本质与spi协议并没有什么不同,它等于一个复杂的ss状态机+变长 的mosi和miso数据移位操作。不过所谓的变长,都是事先约定好的。b、jtag协议是一个同步通讯协议,它是全双工的。它

3、的通讯原则是“以物易物一一 即你如果想得到某些东四,你必须先给与相同长度的内容;你如果貝是想发送一些数据, 也会自动获取相同长度的内容,至于交换的内容是否有意义,这是另外一冋事了。c、jtag协议无论多么复杂,实际上只有4根线起作用(有时候还有两根鸡肋的nsrst 和trst),他们分别是tms、tck、tdi和tdo,他们分别对应spi协议里面的ss、sck、 mosi和misoo在木质上,他们并没有什么不同。即便是arm的jtag那么多的引脚, 实际上起作用jtag的也就这4根线而已。d、jtag的数据操作都是基于移位寄存器的。e、如果jtag协议在某个下载仿真协议中只是用來发送控制信息和

4、少量的数据,而大 量的数据传输是通过额外的具它引脚进行的,即便这个协议被称为jtag仿真其本质也早 已超过jtag 7 ,严格来说,不应该称之为jtag。因为jtag协议屮就只有4根线(有时 候也算上nsrst和trst)而已。典型的如nexus协议。说了这么多,我们终于可以开始正式的讲解了。一、从 spi 到 jtag如果熟悉spi,你会发现spi是如此的简单、和谐一一一根用于二进制位同步的时钟 线sck,根用于主机发送到从机的数据线mosi (master out slave in),根用于从机 发送到主机的数据线miso (masterln slave out),外加一根用于复位spi从

5、机控制器以达 到通讯同步的控制信号ss (不妨理解为slave synchronization)o如果圧意,你很容易就通过消减mosi和miso的方法获得精简的单向通讯。前面我们提到,jtag的数据操作都是基于移位寄存器的,这一点和spi是相同的。 jtag i-办议的核心在于能够有效地传输指令和数据,并且传输指令和数据的过程是能够明 确的加以区别对待而不会造成歧义的。如何实现这一功能呢? jtag协议只是将原木用来复位从机的ss信号扩展为一个状态 机。而该状态机每一个状态都冇两个状态触发一一在tck (也就是sck)的上升沿,tms (也就是ss)的电平决定了跳转的分支。下图就是一个典型的t

6、ap状态机,值得庆幸的是,该状态机所有jtag协议中都会遵 守的部分。如果这是你笫一次研究tap状态机,首先你不必去追究tap究竟是哪些英文单词的 缩写,因为test access port已经是过去很久的事情了,现在的jtag状态机虽然功能没 变,但早就从事其它“高科技行业了。第二眼看着附图,你会发现,其实整个状态机不过分为三个部分:信道选择部分、数 据信道和指令信道。所谓的信道选择,就是图中最顶上由四个状态组成的矩形,分别对应着四个状态:1、jtag tap状态机复位状态顾名思、义,就是进入该状态,将导致整个硬件tap控制器复位,所冇的寄存器 都将被初始化。在tck的上升沿,tms为低电平

7、时,进入下一个状态;否则保持不变。2、jtag tap 的 run-test/ldle 状态其实就是“开工和“休息的选择分支点。在tck的上升沿,tms的高电平将导致 状态切换,进入数据信道的通讯状态;否则保持不变。3、jtag tap 的 select-dr scan 状态select dr scan翻译成中文就是“选择数据移位寄存器进行移位操作,简单说来, 就是当我们在该状态下,tck的上升沿读取到了 tms的低电平将直接进入数据信道的操 作子状态机;在tck的上升沿读取到了 tms的高电平,将切换到指令信道的通讯状态。4、jtag tap 的 select-ir scan 状态selec

8、t-irscan翻译成中文就是选择指令寄存器进行移位操作,简单来说,就是 当我们在该状态下,tck的上升沿读取到了 tms的低电平将直接进入指令信道的操作状 态机;在tck的上升沿读取到了 tms的高电平,将重新回到jtag的复位状态数据信道和指令信道对应着两个子状态机,从本质上数据和指令并没有任何不同, 只是习惯上,指令的长度固定为4个二进制位(avr32的jtag是5个),而数据则随着 不同的指令选择了不同长度的指令寄存器,这个就需要具体查阅相关的协议说明了,比 如jtag idcode的长度固定为32位,而avr32的复位指令却有5位(很多情况下别指 望是8的倍数)。根据阅读前血“选择部

9、分4个状态机的经验,大家应该対照着图片自 己尝试去理解剩下的两个信道。下面,我只就常见的儿个状态进行解释(以数据信道为例,指令信道可以参考其内容)。capture dr 状态前文说过,jtag协议是基于移位寄存器的,其通讯具有"以物易物的特性,在我 们进入真正的数据传输之而,需要告知jtag“准备通讯了哦?你有没有东西要给我哈? “, 于是capture dr就是一个给jtag机会将需要传达给我们的数据放入指定的移位寄存器 屮的状态。2、shift dr 状态这个状态就是通过tdi和td0进行数据传输的状态。需要说明的是,即便进入了 该状态,tms上的电平在tck的上升沿也是会被读取

10、的,从图中看到,一旦在tms ± 读取到高电平,系统就会跳出shift dr状态如果此时数据没有传输完成,造成的示果是不确定的。请人家注意,我所说的是不 确定,而不是“很严重:同样是因为移位寄存的传输特性,冇时候并不要求一定要将所 有的数据都完整的进行传输,比如在avr32中,针对sab的数据操作,往往只需耍进行 最关键的部分,详细地内容可以参照相关的数据手册;但有的时候,数据的不完整传输则会导致很严重的后果,这取决于具体的jtag通 讯协议。所以,为了保险起见,一旦进入shift dr状态,在发送最后一个数据之而,请 保持tms为低电平,当要发送最后一个数据时,应该将tms设置为高

11、电平,这样,当 tck跳变为上升沿时,系统既完成了最后一个数据的传输,也成功的退出了 shift dr状态。3、exitl dr 状态该状态提供了我们一个在刚才输入的数据生效前,重新修改的机会。一般情况下,我们直接保持tms的高电平,并在tck的上升沿驱动tap状态机,直接进入update-dr 状态。4、update-dr 状态顾名思义,就是使我们输入的数据生效一一一般jtag内部的动作就是触发一个锁 存信号,将移位寄存器屮的内容并行的读取到对应的寄存器屮。update-dr有两个出口, 个是,tms的低电平对应run-test/ldle,还冇一个是tms的高电平对应的select-dr s

12、can0这两个操作看似区别不人,但是意义非凡。前者往往会导致jtag内部产生额外的 时序(比如发生一个信号,表示完成了一个特定的周期操作,在avr的jtag下载中有 此实例);后者则表示完成了一次数据操作,将进行下一个数据的操作,但是这些操作属 于同一个操作周期。当然有些情况下,这两种方法是没有区别的。关于理论部分的讲解,到此为止,留下一个小小的思考,当tap状态机处于一个未 知的状态时,如何才能通过一个统一的操作使其回到run-test/ldel状态呢?给一个小小 的捉示,针对tap状态机的tms信号,给定固定的电平,在有限的tck上升沿屮,完成 状态机的复位。那么这个有限的范i韦i最少是多

13、少个时钟周期?这个固定的电平究竟是高还是低呢?实际应用卜面的代码是我应用在snail mkll demo屮川來操作tap状态机的实际代码,它根据 用户输入的tap控制流,产生tap控制时序,比如我们需要从run-test/ldle状态进入 shifmr状态,根据tap状态图,我们很容易得出盂要产生的tms信号依次为1(进入select dr scan) 1 (进入 select ir scan) 0 (进入 capture ir) 0 (进入 shift-irscan), 一共卩4个 二进制位,根据从lsb到msb依次发送的顺序,需要传送给函数的值就是0x03,长度为 4o需要注意的是,进入s

14、hift-ir状态以后,有可能要设置此时的需要tms保持的电平状 态,因此,实际传送的0x03其内容应该是1 1000,最示一个0表示完成前而4个tms 时序的输入以后,tms保持低电平。蝕后一个0不计入t度。1.2.3.4.5.6.*函数说叨:jtag tap状态机控制函数*输入:控制序列,序列长度*输出: 无*调用函数:无7. *8. *9. *10. *11. *12. *13. *14. *使用说明*1、tms在tck上升边沿输出状态控制量。*2、连续5个tck周期在tms上输出高电平将进入test- *logic-reset 模式。*3、使用该函数时,请将状态机跳转以后tms需要保*

15、 持的电平也作为一个有效输入加入到序列的末尾* 但描述序列长度的数值不需要相应的增加。*15.*/16. void jtag_tap_control(uint8 chctrstream,uint8 chlength)17. 18. uint8 n = 0;19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48. 49.复制代码状态机控制序列for (n = 0;n < chlength;n+)clr_tckif (chctrstream& bit(n

16、)set_tmselseclr_tmsjtag_clock_delayset_tck/*延时部分*/jtag_clock_delay保持电平if (chctrstream& bit(chlength) set_tmselseclr_tms为了方便使用,我们可以将一些常用的tap操作川宏进行封装,从而获得较高的代码可读性:12. # define jtag_tap_test_logic_resetjtag_tap_control(0xlf,6);3. # define jtag_tap_shift_irjtag_tap_control(0x03,4);4. # define jtag_tap_return_run_test_ideljtag_tap_control(0x01,2);5. # define jtag_tap_enter_shift_dr_from_shift_ir jtag_tap_control(0x03,4);6. # define jtag_tap_shift_drjtag_tap_control(0x01,3);复制代码 工程实例step 1:首先我们耍卜载一个jtag时序分析软件jtag hacker点击此处卜载ourdev 496456.rar(文件人小:235k)(原文件名:上位机.rar)step 2:我们要下载一个示例时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论