JTAG调试原理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运行有ARM公司或是第三方提供的 调试软件的PC机。如:ARM公司提供的 ADS、LINUX下的arm-elf-gdb等。通过这 些调试软件,可以发送高级调试命令,如: 设置/取消断点,读写MEMORY,单步跟 踪,全速运行等。
(2)、协议转换器(Protocol converter)
负责将Debug主控端发出的高级ARM 调试命令转换为底层的ARM JTAG调试命 令。 Debug主控端和协议转换器间的介质 可以有很多种,如:Earthnet、USB,串口, 并口等。 Debug主控端和协议转换器间的 通信协议可以是ARM公司的ANGEL标准,
◆Scan Chain 2 38个扫描单元,通过控制EmbeddedICE宏 单元,实现对ARM进行指令的断点、观察 点的控制。
其实还有个Scan Chain 3,ARM7TDMI可 以访问外部的边界扫描链。只不过很少用, 在此不做介绍。想了解可以看ARM7TDMI 手册。
一个典型的JTAG链:
测试模式选择,通过该信号控制 JTAG状态机的状态。TMS在TCK的上升 沿有效。标准强制要求
◆TDI(Test Data Input)
数据输入口。所有要输入到特定寄存器 的数据都是通过TDI口一位一位串行输入的 (TCK驱动)。标准里强制要求
◆TDO(Test Data Output)
数据输出口。所有要从特定的寄存器中 输出的数据都是通过TDO口串行的一位一 位输出的(TCK驱动)。标准里强制要求
用INTEST 指令实现该操作,指令写入 与SCAN_N指令的过程类似
3)、写Debug Control Register 假设要将Debug Control Register的6位全
部置“1”,按照扫描链2的格式,需要写入到 扫描链2第序列应该为:
1,00000,0000,0000,0000,0000,0000,0000,0011,1 111
和TDO之间的扫描链选择寄存器,通过将2 写入到扫描链选择寄存器当中去,以将扫 描链2连接到TDI和TDO之间。将2写入扫 描链选择寄存器的状态转换如下:
RUN-TEST/IDLE →SELECT-DR-SCAN
→CAPTURE-DR →SHIFT-DR → EXIT1-DR
→UPDATE-DR →RUN-TEST/IDLE 在SHIFT-DR状态下,将数值2通过TDI写 到扫描链选择寄存器当中去。 2)、将Scan Chain 2置为内测试模式
JTAG调试原理
目录
一、JTAG基本知识 1.1、什么是JTAG 1.2 、 JTAG的作用 1.3、 JTAG调试结构
二、 JTAG的工作原理 2.1、两个重要概念:边界扫描和TAP 2.2、JTAG的状态机 2.3、 ARM7TDMI内核结构 2.4、 JTAG扫描链结构及工作过程 2.5、 EmbeddedICE-RT Logic的结构 2.6、 EmbeddedICE的断点/观察点设置
三、 JTAG常用指令
一、JTAG基本知识
1.1、 什么是JTAG JTAG是Joint Test Action Group(联合测
试行动组)的缩写,是IEEE1149.1标准。
1.2 、 JTAG的作用 使得IC芯片固定在PCB版上,只通过边
界扫描便可以被测试。
1.3、 JTAG调试结构
(1)、DEBUG主控制器:
2.6、EmbeddedICE的断点/观察点设置 EmbeddedICE有两个WtchPoint单元。
下面介绍一下WatchPoint寄存器的使用:
EmbeddedICE的一个主要作用是可以在 ARM程序中设置软件或硬件断点。在 EmbeddedICE中,集成了一个比较器,负责 把ARM处理器取指的地址A[31:0],数据
◆TRST(Test Reset Input)
JTAG复位信号。标准里是可选的
2.2、JTAG的状态机
TAP共有16个状态机,如下图所示: 每一个状态都有其相应的功能。箭头表示 了所有可能的状态转换流程。状态的转换 是由TMS控制的。
2.3、ARM7TDMI内核结构
ARM7TDMI处理器结构框图:
‘1’ 表 示 写 操 作 , ‘ 00000 ’ 标 识 的 是 Debug Control Register的地址,中间32位是 要写入到Debug Control Register的数据。因 Debug Control Register长度为6,所以只有低 6位的数据序列‘111111’有效。
EmbeddedICE的结构如下:
EmbeddedICE的长度是38位,包括: ◆ 32位数据 ◆ 5位地址,访问EmbeddedICE中的寄存器 ◆ 1个读写控制位
EmbeddedICE的寄存器主要包括Debug状态 和控制寄存器,Debug通信寄存器和断点设 置相关的寄存器,如下图所示:
EmbeddedICE的寄存器
① 、输入管脚:通过与之相连的边界 扫描寄存器把信号(数据)加载到该管脚 中去。
②、输出管脚:通过与之相连的边界 扫描 寄存器“捕获”该管脚上的输出信号。
注意:
芯片输入输出管脚上的边界扫描寄存器 单元可以相互连接起来,在芯片周围形成 一个边界扫描链。该链可以实现串行的输 入输出,通过相应的时钟信号和控制信号, 可方便的观察和控制在调试状态下的芯片。
将上面长度为38位的序列写入到扫描链 2中,TAP状态转换过程如下:
RUN-TEST/IDLE→ SELECT-DR-SCAN
→CAPTURE-DR →SHIFT-DR →EXIT1-DR
→UPDATE-DR →RUN-TEST/IDLE 在SHIFT-DR状态下,通过38个TCK时
钟驱动,就可以将上面的序列串行输入到 扫描练2当中去。在回到RUN-TEST/IDLE 状态后,Debug Control Register的值就会 被改写为111111。
ARM7TDMI处理器包括三大部分: ◆ARM CPU Main Processor Logic
包括了对调试的硬件支持 ◆Embedded ICE-RT Logic
包括一组寄存器和比较器,用来产生调试 异常,设置断点和观察点。 ◆TAP Controller 通过JTAG接口来控制和操作扫描链
ARM7TDMI还提供了3个附加的信号: DBGRQ : 调试请求,通过把DBGREQ置 “1”,可以迫使ARM7TDMI进入调试状态
DBGRQ:用来标识DBGRQ信号的当前状态
IFEN:用来标识系统的中断控制状态:启用 还是禁用
cgenL:用来判断当前对调试器在调试状态下 对内存的访问是否完成
TBIT:该位用来判断ARM7TDMI是从ARM 状态还是THUMB状态进入到调试状 态的
Abort Status Register 格式:
ENABLE: 如果该位置0的话,意味着断点 触发条件永远不成立,也就是把全部断点 都给disable掉了
RANGE: 暂时不会用
CHAIN: 暂时不会用
EXTERN: 外部到EmbeddedICE-RT的输 入,通过该输入,可以使得断点的触发依 赖于一定的外部条件
nTRANS: 用来判断是在用户态下还是非用 户态下,用户态下:nTRANS = 0,否则 nTRANS = 1
Monitor Mode Enable:用来控制是否进入 Monitor模式
EmbeddedICE-RT Disable:用来控制整个 EmbeddedICE-RT,是启用还是禁用
Debug Status Register 格式:
DBGACK:用来标识当前系统是否处于调试 状态。‘1’,表示进入;‘0’,表示未进入。
也可以是第三方自定义的标准。典型的协 议转换器有:ARM公司的Multi-ICE,HJTAG,JLink等。
H-JTAG运行界面
J-Link的运行界面
(3)、调试目标机
系统的调试对象。典型的ARM7TDMI 内核的调试结构:
二、JTAG的工作原理
2.1、两个重要概念:边界扫描和TAP (1)边界扫描(Boundary-Scan):
D[31:0]以及一些控制信号与EmbeddedICE 中WatchPoint寄存器中设置的数值相比较 (具体说应该是进行与或运算),比较结果 用来确定输出一个ARM断点(BreakPoint) 信号。具体运算关系如下公式所描述:
{Av[31:0],Cv[4:0]} XOR {A[31:0],C[4:0]} OR {Am[31:0],Cm[4:0]} == 0xFFFFFFFF
该寄存器的长度为1,来判断一个异常的 产生的原因:断点触发?观察点触发?还是 一个真的异常?
实例1:用Scan Chain 2 设置Debug Control Register
1)、 选择扫描链2,将其连接到TDI,TDO 之 间。具体过程如下:
通过TAP将SCAN_N指令写入到指令寄存器 当中去, TAP状态转换如下:RUNTEST/IDLE→SELECT-DR-SCAN→ SELECT-IRSCAN → CAPTURE-IR → SHIFT-IR → EXIT1-IR → UPDATE-IR → RUN-TEST/IDLE,在SHIFTIR状态下,将SCAN_N通过TDI写到指令寄存器 中去;接下来,访问被SCAN_N指令连接到TDI
DBGACK :调试确认,通过DBGACK,可 以判断当前ARM7TDMI是否在调试状态
BREAKPT :断点信号,这个信号是输入到 ARM7TDMI处理器内核的
2.4、JTAG扫描链结构及工作过程
ARM7TDMI的框图提供了3条扫描链: ◆Scan Chain 0
113个扫描单元,包括ARM所有的I/O,地 址/数据总线和输入/输出控制信号。此链很 复杂,不易控制,但包含信息丰富,可通 过它得到ARM7TDMI内核的所有信息。 ◆Scan Chain 1 33个扫描单元,包括数据总线和一个断点 控制信号。
当上述表达式值为真时,断点/观察点信 号有效,ARM内核进入Debug模式。
ARM中断点和观察点的设置 首先介绍一下与之设置密切相关的WP
Control Value/Mask Register。 WP Control Value/Mask Register格式:
WP Control Value/Mask Register格式含义:
EmbeddedICE寄存器格式及含义 Debug Control Register 格式:
DBGACK:用来控制DBGACK信号的值 DBGRQ:是调试请求信号,通过将该信号
置“1”,可以强制ARM7TDMI暂停当前的 指令,进入调试状态 INTDIS:用来控制中断 SBZ/RAZ:任何时候都必须被置“0”
nOPC: 检测当前的周期是取指令还是进行数 据访问。nOPC=0,表示当前周期进行取指。 nOPC=1,表示当前周期进行普通数据的访 问。(该位用的较多)
(2)、TAP(Test Access Port)
TAP是一个通用的端口,利用它可以 访问芯片提供的所有DR和IR。对整个TAP 的控制是通过TAP Controller来完成的。
TAP包括5个信号接口:
◆TCK(Test Clock Input)
JTAG时钟信号位。标准强制要求
◆TMS(Test Mode Select)
基本思想:在靠近芯片输入/输出管脚上 增加一个移位寄存器单元(边界扫描寄存 器)。
正常wk.baidu.com态下,边界扫描寄存器对芯片 来说是透明的,所以正常的运行不会受到 任何的影响。
调试状态下,边界扫描寄存器将芯片 和外的输入输出隔离开,通过这些边界扫 描寄存器可以实现对芯片输入输出信号的 控制。具体控制过程如下:
JTAG扫描链的工作过程
2.5、EmbeddedICE-RT Logic的结构
通过对EmbeddedICE控制,以及通过对 EmbeddedICE中寄存器的读取,可以获得ARM 内核的状态,为程序设置断点观察点以及读取 Debug通信通道(DCC)。
这里的断点用来标识某个地址上的一条指 令,而观察点用来观察某个地址上的数据变化, 所以这二者是有区别的。DCC用来完成主调试 器和目标机间的信息发送。
(2)、协议转换器(Protocol converter)
负责将Debug主控端发出的高级ARM 调试命令转换为底层的ARM JTAG调试命 令。 Debug主控端和协议转换器间的介质 可以有很多种,如:Earthnet、USB,串口, 并口等。 Debug主控端和协议转换器间的 通信协议可以是ARM公司的ANGEL标准,
◆Scan Chain 2 38个扫描单元,通过控制EmbeddedICE宏 单元,实现对ARM进行指令的断点、观察 点的控制。
其实还有个Scan Chain 3,ARM7TDMI可 以访问外部的边界扫描链。只不过很少用, 在此不做介绍。想了解可以看ARM7TDMI 手册。
一个典型的JTAG链:
测试模式选择,通过该信号控制 JTAG状态机的状态。TMS在TCK的上升 沿有效。标准强制要求
◆TDI(Test Data Input)
数据输入口。所有要输入到特定寄存器 的数据都是通过TDI口一位一位串行输入的 (TCK驱动)。标准里强制要求
◆TDO(Test Data Output)
数据输出口。所有要从特定的寄存器中 输出的数据都是通过TDO口串行的一位一 位输出的(TCK驱动)。标准里强制要求
用INTEST 指令实现该操作,指令写入 与SCAN_N指令的过程类似
3)、写Debug Control Register 假设要将Debug Control Register的6位全
部置“1”,按照扫描链2的格式,需要写入到 扫描链2第序列应该为:
1,00000,0000,0000,0000,0000,0000,0000,0011,1 111
和TDO之间的扫描链选择寄存器,通过将2 写入到扫描链选择寄存器当中去,以将扫 描链2连接到TDI和TDO之间。将2写入扫 描链选择寄存器的状态转换如下:
RUN-TEST/IDLE →SELECT-DR-SCAN
→CAPTURE-DR →SHIFT-DR → EXIT1-DR
→UPDATE-DR →RUN-TEST/IDLE 在SHIFT-DR状态下,将数值2通过TDI写 到扫描链选择寄存器当中去。 2)、将Scan Chain 2置为内测试模式
JTAG调试原理
目录
一、JTAG基本知识 1.1、什么是JTAG 1.2 、 JTAG的作用 1.3、 JTAG调试结构
二、 JTAG的工作原理 2.1、两个重要概念:边界扫描和TAP 2.2、JTAG的状态机 2.3、 ARM7TDMI内核结构 2.4、 JTAG扫描链结构及工作过程 2.5、 EmbeddedICE-RT Logic的结构 2.6、 EmbeddedICE的断点/观察点设置
三、 JTAG常用指令
一、JTAG基本知识
1.1、 什么是JTAG JTAG是Joint Test Action Group(联合测
试行动组)的缩写,是IEEE1149.1标准。
1.2 、 JTAG的作用 使得IC芯片固定在PCB版上,只通过边
界扫描便可以被测试。
1.3、 JTAG调试结构
(1)、DEBUG主控制器:
2.6、EmbeddedICE的断点/观察点设置 EmbeddedICE有两个WtchPoint单元。
下面介绍一下WatchPoint寄存器的使用:
EmbeddedICE的一个主要作用是可以在 ARM程序中设置软件或硬件断点。在 EmbeddedICE中,集成了一个比较器,负责 把ARM处理器取指的地址A[31:0],数据
◆TRST(Test Reset Input)
JTAG复位信号。标准里是可选的
2.2、JTAG的状态机
TAP共有16个状态机,如下图所示: 每一个状态都有其相应的功能。箭头表示 了所有可能的状态转换流程。状态的转换 是由TMS控制的。
2.3、ARM7TDMI内核结构
ARM7TDMI处理器结构框图:
‘1’ 表 示 写 操 作 , ‘ 00000 ’ 标 识 的 是 Debug Control Register的地址,中间32位是 要写入到Debug Control Register的数据。因 Debug Control Register长度为6,所以只有低 6位的数据序列‘111111’有效。
EmbeddedICE的结构如下:
EmbeddedICE的长度是38位,包括: ◆ 32位数据 ◆ 5位地址,访问EmbeddedICE中的寄存器 ◆ 1个读写控制位
EmbeddedICE的寄存器主要包括Debug状态 和控制寄存器,Debug通信寄存器和断点设 置相关的寄存器,如下图所示:
EmbeddedICE的寄存器
① 、输入管脚:通过与之相连的边界 扫描寄存器把信号(数据)加载到该管脚 中去。
②、输出管脚:通过与之相连的边界 扫描 寄存器“捕获”该管脚上的输出信号。
注意:
芯片输入输出管脚上的边界扫描寄存器 单元可以相互连接起来,在芯片周围形成 一个边界扫描链。该链可以实现串行的输 入输出,通过相应的时钟信号和控制信号, 可方便的观察和控制在调试状态下的芯片。
将上面长度为38位的序列写入到扫描链 2中,TAP状态转换过程如下:
RUN-TEST/IDLE→ SELECT-DR-SCAN
→CAPTURE-DR →SHIFT-DR →EXIT1-DR
→UPDATE-DR →RUN-TEST/IDLE 在SHIFT-DR状态下,通过38个TCK时
钟驱动,就可以将上面的序列串行输入到 扫描练2当中去。在回到RUN-TEST/IDLE 状态后,Debug Control Register的值就会 被改写为111111。
ARM7TDMI处理器包括三大部分: ◆ARM CPU Main Processor Logic
包括了对调试的硬件支持 ◆Embedded ICE-RT Logic
包括一组寄存器和比较器,用来产生调试 异常,设置断点和观察点。 ◆TAP Controller 通过JTAG接口来控制和操作扫描链
ARM7TDMI还提供了3个附加的信号: DBGRQ : 调试请求,通过把DBGREQ置 “1”,可以迫使ARM7TDMI进入调试状态
DBGRQ:用来标识DBGRQ信号的当前状态
IFEN:用来标识系统的中断控制状态:启用 还是禁用
cgenL:用来判断当前对调试器在调试状态下 对内存的访问是否完成
TBIT:该位用来判断ARM7TDMI是从ARM 状态还是THUMB状态进入到调试状 态的
Abort Status Register 格式:
ENABLE: 如果该位置0的话,意味着断点 触发条件永远不成立,也就是把全部断点 都给disable掉了
RANGE: 暂时不会用
CHAIN: 暂时不会用
EXTERN: 外部到EmbeddedICE-RT的输 入,通过该输入,可以使得断点的触发依 赖于一定的外部条件
nTRANS: 用来判断是在用户态下还是非用 户态下,用户态下:nTRANS = 0,否则 nTRANS = 1
Monitor Mode Enable:用来控制是否进入 Monitor模式
EmbeddedICE-RT Disable:用来控制整个 EmbeddedICE-RT,是启用还是禁用
Debug Status Register 格式:
DBGACK:用来标识当前系统是否处于调试 状态。‘1’,表示进入;‘0’,表示未进入。
也可以是第三方自定义的标准。典型的协 议转换器有:ARM公司的Multi-ICE,HJTAG,JLink等。
H-JTAG运行界面
J-Link的运行界面
(3)、调试目标机
系统的调试对象。典型的ARM7TDMI 内核的调试结构:
二、JTAG的工作原理
2.1、两个重要概念:边界扫描和TAP (1)边界扫描(Boundary-Scan):
D[31:0]以及一些控制信号与EmbeddedICE 中WatchPoint寄存器中设置的数值相比较 (具体说应该是进行与或运算),比较结果 用来确定输出一个ARM断点(BreakPoint) 信号。具体运算关系如下公式所描述:
{Av[31:0],Cv[4:0]} XOR {A[31:0],C[4:0]} OR {Am[31:0],Cm[4:0]} == 0xFFFFFFFF
该寄存器的长度为1,来判断一个异常的 产生的原因:断点触发?观察点触发?还是 一个真的异常?
实例1:用Scan Chain 2 设置Debug Control Register
1)、 选择扫描链2,将其连接到TDI,TDO 之 间。具体过程如下:
通过TAP将SCAN_N指令写入到指令寄存器 当中去, TAP状态转换如下:RUNTEST/IDLE→SELECT-DR-SCAN→ SELECT-IRSCAN → CAPTURE-IR → SHIFT-IR → EXIT1-IR → UPDATE-IR → RUN-TEST/IDLE,在SHIFTIR状态下,将SCAN_N通过TDI写到指令寄存器 中去;接下来,访问被SCAN_N指令连接到TDI
DBGACK :调试确认,通过DBGACK,可 以判断当前ARM7TDMI是否在调试状态
BREAKPT :断点信号,这个信号是输入到 ARM7TDMI处理器内核的
2.4、JTAG扫描链结构及工作过程
ARM7TDMI的框图提供了3条扫描链: ◆Scan Chain 0
113个扫描单元,包括ARM所有的I/O,地 址/数据总线和输入/输出控制信号。此链很 复杂,不易控制,但包含信息丰富,可通 过它得到ARM7TDMI内核的所有信息。 ◆Scan Chain 1 33个扫描单元,包括数据总线和一个断点 控制信号。
当上述表达式值为真时,断点/观察点信 号有效,ARM内核进入Debug模式。
ARM中断点和观察点的设置 首先介绍一下与之设置密切相关的WP
Control Value/Mask Register。 WP Control Value/Mask Register格式:
WP Control Value/Mask Register格式含义:
EmbeddedICE寄存器格式及含义 Debug Control Register 格式:
DBGACK:用来控制DBGACK信号的值 DBGRQ:是调试请求信号,通过将该信号
置“1”,可以强制ARM7TDMI暂停当前的 指令,进入调试状态 INTDIS:用来控制中断 SBZ/RAZ:任何时候都必须被置“0”
nOPC: 检测当前的周期是取指令还是进行数 据访问。nOPC=0,表示当前周期进行取指。 nOPC=1,表示当前周期进行普通数据的访 问。(该位用的较多)
(2)、TAP(Test Access Port)
TAP是一个通用的端口,利用它可以 访问芯片提供的所有DR和IR。对整个TAP 的控制是通过TAP Controller来完成的。
TAP包括5个信号接口:
◆TCK(Test Clock Input)
JTAG时钟信号位。标准强制要求
◆TMS(Test Mode Select)
基本思想:在靠近芯片输入/输出管脚上 增加一个移位寄存器单元(边界扫描寄存 器)。
正常wk.baidu.com态下,边界扫描寄存器对芯片 来说是透明的,所以正常的运行不会受到 任何的影响。
调试状态下,边界扫描寄存器将芯片 和外的输入输出隔离开,通过这些边界扫 描寄存器可以实现对芯片输入输出信号的 控制。具体控制过程如下:
JTAG扫描链的工作过程
2.5、EmbeddedICE-RT Logic的结构
通过对EmbeddedICE控制,以及通过对 EmbeddedICE中寄存器的读取,可以获得ARM 内核的状态,为程序设置断点观察点以及读取 Debug通信通道(DCC)。
这里的断点用来标识某个地址上的一条指 令,而观察点用来观察某个地址上的数据变化, 所以这二者是有区别的。DCC用来完成主调试 器和目标机间的信息发送。