原帖地址:http://www.javashuo.com/article/p-tjtxpfzd-gn.htmlhtml
1.什么是JTAG:Joint Test Action Group测试
JTAG是一种IEEE标准用来解决板级问题,开发于上个世纪80年代。今天JTAG被用来烧录、debug、探查端口。固然,最原始的使用是边界测试。debug
边界测试:rest
举个例子你有两个芯片,这两个芯片之间链接了不少不少的线,怎么确保这些线之间的链接是OK的呢,用JTAG,它能够控制全部IC的引脚。这叫作芯片边界测试。htm
2.JTAG引脚:blog
JTAG发展到如今已经有脚了,一般四个脚:TDI,TDO,TMS,TCK,固然还有个复位脚TRST。对于芯片上的JTAG的脚其实是专用的。开发
TDI:测试数据输入,数据经过TDI输入JTAG口;get
TDO:测试数据输出,数据经过TDO从JTAG口输出;同步
TMS:测试模式选择,用来设置JTAG口处于某种特定的测试模式;it
TCK:测试时钟输入;
TRST:测试复位;
更多的用法:
CPU和FPGA制造商容许JTAG用来端口debug;FPGA厂商容许经过JTAG配置FPGA,使用JTAG信号通入FPGA核。
3.JTAG怎么工做:
PC控制JTAG:用JTAG电缆链接PC的打印端口或者USB或者网口。最简单的是链接打印端口。
TMS:在每一个含有JTAG的芯片内部,会有个JTAG TAP控制器。TAP控制器是一个有16个状态的状态机,而TMS就是这玩意的控制信号。当TMS把各个芯片都链接在一块儿的时候,全部的芯片的TAP状态跳转是一致的。下面是TAP控制器的示意图:
改变TMS的值,状态就会发生跳转。若是保持5个周期的高电平,就会跳回test-logic-rest,一般用来同步TAP控制器;
一般使用两个最重要的状态是Shift-DR和Shift-IR,二者链接TDI和TDO使用。
IR:命令寄存器,你能够写值到这个寄存器中通知JTAG干某件事。每一个TAP只有一个IR寄存器并且长度是必定的。
DR:TAP能够有多个DR寄存器,与IR寄存器类似,每一个IR值会选择不一样的DR寄存器。
4.JTAG链相关疑问:
计算JTAG链中的IC数目:
一个重要的应用是IR值是全一值,表示BYPASS命令,在BYPASS模式中,TAP控制器中的DR寄存器老是单bit的,从输入TDI到输出TDO,一般一个周期,啥也不干。
可用BYPASS模式计算IC数目。若是每一个IC的TDI-TDO链的延迟是一个时钟,咱们能够发送一些数据并检测它延迟了多久,那么久能够推算出JTAG链中的IC数目。
获得JTAG链中的器件ID:
大多数的JTAG IC都支持IDCODE命令。在IDCODE命令中,DR寄存器会装载一个32bit的表明器件ID的值。不一样于BYPASS指令,在IDCODE模式下IR的值没有标准。不过每次TAP控制器跳转到Test-Logic-Reset态,它会进入IDCODE模式,并装载IDCODE到DR。
5.边界扫描:
TAP控制器进入边界扫描模式时,DR链能够遍历每一个IO块或者读或拦截每一个引脚。
在FPGA上使用JTAG,你能够知晓每一个引脚的状态当FPGA在运行的时候。
可使用JTAG命令SAMPLE,固然不一样IC多是不一样的。