嵌入式开发arm技术JTAG接口解读
jtag接口是什么

jtag 接口是什么
JTAG(JointTestAcTIonGroup,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,JTAG 技术是一种
嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP (TestAccessPort,测试访问口),通过专用的JTAG 测试工具对内部节点进行测试。
如今大多数比较复杂的器件都支持JTAG 协议,如ARM、DSP、FPGA 器件等。
标准的JTAG 接口是4 线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。
如今JTAG 接口的连接有两种标准,即14 针接口和20 针接口,其定义分别如下所示。
14 针JTAG 接口
1、13VCC 接电源。
Jtag的各种引脚定义

Jtag的各种引脚定义使用过ARM芯片的人肯定都听过一个仿真器————JLINK,为什么ARM芯片现在能够这么流行?其中恐怕就有一个原因就是很多的ARM芯片都支持使用Jlink进行调试和仿真。
所以你只要有一个Jlink,不管是ARM7、ARM9、ARM11还是最新的ARM Cortex 系统都能下载和调试了。
以前的嵌入式开发者,可能使用什么公司的芯片就得买一个对应芯片的下载和仿真器,这样如果你只使用一种芯片,可能还好,不过恐怕没有那种芯片能够一直引领市场。
Jlink使用的是一种叫做JTAG的协议,JTAG原本是用于芯片内部测试的,现在大多用于芯片的程序下载和调试仿真。
由于现在Jlink用的比较多,所以有些人可能把Jlink就等同于JTAG了,实际上,JTAG是一种协议,只要满足这种协议的就可以叫做JTAG,比如H—JTAG、OpenJTAG、OSJTAG等等。
正版的Jlink是卖的很贵的。
大概是1000到2000RMB吧。
不过,中国的山寨能力是很强的,而且你硬件卖给别人了,你也没办法控制别人说你不许拆开我的东西看里面的电路是怎么样的。
所以Jlink就被破解了,破解之后的Jlink很便宜,网上五六十块钱就能买到一个能用的Jlink。
除了商业版的Jlink和H—JTAG,网上还有一些电子爱好者,他们参照开源软件的模式,设计了开源硬件,比如arduino。
还有人制作了开源版本的JTAG仿真器——OpenJTAG。
而一些芯片的开发商不像那些软件厂商,会给软件做很多的限制,他们对于开源硬件还是比较开明的,所以他们也支持了一些开源硬件。
比如TI公司的MSP430 LaunchPad、ST公司的STM Discovery 等等板子。
还有飞思卡尔公司的USBDM和OSJTAG。
他们把这些硬件的原理图、PCB还有固件都放在了网络上供人自由下载和制作,你也可以根据他的资料进行改进。
这样能使大家对于他们家的芯片有更多的了解,所以,他们也乐于开源一些评估板。
ARM与JTAG

CUSIICARM与JTAGJTAG(Joint Test Action Group ,联合测试行动小组) 是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,JTAG 技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP (Test Access Port ,测试访问口),通过专用的JTAG 测试工具对内部节点进行测试。
目前大多数比较复杂的器件都支持JTAG 协议,如ARM 、DSP 、FPGA 器件等。
标准的JTAG 接口是4 线:TMS 、TCK 、TDI 、TDO ,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。
JTAG 测试允许多个器件通过JTAG 接口串联在一起,形成一个JTAG 链,能实现对各个器件分别测试。
JTAG 接口还常用于实现ISP (In-System Programmable 在系统编程)功能,如对FLASH器件进行编程等。
通过JTAG 接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。
目前JTAG 接口的连接有两种标准,即14 针接口和20 针接口,其定义分别如下所示。
14 针JTAG 接口定义引脚名称描述1 、13 VCC 接电源2 、4 、6 、8 、10 、14 GND 接地3 nTRST 测试系统复位信号5 TDI 测试数据串行输入7 TMS 测试模式选择9 TCK 测试时钟11TDO 测试数据串行输出12NC 未连接20 针JTAG 接口定义引脚名称描述1VTref 目标板参考电压,接电源2 VCC 接电源3 nTRST 测试系统复位信号4、6、8、10、12、14、16、18、20 GND 接地5 TDI 测试数据串行输入7 TMS 测试模式选择9 TCK 测试时钟11 RTCK 测试时钟返回信号13 TDO 测试数据串行输出15 nRESET 目标系统复位信号17 、19 NC 未连接下面以S3C4510B开发板为例说明JTAG接口:在保证电源电路、晶振电路和复位电路正常工作的前提下,可通过JTAG 接口调试S3C4510B,在系统上电前,首先应检测JTAG 接口的TMS 、TCK 、TDI 、TDO 信号是否已与S3C4510B 的对应引脚相连,其次应检测S3C4510B 的nEWAIT 引脚(Pin71 )是否已上拉,ExtMREQ 引脚(Pin108 )是否已下拉,对这两只引脚的处理应注意,作者遇到多起S3C4510B 不能正常工作或无法与JTAG 接口通信,均与没有正确处理这两只引脚有关。
jtag工作原理详解

jtag工作原理详解JTAG(Joint Test Action Group)是一种用于测试和调试集成电路的标准接口。
它可以通过一系列的信号线与目标芯片进行通信,实现对芯片内部的测试、调试和编程操作。
本文将详细介绍JTAG的工作原理。
一、JTAG接口结构JTAG接口由四个主要的信号线组成,分别是TCK(Test Clock)、TMS(Test Mode Select)、TDI(Test Data In)和TDO(Test Data Out)。
这些信号线通过一个JTAG端口与目标芯片相连。
1. TCK(Test Clock)信号线:用于提供时钟信号,控制JTAG通信的速度。
2. TMS(Test Mode Select)信号线:用于控制JTAG状态机的状态转换。
3. TDI(Test Data In)信号线:用于向目标芯片发送测试数据。
4. TDO(Test Data Out)信号线:用于从目标芯片接收测试数据。
二、JTAG状态机JTAG状态机是JTAG的核心部分,它定义了JTAG通信的各个状态和状态之间的转换关系。
JTAG状态机包括以下几个状态:1. Test-Logic-Reset(TLR)状态:在该状态下,目标芯片的逻辑电路被复位,JTAG接口初始化。
2. Run-Test/Idle(RTI)状态:在该状态下,目标芯片处于正常工作状态,等待进行测试和调试操作。
3. Select-DR-Scan(SDRS)状态:在该状态下,目标芯片的数据寄存器(Data Register)可被访问。
4. Capture-DR(CDR)状态:在该状态下,目标芯片的数据寄存器被捕获,准备进行数据传输。
5. Shift-DR(SDR)状态:在该状态下,数据从TDO线进入目标芯片的数据寄存器,或从目标芯片的数据寄存器输出到TDO线。
6. Exit1-DR(EDR1)状态:在该状态下,完成数据传输后,目标芯片的数据寄存器将退出Shift-DR状态。
jtag工作原理详解

jtag工作原理详解引言概述:JTAG(Joint Test Action Group)是一种用于测试和调试集成电路的标准接口。
它提供了一种非常有效的方法,可以在芯片制造过程中进行测试和调试,以确保芯片的质量和可靠性。
本文将详细介绍JTAG的工作原理,包括其基本原理、信号传输方式、链路结构、测试模式和调试功能。
一、基本原理:1.1 逻辑层次:JTAG是一种基于逻辑层次的测试方法。
它通过在芯片上添加一组专用的测试逻辑电路,实现对芯片内部逻辑电路的测试和调试。
这些测试逻辑电路包括扫描链(Scan Chain)、测试模式选择器(Test Mode Selector)和测试控制器(Test Controller)等。
1.2 扫描链:扫描链是JTAG的核心组成部分。
它由一系列可编程的触发器(Flip-flop)组成,用于存储和传输芯片内部的测试数据。
在测试过程中,测试数据可以通过扫描链逐个传递到芯片内部的逻辑电路中进行测试。
1.3 测试模式选择器和测试控制器:测试模式选择器用于选择测试模式,将芯片切换到测试模式。
测试控制器则用于控制测试过程的执行,包括扫描链的操作、测试模式的切换和结果的读取等。
二、信号传输方式:2.1 TDI和TDO信号:JTAG使用两个主要的信号线进行数据传输,即测试数据输入(TDI)和测试数据输出(TDO)。
TDI用于将测试数据输入到芯片中,而TDO则用于将测试结果输出到外部。
2.2 TCK信号:TCK是时钟信号,用于同步测试数据的传输。
它控制着扫描链中的触发器按照时序进行数据的移位和存储。
2.3 TMS信号:TMS是测试模式选择信号,用于控制测试模式的切换。
通过改变TMS信号的状态,可以将芯片从一种测试模式切换到另一种测试模式。
三、链路结构:3.1 JTAG链路:JTAG链路是由多个JTAG设备连接而成的链状结构。
每个JTAG设备都包含一个扫描链,可以通过TDO和TDI信号进行级联连接。
Jtag的各种引脚定义

使用过ARM芯片的人肯定都听过一个仿真器————JLINK,为什么ARM芯片现在能够这么流行?其中恐怕就有一个原因就是很多的ARM芯片都支持使用Jlink进行调试和仿真。
所以你只要有一个Jlink,不管是ARM7、ARM9、ARM11还是最新的ARM Cortex 系统都能下载和调试了。
以前的嵌入式开发者,可能使用什么公司的芯片就得买一个对应芯片的下载和仿真器,这样如果你只使用一种芯片,可能还好,不过恐怕没有那种芯片能够一直引领市场。
Jlink使用的是一种叫做JTAG的协议,JTAG原本是用于芯片内部测试的,现在大多用于芯片的程序下载和调试仿真。
由于现在Jlink用的比较多,所以有些人可能把Jlink就等同于JTAG了,实际上,JTAG是一种协议,只要满足这种协议的就可以叫做JTAG,比如H—JTAG、OpenJTAG、OSJTAG等等。
正版的Jlink是卖的很贵的。
大概是1000到2000RMB吧。
不过,中国的山寨能力是很强的,而且你硬件卖给别人了,你也没办法控制别人说你不许拆开我的东西看里面的电路是怎么样的。
所以Jlink就被破解了,破解之后的Jlink很便宜,网上五六十块钱就能买到一个能用的Jlink。
除了商业版的Jlink和H—JTAG,网上还有一些电子爱好者,他们参照开源软件的模式,设计了开源硬件,比如arduino。
还有人制作了开源版本的JTAG仿真器——OpenJTAG。
而一些芯片的开发商不像那些软件厂商,会给软件做很多的限制,他们对于开源硬件还是比较开明的,所以他们也支持了一些开源硬件。
比如TI公司的MSP430 LaunchPad、ST公司的STM Discovery 等等板子。
还有飞思卡尔公司的USBDM和OSJTAG。
他们把这些硬件的原理图、PCB还有固件都放在了网络上供人自由下载和制作,你也可以根据他的资料进行改进。
这样能使大家对于他们家的芯片有更多的了解,所以,他们也乐于开源一些评估板。
JTAG接口介绍

JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(Test Access Port,测试访问口),通过专用的JTAG测试工具对内部节点进行测试。
目前大多数比较复杂的器件都支持JTAG协议,如ARM、DSP、FPGA器件等。
标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。
JTAG接口还常用于实现ISP(In-System Programmable在系统编程)功能,如对FLASH器件进行编程等。
通过JTAG接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。
目前JTAG接口的连接有两种标准,即14针接口和20针接口,其定义分别如下所示。
14针JTAG接口定义:14针JTAG接口定义引脚名称描述1、13VCC接电源2、4、6、8、10、14GND接地3nTRST测试系统复位信号5TDI测试数据串行输入7TMS测试模式选择9TCK测试时钟11TDO测试数据串行输出12NC未连接20针JTAG接口定义引脚名称描述1VTref目标板参考电压,接电源2VCC接电源3nTRST测试系统复位信号4、6、8、10、12、14、16、18、20GND接地5TDI测试数据串行输入7TMS测试模式选择9TCK测试时钟11RTCK测试时钟返回信号13TDO测试数据串行输出15nRESET目标系统复位信号17、19NC未连接下面以S3C4510B开发板为例说明JTAG接口:在保证电源电路、晶振电路和复位电路正常工作的前提下,可通过JTAG接口调试S3C4510B,在系统上电前,首先应检测JTAG接口的TMS、TCK、TDI、TDO信号是否已与S3C4510B 的对应引脚相连,其次应检测S3C4510B的nEWAIT引脚(Pin71)是否已上拉,ExtMREQ 引脚(Pin108)是否已下拉,对这两只引脚的处理应注意,作者遇到多起S3C4510B不能正常工作或无法与JTAG接口通信,均与没有正确处理这两只引脚有关。
JTAG各类接口针脚定义及含义

JTAG各类接口针脚定义及含义JTAG有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下。
一、引脚定义Test Clock Input (TCK) -----强制要求1TCK在IEEE1149.1标准里是强制要求的。
TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。
Test Mode Selection Input (TMS) -----强制要求2TMS信号在TCK的上升沿有效。
TMS在IEEE1149.1标准里是强制要求的。
TMS信号用来控制TAP状态机的转换。
通过TMS信号,可以控制TAP在不同的状态间相互转换。
Test Data Input (TDI) -----强制要求3TDI在IEEE1149.1标准里是强制要求的。
TDI是数据输入的接口。
所有要输入到特定寄存器的数据都是通过TDI接口一位一位串行输入的(由TCK驱动)。
Test Data Output (TDO) -----强制要求4TDO在IEEE1149.1标准里是强制要求的。
TDO是数据输出的接口。
所有要从特定的寄存器中输出的数据都是通过TDO接口一位一位串行输出的(由TCK驱动)。
Test Reset Input (TRST) ----可选项1这个信号接口在IEEE 1149.1标准里是可选的,并不是强制要求的。
TRST可以用来对TAPController进行复位(初始化)。
因为通过TMS也可以对TAP Controll进行复位(初始化)。
所以有四线JTAG与五线JTAG之分。
(VTREF) -----强制要求5接口信号电平参考电压一般直接连接Vsupply。
这个可以用来确定ARM的JTAG接口使用的逻辑电平(比如3.3V还是5.0V?)Return Test Clock ( RTCK) ----可选项2可选项,由目标端反馈给仿真器的时钟信号,用来同步TCK信号的产生,不使用时直接接地。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通常所说的大致分两类,一类用于测试芯片的电气特性,检测芯片是否有问题;一类
用于Debug; 一般支持的CPU 内都包含了这两个模块。
一个含有Debug接口模块的CPU,只要时钟正常,就可以通过JTAG接口访问CPU 的内部寄存器和挂在CPU总线上的设备,女口FLASH ,RAM ,SOC(比如4510B ,44Box,
AT91M 系列)内置模块的寄存器,象UART,Timers ,GPIO 等等的寄存器。
上面说的只是JTAG 接口所具备的能力,要使用这些功能,还需要软件的配合,具体实现的功能则由具体的软件决定。
例如下载程序到RAM 功能。
了解SOC 的都知道,要使用外接的RAM ,需要参照SOCDataSheet 的寄存器说明,设置RAM 的基地址,总线宽度,访问速度等等。
有的SOC 则还需要Remap ,才能正常工作。
运行Firmware 时,这些设置由Firmware 的初始化程序完成。
但如果使用JTAG 接口,相关的寄存器可能还处在上电值,甚至时错误值,RAM 不能正常工作,所以下载必然要失败。
要正常使用,先要想办法设置RAM 。
在ADW 中,可以在Console 窗口通过Let 命令设置,在AXD
中可以在Console 窗口通过Set 命令设置。
面是一个设置AT91M40800 的命令序列,关闭中断,设置Remap ,适用于AXD(ADS 带的Debug)
setmem 0xfffff124,0xFFFFFFFF,32--- 关闭所有中断
0xffe00004,0x02002021,32--- 设置CS1
setmem 0xffe00008,0x0300253d,32---
setmem 0xffe0000C,0x0400253d,32---
setmem 0xffe00020,1,32---Remap
如果要在ADW(SDT 带的DEBUG)中使用,则要改为:CS0-CS3, 并进行
setmem 0xffe00000,0x0100253d,32--- CS0
设置CS2
设置CS3
let 0xfffff124=0xFFFFFFFF--- 关闭所有中断
设置CS0
let
0xffe00000=0x0100253d---
let
设置CS1
0xffe00004=0x02002021---
let
设置CS2
0xffe00008=0x0300253d---
let 0xffe0000C=0x0400253d-
设置CS3
--
let 0xffe00020=1---
Remap
为了方便使用,可以将上述命令保存为一个文件config.ini, 在Console 窗口输入
ob config.ini 即可执
行。
使用其他debug ,大体类似,只是命令和命令的格式不同。
设置RAM 时,设置的寄存器以及寄存器的值必须和要运行程序的设置一致。
一般
编译生成的目标文件是ELF 格式,或类似的格式,包含有目标码运行地址,运行地址在
Link时候确定。
Debug下载程序时根据ELF文件中的地址信息下载程序到指定的地址。
如果在把RAM 的基地址设置为0x10000000, 而在编译的时候指定Firmware 的开始地
址在0x02000000, 下载的时候,目标码将被下载到0x02000000 ,显然下载会失
败。
通过JTAG 下载程序前应关闭所有中断,这一点和Firmware 初始化时关闭中断的原因相同。
在使用JTAG 接口的时候,各中断的使能未知,尤其是Flash 里有可执行码的情况,可能会有一些中断被使能。
使用JTAG 下载完代码,要执行时,有可能因为未
完成初始化就产生了中断,导致程序异常。
所以,需要先关闭中断,一般通过设置SOC 的中断控制寄存器完成。
使用JTAG写Flash。
在理论上,通过JTAG可以访问CPU总线上的所有设备,所以应该可以写FLASH,但是FLASH写入方式和RAM大不相同,
需要特殊的命令,而且不同的FLASH 擦除,编程命令不同,而且块的大小,数量也不
同,很难提供这一项功能。
所以一般Debug 不提供写Flash 功能,或者仅支持少量几
种Flash 。
目前就我知道的,针对arm ,只有FlashPGM 这个软件提供写FLASH 功能,但使用也非常麻烦。
AXD ,ADW 都不提供写FLASH 功能。
我写Flash 的方法时是,自己写一个简单的程序,专门用于写目标板的FLASH ,利用JTAG 接口,下载到目标板,再把要烧写的目标码装成BIN 格式,也下到目标板( 地址和烧FLASH 的程序的地址不同) ,然后运行已经下载的烧FLASH 的程序。
使用这种方式,比起FlashPGM 的写Flash ,速度似乎要快一些。
关于简单JTAG 电缆。
目前有各种各样简单JTAG 电缆,其实只是一个电平转换电路,同时还起到保护作用。
JTAG 的逻辑则由运行在PC上的软件实现,所以在理论上,任何一个简单JTAG电
缆,都可以支持各种应用软件,如Debug 等。
我就曾使用同一个JTAG 电缆写Xilinx
CPLD,AXD/ADW 调试程序。
关键再于软件的支持,大多数软件都不提供设定功能,因而只能支持某种JTAG 电缆。
关于简单JTAG电缆的速度。
JTAG是串行接口,使用打印口的简单JTAG电缆,利
用的是打印口的输出带锁存的特点,使用软件通过I/O 产生JTAG 时序。
由JTAG 标准
决定,通过JTAG写/读一个字节要一系列的操作,根据我的分析,使用简单JTAG电缆,
利用打印口,通过JTAG输出一个字节到目标板,平均需要43个打印口I/O,在我机器
上(P4 1.7G),每秒大约可进行660K次I/O操作,所以下载速度大约在660K/43,约等
于15K Byte/S. 对于其他机器,I/O 速度大致相同,一般在600K~800K.
关于如何提高JTAG 下载速度。
很明显,使用简单JTAG 电缆无法提高速度。
要提高速度,大致有两种办法,
1 。
使用系统提供JTAG 接口,系统和微机之间通过USB/Ethernet 相连,这要求使用MCU 。
2。
使用CPLD/FPGA 提供JTAG接口,CPLD/FPGA和微机之间使用EPP接口(一
般微机打印口都支持EPP模式),EPP接口完成微机和CPLD/FPGA之间的数据传输,
CPLD/FPGA 完成JTAG 时序。
这两种方法本人都实现过。
第一个方法可以达到比较高的速度,实测超过了
200KByte/S(注意:是Byte ,不是Bit); 但是相对来说,硬件复杂,制造相对复杂。
第二种相对来说,下载速度要慢一些,最快时达到96KByte/S ,但电路简单,制造方便,
而且速度可以满足需要。
第二种方案还有一个缺点,由于进行被释
I/O 操作时,CPU 不会放,因此在下载程序时,微机CPU 显得很繁忙。
总的来说,本人认为,对于个人爱好者来说,第二种方法更可取。
技术资料出处:电子产品世界。