JTAG协议基础知识详解
JTAG协议基础知识详解
1.什么是JTAG
JTAG(Joint Test Action Group)是一种IEEE标准,开发于上个世纪80年代,主要用于解决板级问题。今天,JTAG被广泛应用于芯片的烧录、调试(debug)、端口探查等场景。最原始的使用场景是边界测试,例如在两个芯片之间连接大量线缆时,通过JTAG可以控制所有IC的引脚,确保连接的正确性,这被称为芯片边界测试。
2.JTAG引脚
JTAG发展到现在通常包含四个主要引脚:TDI(测试数据输入)、TDO(测试数据输出)、TMS(测试模式选择)和TCK(测试时钟输入),此外还有一个可选的复位脚TRST。这些引脚在芯片上是专用的。
- TDI:数据通过TDI输入JTAG口;
- TDO:数据通过TDO从JTAG口输出;
- TMS:用于设置JTAG口处于某种特定的测试模式;
- TCK:测试时钟输入;
- TRST:测试复位;
CPU和FPGA制造商允许通过JTAG进行端口调试;FPGA厂商还允许通过JTAG配置FPGA,使用JTAG信号通入FPGA核。
3.JTAG怎么工作
通过JTAG电缆可以将PC与JTAG接口连接,支持打印端口、USB或网口等多种连接方式。最简单的是连接打印端口。
在每个含有JTAG的芯片内部,都有一个JTAG TAP(Test Access Port)控制器。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模式计算JTAG链中的IC数目。如果每个IC的TDI-TDO链的延迟是一个时钟周期,可以发送一些数据并检测延迟时间,从而推算出JTAG链中的IC数目。
获取JTAG链中的器件ID
大多数JTAG IC都支持IDCODE命令。在IDCODE命令中,DR寄存器会装载一个32位的代表器件ID的值。虽然每次TAP控制器跳转到Test-Logic-Reset状态时会进入IDCODE模式并装载IDCODE到DR,但IDCODE模式下的IR值并没有统一标准。
5.边界扫描
当TAP控制器进入边界扫描模式时,DR链可以遍历每个IO块或读取或拦截每个引脚的状态。在FPGA上使用JTAG,可以在FPGA运行时知晓每个引脚的状态。可以使用JTAG命令SAMPLE,不过不同IC可能有不同的实现方式。