标题：JTAG接口
JTAG接口
1 JTAG(Joint Test Action Group；联合测试行动小组)是一种国际标准测试协议（IEEE 1149.1兼容），主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议，如DSP、FPGA器件等。标准的JTAG接口是4线：TMS、TCK、TDI、TDO，分别为模式选择、时钟、数据输入和数据输出线。 
JTAG最初是用来对芯片进行测试的，JTAG的基本原理是在器件内部定义一个TAP（Test Access Port；测试访问口）通过专用的JTAG测试工具对进行内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起，形成一个JTAG链，能实现对各个器件分别测试。现在，JTAG接口还常用于实现ISP（In-System Programmer，在系统编程），对FLASH等器件进行编程。 
JTAG编程方式是在线编程，传统生产流程中先对芯片进行预编程现再装到板上因此而改变，简化的流程为先固定器件到电路板上，再用JTAG编程，从而大大加快工程进度。JTAG接口可对PSD芯片内部的所有部件进行编程 。
具有JTAG口的芯片都有如下JTAG引脚定义： 
TCK——测试时钟输入； 
TDI——测试数据输入，数据通过TDI输入JTAG口； 
TDO——测试数据输出，数据通过TDO从JTAG口输出； 
TMS——测试模式选择，TMS用来设置JTAG口处于某种特定的测试模式。 
可选引脚TRST——测试复位，输入引脚，低电平有效。 
含有JTAG口的芯片种类较多，如CPU、DSP、CPLD等。 
JTAG内部有一个状态机，称为TAP控制器。TAP控制器的状态机通过TCK和TMS进行状态的改变，实现数据和指令的输入。 
2 JTAG芯片的边界扫描寄存器
JTAG标准定义了一个串行的移位寄存器。寄存器的每一个单元分配给IC芯片的相应引脚，每一个独立的单元称为BSC（Boundary-Scan Cell）边界扫描单元。这个串联的BSC在IC内部构成JTAG回路，所有的BSR（Boundary-Scan Register）边界扫描寄存器通过JTAG测试激活，平时这些引脚保持正常的IC功能。
3 JTAG在线写Flash的硬件电路设计和与PC的连接方式 
以含JTAG接口的StrongARM SA1110为例，Flash为Intel 28F128J32 16MB容量。SA1110的JTAG的TCK、TDI、TMS、TDO分别接PC并口的2、3、4、11线上，通过程序将对JTAG口的控制指令和目标代码从PC的并口写入JTAG的BSR中。在设计PCB时，必须将SA1110的数据线和地址线及控制线与Flash的地线、数据线和控制线相连。因SA1110的数据线、地址线及控制线的引脚上都有其相应BSC，只要用JTAG指令将数据、地址及控制信号送到其BSC中，就可通过BSC对应的引脚将信号送给Flash，实现对Flash的操作。JTAG的系统板设计和连线关系如图3所示。 
4 通过使用TAP状态机的指令实行对Flash的操作 
通过TCK、TMS的设置，可将JTAG设置为接收指令或数据状态。JTAG常用指令如下： 
SAMPLE/PRELOAD——用此指令采样BSC内容或将数据写入BSC单元； 
EXTEST——当执行此指令时，BSC的内容通过引脚送到其连接的相应芯片的引脚，我们就是通过这种指令实现在线写Flash的； 
BYPASS——此指令将一个一位寄存器置于BSC的移位回路中，即仅有一个一位寄存器处于TDI和TDO之间。 
在PCB电路设计好后，即可用程序先将对JTAG的控制指令，通过TDI送入JTAG控制器的指令寄存器中。再通过TDI将要写Flash的地址、数据及控制线信号入BSR中，并将数据锁存到BSC中，用EXTEST指令通过BSC将写入Flash。 
5 软件编程 
在线写Flash的程序用Turbo C编写。程序使用PC的并行口，将程序通过含有JTAG的芯片写入Flash芯片。程序先对PC的并口初始化，对JTAG口复位和测试，并读Flash，判断是否加锁。如加锁，必须先解锁，方可进行操作。写Flash之前，必须对其先擦除。将JTAG芯片设置在EXTEST模式，通过PC的并口，将目标文件通过JTAG写入Flash，并在烧写完成后进行校验。程序主流程如图4所示。 
通过JTAG的读芯片ID子程序如下： 
void id_command(void){ 
putp(1,0,IP); //Run-Test/Idle;使JTAG复位 
putp(1,0,IP); //Run-Test/Idle 
putp(1,0,IP); //Run-Test/Idle 
putp(1,0,IP); //Run-Test/Idle 
putp(1,1,IP); 
putp(1,1,IP); //选择指令寄存器
putp(1,0,IP); //捕获指令寄存器
putp(1,0,IP); /移位指令寄存器
putp(0,0,IP); //SA1110JTAG口指令长度5位，IDCODE为01100 
putp(1,0,IP); 
putp(1,0,IP); 
putp(0,0,IP); 
putp(0,0,IP); 
putp(0,1,IP); //退出指令寄存器
putp(1,1,IP); //更新指令寄存器，执行指令寄存器中的指令 
putp(1,0,IP)； //Run-Test/Idle 
putp(1,0,IP); //Run-Test/Idle 
putp(1,0,IP); //Run-Test/Idle 
putp(1,1,IP); 
putp(1,0,IP); 
if(check_id(SA1110ID)) 
error_out("failed to read device ID for the SA-1110"); 
putp(1,1,IP); //退出数据寄存器
putp(1,1,IP); //更新数据寄存器
putp(1,0,IP); //Run-Test/Idle,使JTAG复位 
putp(1,0,IP); //Run-Test/Idle 
putp(1,0,IP); //Run-Test/Idle 
} 
6 电路设计和编程中的注意事项 
①Flash芯片的WE、CE、OE等控制线必须与SA1110的BSR相连。只有这样，才能通过BSR控制Flash的相应引脚。 
②JTAG口与PC并口的连接线要尽量短，原则上不大于15cm。 
③Flash在擦写和编程时所需的工作电流较大，在选用系统的供电芯片时，必须加以考虑。 
④为提高对Flash的编程速度，尽量使TCK不低于6MHz，可编写烧写Flash程序时实现。
基本信息
JTAG(Joint Test Action Group)联合测试行动小组)是一种国际标准测试协议（IEEE 1149.1兼容），主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议，如DSP、FPGA器件等。标准的JTAG接口是4线：TMS、 TCK、TDI、TDO，分别为模式选择、时钟、数据输入和数据输出线。 
JTAG最初是用来对芯片进行测试的，基本原理是在器件内部定义一个TAP（Test Access Port?测试访问口）通过专用的JTAG测试工具对进行内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起，形成一个JTAG链，能实现对各个器件分别测试。现在，JTAG接口还常用于实现ISP（In-System Programmable?在线编程），对FLASH等器件进行编程。 
JTAG编程方式是在线编程，传统生产流程中先对芯片进行预编程实现再装到板上因此而改变，简化的流程为先固定器件到电路板上，再用JTAG编程，从而大大加快工程进度。JTAG接口可对PSD芯片内部的所有部件进行编程
JTAG的一些说明
通常所说的JTAG大致分两类，一类用于测试芯片的电气特性，检测芯片是否有问题；一类用于Debug；一般支持JTAG的CPU内都包含了这两个模块。 
一个含有JTAG Debug接口模块的CPU，只要时钟正常，就可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备，如FLASH，RAM，SOC（比如4510B，44Box，AT91M系列）内置模块的寄存器，象UART，Timers，GPIO等等的寄存器。 
上面说的只是JTAG接口所具备的能力，要使用这些功能，还需要软件的配合，具体实现的功能则由具体的软件决定。 
例如下载程序到RAM功能。了解SOC的都知道，要使用外接的RAM，需要参照SOC DataSheet的寄存器说明，设置RAM的基地址，总线宽度，访问速度等等。有的SOC则还需要Remap，才能正常工作。运行Firmware时，这些设置由Firmware的初始化程序完成。但如果使用JTAG接口，相关的寄存器可能还处在上电值，甚至是错误值，RAM不能正常工作，所以下载必然要失败。要正常使用，先要想办法设置RAM。在ADW中，可以在Console窗口通过Let 命令设置，在AXD中可以在Console窗口通过Set命令设置。
JTAG接口定义
JTAG(Joint Test Action Group ，联合测试行动小组 ) 是一种国际标准测试协议，主要用于芯片内部测试及对系统进行仿真、调试， JTAG 技术是一种嵌入式调试技术，它在芯片内部封装了专门的测试电路 TAP （ Test Access Port ，测试访问口），通过专用的 JTAG 测试工具对内部节点进行测试。
目前大多数比较复杂的器件都支持 JTAG 协议，如 ARM 、 DSP 、 FPGA 器件等。标准的 JTAG 接口是 4 线： TMS 、 TCK 、 TDI 、 TDO ，分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。 目前 JTAG 接口的连接有两种标准，即 14 针接口和 20 针接口，其定义分别如下所示。14针JTAG接口定义引脚名称描述1 、 13 　 VCC 接电源 
2 、 4 、 6 、 8 、 10 、 14 　 GND 接地 
3 　nTRST 　测试系统复位信号 
5 　TDI 　 测试数据串行输入 
7 　TMS 　测试模式选择 
9 　TCK 　测试时钟 
11　TDO 　 测试数据串行输出 
12　NC 　 未连接20针JTAG接口定义引脚名称描述1　VTref 　 目标板参考电压，接电源 
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 　未连接 

10针JTAG接口定义引脚名称描述