http://www.360doc.com/content/18/0322/16/496343_739325658.shtml
https://www.eefocus.com/ilove314/blog/11-09/231577_6834b.html
https://blog.csdn.net/beiguodexueCSDN/article/details/81331607
https://www.cnblogs.com/TaigaCon/archive/2012/12/20/2826941.html
https://blog.csdn.net/worf1234/article/details/7312184
http://blog.chinaunix.net/uid-26913704-id-3215246.html?_t=t
https://www.docin.com/p-1390698388.html

上图主要的四种操作是一系列的状态转换过程,其功能详细说明如下
复位TAP控制器操作:
从任意状态切换至Test Logic Reset状态的过程
上电为 Test Logic Reset状态 。
在Test Logic Reset状态下,测试部分的逻辑电路全部被禁用,以保证芯片核心逻辑电路的正常工作。
Run Test/Idle:处于Run Test/Idle的操作过程
Run Test/Idle状态下的动作取决于当前指令寄存器中的指令。有些指令会在该状态下执行一定的操作,而有些指令在该状态下不需要执行任何操作。
SCAN-DR:Select DR-Scan->Capture DR->Shift-DR->Exit 1-DR->Update-DR的过程,用于将数据从扫描链中移入移出;
上电为Test-Logic Reset状态,然后依次进入:Run-Test/Idle ---> Select-DR-Scan ---> Select-IR-Scan ---> Capture-IR ---> Shift-IR ---> Exit1-IR ---> Update-IR,最后回到Run-Test/Idle状态
SCAN-IR:Select IR-Scan->Capture IR->Shift-IR->Exit 1-IR->Update-IR的过程,用于发送指令到TAP控制器;
当前可以访问的数据寄存器由指令寄存器中的当前指令决定。要访问由刚才的指令选定的数据寄存器,需要以Run-Test/Idle为起点,依次进入 Select-DR-Scan ---> Capture-DR ---> Shift-DR ---> Exit1-DR ---> Update-DR,最后回到Run-Test/Idle状态。
在实际调试时,
最开始先进行复位操作(RESET),
而后通过SCAN-IR要求TAP控制器完成相应的命令,
最后通过SCAN-DR来发送指令运行所需的数据或读取指令执行产生的数据。
通过这样发送一系列特定的命令和数据,就可以通过JTAG接口、TAP控制器来控制MCU的程序执行、读取MCU的寄存器、存储器等资源,实现我们要求的调试功能。
扫描链一般有几个
一般有两个, 一个指令扫描链用来存储 指令寄存器
一个数据扫描链用来存储输入输出的数据(数据的来源由当前的指令寄存器决定)
TAP状态机中的状态(SELECT-DR-SCAN / SELECT-IR-SCAN)
用来在下一拍选择 哪一条 扫描链
TAP状态机中的状态(SHIFT-DR / SHIFT-IR)
状态机中 包括了 SHIFT-DR 的状态, 用来将 TDI中的数据更新到移位寄存器(被数据扫描链管理)的BIT中,同时将移位寄存器中的BIT输出到 TDO中
状态机中 包括了 SHIFT-IR 的状态, 用来将 TDI中的数据更新到移位寄存器(被指令扫描链管理)的BIT中,同时将移位寄存器中的BIT输出到 TDO中
具体来说,假设初始状态如下:
BIT0, BIT1, BIT2 都初始化为 0/1/2。 // 当然,这里肯定是 0或者1
TDI 输入数据为 a b c // 当然,这里肯定是 0或者1
在第1拍时(TCK上升沿):
左移并TDO输出 :
溢出了BIT2 , TDO输出 2
BIT2 为 1
BIT1 为 0
BIT0 闲置出来
TDI输入:TDI输入的a被移入到BIT0 // BIT0 输入 a
第1拍结束时
BIT2 为 1
BIT1 为 0
BIT0 为 a
在第2拍时(TCK上升沿):
左移并TDO输出 :
溢出了BIT2 , TDO输出 1
BIT2 为 0
BIT1 为 a
BIT0 闲置出来
TDI输入:TDI输入的b被移入到BIT0 // BIT0 输入 b
第2拍结束时
BIT2 为 0
BIT1 为 a
BIT0 为 b
在第3拍时(TCK上升沿):
左移并TDO输出 :
溢出了BIT2 , TDO输出 0
BIT2 为 a
BIT1 为 b
BIT0 闲置出来
TDI输入:TDI输入的c被移入到BIT0 // BIT0 输入 c
第2拍结束时
BIT2 为 a
BIT1 为 b
BIT0 为 c
在JTAG的Shift-DR模式下,每个移位寄存器在时钟的每个上升沿进行移位操作。
具体来说,当新的数据从TDI输入时,原来在第一个移位寄存器(BIT0)中的值会被移到下一个寄存器(例如BIT1),而新的TDI输入数据会进入BIT0。
因此,原来BIT0中的值并不是被销毁了,而是被移到了下一个寄存器。这就是移位寄存器的工作方式。
1万+

被折叠的 条评论
为什么被折叠?



