您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > ARMJTAG调试原理(1)
OPEN-JTAGARMJTAG调试原理OPEN-JTAG开发小组1前言这篇文章主要介绍ARMJTAG调试的基本原理。基本的内容包括了TAP(TESTACCESSPORT)和BOUNDARY-SCANARCHITECTURE的介绍,在此基础上,结合ARM7TDMI详细介绍了的JTAG调试原理。这篇文章主要是总结了前段时间的一些心得体会,希望对想了解ARMJTAG调试的网友们有所帮助。我个人对ARMJTAG的理解还不是很透彻,在文章中,难免会有偏失和不准确的地方,希望精通JTAG调试原理的大侠们不要拍砖,有什么问题提出来,我一定尽力纠正。同时也欢迎对ARMJTAG调试感兴趣的朋友们一起交流学习。2IEEEStandard1149.1-TestAccessPortandBoundary-ScanArchitecture既然是介绍JTAG调试,还是让我们从IEEE的JTAG调试标准开始吧。JTAG是JOINTTESTACTIONGROUP的简称。IEEE1149.1标准就是由JTAG这个组织昀初提出的,昀终由IEEE批准并且标准化的。所以,这个IEEE1149.1这个标准一般也俗称JTAG调试标准。接下来的这一部分,主要简单的介绍了TAP(TESTACCESSPORT)和BOUNDARY-SCANARCHITECTURE的基本构架。虽然不是很全面,但对了解JTAG的基本原理来说,应该是差不离了。如果希望更全面深入的了解JTAG的工作原理,可以参考IEEE1149.1标准。2-1边界扫描在JTAG调试当中,边界扫描(Boundary-Scan)是一个很重要的概念。边界扫描技术的基本思想是在靠近芯片的输入输出管脚上增加一个移位寄存器单元。因为这些移位寄存器单元都分布在芯片的边界上(周围),所以被称为边界扫描寄存器(Boundary-ScanRegisterCell)。当芯片处于调试状态的时候,这些边界扫描寄存器可以将芯片和外围的输入输出隔离开来。通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。对于芯片的输入管脚,可以通过与之相连的边界扫描寄存器单元把信号(数据)加载倒该管脚中去;对于芯片的输出管脚,也可以通过与之相连的边界扫描寄存器“捕获”(CAPTURE)该管脚上的输出信号。在正常的运行状态下,这些边界扫描寄存器对芯片来说是透明的,所以正常的运行不会受到任何影响。这样,边界扫描寄存器提供了一个便捷的方式用以观测和控制所需要调试的芯片。另外,芯片输入输出管脚上的边界扫描(移位)寄存器单元可以相互连接起来,在芯片的周围形成一个边界扫描链(Boundary-ScanChain)。一般的芯片都会提供几条独立的边界扫描链,用来实现完整的测试功能。边界扫描链可以串行的输入和输出,通过相应的时钟信号和控制信号,就可以方便的观察和控制处在调试状态下的芯片。利用边界扫描链可以实现对芯片的输入输出进行观察和控制。下一个问题是:如何来管理和使用这些边界扫描链?对边界扫描链的控制主要是通过TAP(TestAccessPort)Controller来完成的。在下一个小节,我们一起来看看TAP是如何工作的。2-2TAP(TESTACCESSPORT)在上一节,我们已经简单介绍了边界扫描链,而且也了解了一般的芯片都会提供几条边界扫描链,用来实现完整的测试功能。下面,我将逐步介绍如何实现扫描链的控制和访问。TWENTYONETWENTYONECN@HOTMAIL.COMHTTP://TWENTYONE.BLOGCHINA.COM1OPEN-JTAG在IEEE1149.1标准里面,寄存器被分为两大类:数据寄存器(DR-DataRegister)和指令寄存器(IR-InstructionRegister)。边界扫描链属于数据寄存器中很重要的一种。边界扫描链用来实现对芯片的输入输出的观察和控制。而指令寄存器用来实现对数据寄存器的控制,例如:在芯片提供的所有边界扫描链中,选择一条指定的边界扫描链作为当前的目标扫描链,并作为访问对象。下面,让我们从TAP(TestAccessPort)开始。TAP是一个通用的端口,通过TAP可以访问芯片提供的所有数据寄存器(DR)和指令寄存器(IR)。对整个TAP的控制是通过TAPController来完成的。TAP总共包括5个信号接口TCK、TMS、TDI、TDO和TRST:其中4个是输入信号接口和另外1个是输出信号接口。一般,我们见到的开发板上都有一个JTAG接口,该JTAG接口的主要信号接口就是这5个。下面,我先分别介绍这个5个接口信号及其作用。TestClockInput(TCK)TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。TCK在IEEE1149.1标准里是强制要求的。TestModeSelectionInput(TMS)TMS信号用来控制TAP状态机的转换。通过TMS信号,可以控制TAP在不同的状态间相互转换。TMS信号在TCK的上升沿有效。TMS在IEEE1149.1标准里是强制要求的。TestDataInput(TDI)TDI是数据输入的接口。所有要输入到特定寄存器的数据都是通过TDI接口一位一位串行输入的(由TCK驱动)。TDI在IEEE1149.1标准里是强制要求的。TestDataOutput(TDO)TDO是数据输出的接口。所有要从特定的寄存器中输出的数据都是通过TDO接口一位一位串行输出的(由TCK驱动)。TDO在IEEE1149.1标准里是强制要求的。TestResetInput(TRST)TRST可以用来对TAPController进行复位(初始化)。不过这个信号接口在IEEE1149.1标准里是可选的,并不是强制要求的。因为通过TMS也可以对TAPController进行复位(初始化)。事实上,通过TAP接口,对数据寄存器(DR)进行访问的一般过程是:通过指令寄存器(IR),选定一个需要访问的数据寄存器;把选定的数据寄存器连接到TDI和TDO之间;由TCK驱动,通过TDI,把需要的数据输入到选定的数据寄存器当中去;同时把选定的数据寄存器中的数据通过TDO读出来。接下来,让我们一起来了解一下TAP的状态机。TAP的状态机如图1所示,总共有16个状态。在图中,每个六边形表示一个状态,六边形中标有该状态的名称和标识代码。图中的箭头表示了TAPController内部所有可能的状态转换流程。状态的转换是由TMS控制的,所以在每个箭头上有标有tms=0或者tms=1。在TCK的驱动下,从当前状态到下一个状态的转换是由TMS信号决定。假设TAPController的当前状态为Select-DR-Scan,在TCK的驱动下,如果TMS=0,TAPController进入Capture-DR状态;如果TMS=1,TAPController进入Select-IR-Scan状态。TWENTYONETWENTYONECN@HOTMAIL.COMHTTP://TWENTYONE.BLOGCHINA.COM2OPEN-JTAG图1.TAPControllerStateTransitions这个状态机看似很复杂,其实理解以后会发现这个状态机其实很直接、很简单。观察图1,我们可以发现,除了Test-LogicReset和Test-Run/Idle状态外,其他的状态有些类似。例如Select-DR-Scan和Select-IR-Scan对应,Capture-DR和Capture-IR对应,Shift-DR和Shift-IR对应,等等。在这些对应的状态中,DR表示DataRegister,IR表示InstructionRegister。记得我们前面说过吗,寄存器分为两大类,数据寄存器和指令寄存器。其实标识有DR的这些状态是用来访问数据寄存器的,而标识有IR的这些状态是用来访问指令寄存器的。在详细描述整个状态机中的每一个状态之前,首先让我们来想一想:要通过边界扫描链来观察和控制芯片的输入和输出,需要做些什么?如果需要捕获芯片某个管脚上的输出,首先需要把该管脚上的输出装载到边界扫描链的寄存器单元里去,然后通过TDO输出,这样我们就可以从TDO上得到相应管脚上的输出信号。如果要在芯片的某个管脚上加载一个特定的信号,则首先需要通过TDI把期望的信号移位到与相应管脚相连的边界扫描链的寄存器单元里去,然后把该寄存器单元的值加载到相应的芯片管脚。下面,让我们一起来看看每个状态具体表示什么意思?完成什么功能?Test-LogicReset系统上电后,TAPController自动进入该状态。在该状态下,测试部分的逻辑电路全部被TWENTYONETWENTYONECN@HOTMAIL.COMHTTP://TWENTYONE.BLOGCHINA.COM3OPEN-JTAG禁用,以保证芯片核心逻辑电路的正常工作。通过TRST信号也可以对测试逻辑电路进行复位,使得TAPController进入Test-LogicReset状态。前面我们说过TRST是可选的一个信号接口,这是因为在TMS上连续加5个TCK脉冲宽度的“1”信号也可以对测试逻辑电路进行复位,使得TAPController进入Test-LogicReset状态。所以,在不提供TRST信号的情况下,也不会产生影响。在该状态下,如果TMS一直保持为“1”,TAPController将保持在Test-LogicReset状态下;如果TMS由“1”变为“0”(在TCK的上升沿触发),将使TAPController进入Run-Test/Idle状态。Run-Test/Idle这个是TAPController在不同操作间的一个中间状态。这个状态下的动作取决于当前指令寄存器中的指令。有些指令会在该状态下执行一定的操作,而有些指令在该状态下不需要执行任何操作。在该状态下,如果TMS一直保持为“0”,TAPController将一直保持在Run-Test/Idle状态下;如果TMS由“0”变为“1”(在TCK的上升沿触发),将使TAPController进入Select-DR-Scan状态。Select-DR-Scan这是一个临时的中间状态。如果TMS为“0”(在TCK的上升沿触发),TAPController进入Capture-DR状态,后续的系列动作都将以数据寄存器作为操作对象;如果TMS为“1”(在TCK的上升沿触发),TAPController进入Select-IR-Scan状态。Capture-DR当TAPController在这个状态中,在TCK的上升沿,芯片输出管脚上的信号将被“捕获”到与之对应的数据寄存器的各个单元中去。如果TMS为“0”(在TCK的上升沿触发),TAPController进入Shift-DR状态;如果TMS为“1”(在TCK的上升沿触发),TAPController进入Exit1-DR状态。Shift-DR在这个状态中,由TCK驱动,每一个时钟周期,被连接在TDI和TDO之间的数据寄存器将从TDI接收一位数据,同时通过TDO输出一位数据。如果TMS为“0”(在TCK的上升沿触发),TAPController保持在Shift-DR状态;如果TMS为“1”(在TCK的上升沿触发),TAPController进入到Exit1-DR状态。假设当前的数据寄存器的长度为4。如果TMS保持为0,那在4个TCK时钟周期后,该数据寄存器中原来的4位数据(一般是在Capture-DR状态中捕获的数据)将从TDO输出来;同时该数据寄存器中的每个寄存器单元中将分别获得从TDI输入的4位新数据。Update-DR在Update-DR状态下,由TCK上升沿驱动,数据寄存器当中的数据将被加载到相应的芯片管脚上去,用以驱动芯片。在该状态下,如果TMS为“0”,TAPController将回到Run-Test/Idle状态;如果TMS为“1”,TAPController将进入Select-DR-Scan状态。Select-IR-Sca
本文标题:ARMJTAG调试原理(1)
链接地址:https://www.777doc.com/doc-23625 .html