如何确认JTAG港受损?

2021-03-04 17:24 来源:电子说

在FPGA的研发和学习过程中,其中一个关键步骤就是下位板的实现。做硬件“硬演示”很重要。一般来说,使用JTAG港较为普遍。因此,我相信一些英雄已经遇到了一些事情,JTAG港失败或损坏,不能使用。

最近遇到这种事情,FPGA的JTAG端口突然下载不到程序。而且,这种事情也不是第一次了。之前做项目的时候也发生过,而且以非常类似的形式出现。之前用的还不错,第二天就不行了,真的很郁闷。

为此,我尝试了很多解决方案,但是一开始没想到JTAG端口坏了,就换成了usb-blaster,但是一点反应都没有。真的是JTAG嘴破了吗?

所以我去查阅了相关资料,找出了问题的本质在哪里。以下是我的一些收获,分享给大家参考,一起交流学习。

根据参考资料和我的实践经验,请不要随意插拔JTAG下载接口,否则会损坏FPGA芯片的JTAG端口信号引脚。

那么如何确认JTAG港受损呢?

首先你要排除几个基本因素:第一,是否匹配连接,有很多设备对应很多接口,在实际情况下必须正确匹配,否则会出现上述情况;第二,消除下载线的问题。如果下载线断了,可以用多条下载线来尝试消除这种问题。

如果您仍然无法访问FPGA的JTAG端口,很可能您的FPGA芯片的JTAG端口已经损坏。此时,请使用万用表检查TCK、TMS、TDO和Tdi是否与GND短路。如果任何信号对地短路,这意味着JTAG信号引脚已经损坏。

至于什么是JTAG港,我们就在这里讨论吧。JTAG的英文全称是联合测试工作组,中文翻译为联合测试工作组。JTAG是用于解决板级问题的IEEE标准,诞生于20世纪80年代。

今天,JTAG被用来燃烧,调试和探测端口。当然,最原始的使用是边界测试。

1.边界测试,比如你有两个芯片,这两个芯片之间有很多连线。你如何确保这些电线之间的连接正常?有了JTAG,它可以控制所有的集成电路引脚。这叫芯片边界测试。

e1536612-7b3a-11eb-8b86-12bb97331649.png

2.JTAG飞人JTAG自开发以来就有脚,通常是四只脚:TDI,TDO,TMS,TCK,当然还有重置脚TRST。芯片上的JTAG引脚实际上是专用的。

TDI:测试数据输入,通过TDI输入到JTAG端口;

TDO:测试数据输出,从JTAG港通过TDO输出;

TMS:测试模式选择,用于在特定的测试模式下设置JTAG端口;

TCK:测试时钟输入;

TRST:测试重置。

e1693c44-7b3a-11eb-8b86-12bb97331649.png

CPU和FPGA厂商允许使用JTAG进行端口调试;现场可编程门阵列制造商允许现场可编程门阵列由JTAG配置,JTAG信号用于访问现场可编程门阵列内核。

3.JTAG如何工作电脑控制JTAG:用JTAG电缆连接打印机端口或USB或电脑的网络端口。最简单的就是连接打印端口。TMS:在每个包含JTAG的芯片中,都会有一个JTAGTAP控制器。TAP控制器是16个状态的状态机,TMS是这个东西的控制信号。当TMS将所有芯片连接在一起时,所有芯片的TAP状态跳变一致。以下是TAP控制器的示意图:

e1773290-7b3a-11eb-8b86-12bb97331649.png

改变TMS的值,状态就会跳转。如果保持高电平5个周期,就会跳回测试-逻辑-休息,通常用来同步TAP控制器;最常用两个重要状态是移位寄存器和移位寄存器,它们与TDI和TDO相关联。命令寄存器,你可以在其中写一个值来告诉JTAG做些什么。每个TAP只有一个IR寄存器,其长度是确定的。一个DR: tap可以有多个DR寄存器。与红外寄存器类似,为每个红外值选择不同的dr寄存器。(着迷)

4.与JTAG链相关的问题计算JTAG链中集成电路的数量:一个重要的应用是,红外值是全一值,表示旁路命令。在旁路模式下,从输入TDI到输出TDO,TAP控制器中的DR寄存器始终是单比特的,通常是一个周期,不做任何事情。

使用旁路模式计算IC数量。如果每个IC的TDI-TDO链的延迟是一个时钟,我们可以发送一些数据并检测它延迟了多长时间,然后我们可以计算JTAG链中的IC数量。

获取JTAG链中的设备ID:most j

TAGIC都支持IDCODE命令。在IDCODE命令中,DR寄存器会装载一个32bit的代表器件ID的值。不同于BYPASS指令,在IDCODE模式下IR的值没有标准。不过每次TAP控制器跳转到Test-Logic-Reset态,它会进入IDCODE模式,并装载IDCODE到DR。

5、边界扫描:

e1db70fc-7b3a-11eb-8b86-12bb97331649.png

TAP控制器进入边界扫描模式时,DR链可以遍历每个IO块或者读或拦截每个引脚。在FPGA上使用JTAG,你可以知晓每个引脚的状态当FPGA在运行的时候。可以使用JTAG命令SAMPLE,当然不同IC可能是不同的。

e2005a8e-7b3a-11eb-8b86-12bb97331649.jpg

如果JTAG口已经损坏了,那只能“节哀顺变”了,但是也不要只顾着伤心,最重要的是分析其中的原因,做其他事情也是一样的道理。那我们就来分析分析,我们在使用的过程中,可能经常为了方便,随意插拔JTAG下载口,在大多数情况下不会发生问题。但是仍然会有很小的机率发生下面的问题,因为热插拔而产生的JTAG口的静电和浪涌,最终导致FPGA管脚的击穿。

至此,也有人怀疑是否是盗版的USBBlaster或者ByteBlasterII设计简化,去除了保护电路导致的。但经过很多实际情况的反馈,事实证明原装的USBBlaster也会发生同样的问题。

也有人提出质疑是否是ALTERA的低端芯片为了降低成本,FPGA的IO单元没有加二极管钳位保护电路。这类质疑其实都不是解决问题的本质,最重要的是我们要规范操作,尽可能的去减少因为实际操作不当导致一些硬件设备、接口等提前结束寿命或“英年早逝”,那重点来了,关于JTAG下载口的使用,我们需要如何去规范操作呢。上电时的操作流程顺序:

1.在FPGA开发板及相关设备断电的前提下,插上JTAG下载线接口;

2.插上USBBlaster或者ByteBlasterII的电缆;

3.接通FPGA开发板的电源。

下电时的操作流程顺序:

1.断开FPGA开发板及相关设备的电源;

2.断开USBBlaster或者ByteBlasterII的电缆;

3.拔下JTAG下载线接口,并放置适宜地方存储。

虽然上述的操作步骤有点繁琐,有时我们在使用的时候也是不以为然,但是为了保证芯片不被损坏,建议大家还是中规中矩的按照上述的步骤来操作。

本人上述出现的问题,经过检测后就是TCK跟GND短路了,虽然发生的概率不是很大,但是为了能够更合理更长久的的使用硬件相关设备,还是建议大家在实操过程中,不要担心繁琐,中规中矩操作,换个角度思考,“多磨多练”也是对自己有好处的。最后,还是给各位唠叨一句,关于JTAG下载口的使用最好不要带电热插拔,起码可以让JTAG口“活”的久一些,毕竟长情陪伴也是挺不错的,不要等到失去了才知道惋惜。

责任编辑:lq

延伸 · 阅读