JTAG协议及接口

 转自:http://lishutong.me/emulator-study/debug-port/689.html

这几日在做ARM仿真相关的东西,由于之前对调试接口的最底层不太了解,所以查了些资料补补。
 

  目前JTAG已经作为一种常用的调试接口集成了各种单片机和嵌入式处理器上。下面的这张图就展示了使用JTAG的调试系统的三个组成部分。 PC机:运行IDE软件,将相应的单步、全速等调试命令发送至JTAG仿真器;JTAG仿真器:将调试命令转换成相应的JTAG时序信号传送至目标板的JTAG接口;目标板:运行应用程序,被调试和控制的目标。更为形像化的一点说法是, IDE和仿真器都相当于一种协议转换器:IDE将开发人员的各种调试操作转变了调试命令;JTAG将调试命令转换成JTAG时序。最终实现了应用程序在目标板上的实时调试。

  关于JTAG协议和边界扫描技术的的说明,可以见下面这段文字。这段文字从百度百科整理得到,当然有些过于专业化,不易看懂;无妨,放在这里以后参考。
JTAG协议
  JTAG也是一种国际标准测试协议(IEEE 1149.1兼容),最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(Test Access Port测试访问口)通过专用的JTAG测试工具对内部节点进行测试
 
  IEEE1149.1 标准中规定对应于 数字集成电路 芯片的每个引脚都设有一个移位寄存单元,称为边界扫描单元BSC。它将JTAG 电路与内核逻辑电路联系起来,同时隔离内核逻辑电路和芯片引脚。由集成电路的所有边界扫描单元构成边界扫描寄存器BSR。边界扫描寄存器电路仅在进行 JTAG 测试时有效,在集成电路正常工作时无效,不影响集成电路的功能。
边界扫描技术
  JTAG是一种所谓的边界扫描技术。
 
 
  边扫描测试是在20世纪80年代中期作为解决PCB物理访问问题的JTAG接口发展起来的,这样的问题是新的封装技术导致电路板装配日益拥挤所产生的。边界扫描在芯片级层次上嵌入测试电路,以形成全面的电路板级测试协议。利用边界扫描--自 1990年以来的行业标准IEEE 1149.1--您甚至能够对最复杂的装配进行测试、调试和在系统设备编程,并且诊断出硬件问题。
 

  边界扫描的优点:


  通过提供对扫描链的IO的访问,可以消除或极大地减少对电路板上物理测试点的需要,这就会显著节约成本,因为电路板布局更简单、测试夹具更廉价、电路中的测试系统耗时更少、标准接口的使用增加、上市时间更快。除了可以进行电路板测试之外,边界扫描允许在PCB贴片之后,在电路板上对几乎所有类型的CPLD和闪存进行编程,无论尺寸或封装类型如何。在系统编程可通过降低设备处理、简化库存管理和在电路板生产线上集成编程步骤来节约成本并提高产量。
 

  边界扫描原理

 
  IEEE 1149.1 标准规定了一个四线串行接口(第五条线是可选的),该接口称作测试访问端口(TAP),用于访问复杂的集成电路(IC),例如微处理器、DSP、ASIC 和CPLD。除了TAP之外,混合IC也包含移位寄存器和状态机,以执行边界扫描功能。在TDI(测试数据输入)引线上输入到芯片中的数据存储在指令寄存器中或一个数据寄存器中。串行数据从TDO(测试数据输出)引线上离开芯片。边界扫描逻辑由TCK(测试时钟)上的信号计时,而且TMS(测试模式选择)信号驱动TAP控制器的状态。TRST(测试重置)是可选项。根据相关数据手册中的说明,TRST、TDI、TMS、TCK引脚上需要接一个10KΩ的上拉电阻。
 
 
  在PCB上可串行互连多个可兼容扫描功能的IC,形成一个或多个扫描链,每一个链都由其自己的 TAP。每一个扫描链提供电气访问,从串行TAP接口到作为链的一部分的每一个IC上的每一个引线。在正常的操作过程中,IC执行其预定功能,就好像边界扫描电路不存在。但是,当为了进行测试或在系统编程而激活设备的扫描逻辑时,数据可以传送到IC中,并且使用串行接口从IC中读取出来。这样数据可以用来激活设备核心,将信号从设备引线发送到PCB上,读出PCB的输入引线并读出设备输出。
 
JTAG基本引脚及时序图
   一般来说,最常见的JTAG引脚如下面的这张图中所示。实际的硬件电路中,通常还需要VCC、GND电源信号。 最少的JTAG接口只需要GND、TDI、TDO、TMS、TCK这五根信号,有些仿真器可能还要求必须加上VCC信号由于JTAG扫描电路的复位既可通过拉低TRST实现,也可通过TMS、TCK发送指定的序列完成复位操作,所以TRST不是必须的

  之前我一直对JTAG接口感觉很神秘,很难想像通过这几根信号就能完成复杂的MCU程序调试。但通过查找相应的资料后发现,其实整个调试原理很复杂,但是JTAG接口的信号传输却是挺简单的,和SPI总线非常相似。
 
  JTAG接口的数据传输是 双向串行传输。通过TDI接口,仿真器将数据一位位的送入MCU的JTAG电路中;通过TDO接口,MCU将JTAG内部的数据一位位的输出;数据的输入输出均是在TCK信号的上升沿/下降沿进行同步的。具体来说就 是MCU的JTAG电路在TCK的上升沿采样TDI的信号,在下降沿在TDO输出数据

  另外注意到TMS信号,TMS信号用于进行模式切换,也是用作输出的。 TMS信号也是在TCK的上升沿进行采样
  这样通过在TCK信号的边沿同步,JTAG命令流就可以在这几根信号线上串行的在仿真器与MCU的JTAG接口之间进行流动。可以看到这种工作原理和SPI总线工作原理是非常类似的。同时也可以看到,这些东西看似神秘,其实真正了解了也不过如此,但 其提必须是建立在已经对类似的串行传输过程已经理解的基础之上。因为我之前仔细学习过SPI的信号传输过程,并且记有详细的笔记。所以这次再分析该时序,很容易的就能够将其与以前的积累进行联系起来,快速的理解。
边界扫描链与TAP控制器
  前面说的是JTAG的接口,而其内部则相对也更为复杂些。它的内部有一个 TAP控制器,用于控制内部的JTAG电路和扫描链。
  按自己阅读的相关的理解,所谓的边界扫描技术就是在电路的IO口的旁边增加了一些测试点,用于电路的测试。可以想像以下,假如我们要测试电路是否工作正常,我们 通过在电路板上放置若干的测试点,然后用一些夹具或飞线连接到测试仪器上。但这样就很费时费力了,所以才有了厂商将这些测试点做到芯片内部的做法。不过,目前我所用的JTAG通常不是用来测试电路的正常性的,而是用来调试程序。但基本原理仍然是一样的,只不过这些测试已经不是针对MCU引脚了,而是针对MCU内部的一些硬件电路。下面的图比较形像的说明了那些测试点,图中白色的正方形代表了这些测试点,用专业术语来说是 边界扫描单元
  上图的右侧部分是边界扫描单元的放大图。 NI是CORE模块向扫描单元的输入;NO是扫描单元的输出,也是整个电路最终的输出。SI、SO则是该单元自己的输入输出。通过内部的电路逻辑,该边界扫描单元能实现以下功能:
  • 直接放行NI,即NI与NO直连。此时边界扫描单元像不存在一样,不影响原电路的工作;
  • 捕获NI信号。可以将NI的信号捕获,并传送至SO上;
  • 隔离NI,指定NO的输出。指定的数据可从SI加载,并传输至NO。
  这样, 该边界扫描单元就可以实现比较好的测试功能,既可以捕获电路的输出,同时也能施加一些的信号。不需要测试的时候也可关闭,不会影响电路功能
   当电路中有多个边界扫描单元时,通常将其串接起来,形成一种链关结构,称为边界扫描链

TAP控制器
  对于内部电路的边界扫描链,有一个专门的控制器对其进行管理。就是所谓的 TAP控制器。如下图所示, TAP控制器接收来自JTAG接口的TDI、TMS输入,对输入的JTAG时序流转换成相应的命令,控制内部的边界扫描链完成相应的测试过程
 
  TAP控制器的工作过程如下图所示,其包含了一个比较复杂的状态转换过程。关于各状态的详细说明,这里就不再作介绍了。虽然该图表示的比较复杂,但总结起来无非是以下几点:
  • TMS信号用于决定状态的切换:TMS=0或TMS=1,当TCK的上升沿到达时,TAP控制器的状态将会切换到下一状态或者继续保留为原状态;
  • 一共包含了16种状态,但归纳起来实现的操作主要有四种:复位TAP控制器、Run-Test、SCAN-DR、SCAN-IR;
  • 对于每个扫描DR/IR的过程,主要包含三步:捕获xR、将数据移入到扫描链中、更新xR;
  • 通过连续发送至少6个1,即可复位TAP控制器到test-logic-reset状态。
  

  上图主要的四种操作是一系列的状态转换过程,其功能详细说明如下
  • 复位TAP控制器操作:从任意状态切换至Test Logic Reset状态的过程;
  • Run Test/Idle:处于Run Test/Idle的操作过程?
  • SCAN-DR:Select DR-Scan->Capture DR->Shift-DR->Exit 1-DR->Update-DR的过程,用于将数据从扫描链中移入移出;
  • SCAN-IR:Select IR-Scan->Capture IR->Shift-IR->Exit 1-IR->Update-IR的过程,用于发送指令到TAP控制器;
  在实际调试时, 最开始先进行复位操作(RESET),而后通过SCAN-DR要求TAP控制器完成相应的命令,最后通过SCAN-DR来发送指令运行所需的数据或读取指令执行产生的数据
  通过这样发送一系列特定的命令和数据,就可以通过JTAG接口、TAP控制器来控制MCU的程序执行、读取MCU的寄存器、存储器等资源,实现我们要求的调试功能。
  • 12
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值