大侠好,欢迎来到fpga技术江湖,江湖偌大,相见即是缘分。大侠可以关注fpga技术江湖,在“闯荡江湖”、行侠仗义栏里获取其他感兴趣的资源,或者一起煮酒言欢。“煮酒言欢”进入ic技术圈,这里有近50个ic技术公众号。
欢迎大侠来到fpga技术江湖新栏目今日说“法”,当然,在这里我们肯定不是去研究讨论法律法规知识,那我们讨论什么呢,在这里我们讨论的是产品研发以及技术学习时一些小细节小方法等,欢迎大家一起学习交流,有好的灵感以及文章随笔,欢迎投稿,投稿请标明笔名以及相关文章。今天带来的是“是谁动了我的jtag口?”,话不多说,上货。
在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英文全称是 joint test action group,翻译过来中文就是联合测试工作组。
jtag是一种ieee标准用来解决板级问题,诞生于20世纪80年代。今天jtag被用来烧录、debug、探查端口。当然,最原始的使用是边界测试。
1、边界测试
举个例子,你有两个芯片,这两个芯片之间连接了很多很多的线,怎么确保这些线之间的连接是ok的呢,用jtag,它可以控制所有ic的引脚。这叫做芯片边界测试。
2、jtag引脚
jtag发展到现在已经有脚了,通常四个脚:tdi,tdo,tms,tck,当然还有个复位脚trst。对于芯片上的jtag的脚实际上是专用的。
tdi:测试数据输入,数据通过tdi输入jtag口;
tdo:测试数据输出,数据通过tdo从jtag口输出;
tms:测试模式选择,用来设置jtag口处于某种特定的测试模式;
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可能是不同的。
这里没有过多的讲解jtag调试原理,但是但是对于感兴趣的大侠们,可以获取详细文档查看一下,jtag调试原理详细技术文档。
如果jtag口已经损坏了,那只能“节哀顺变”了,但是也不要只顾着伤心,最重要的是分析其中的原因,做其他事情也是一样的道理。那我们就来分析分析,我们在使用的过程中,可能经常为了方便,随意插拔jtag下载口,在大多数情况下不会发生问题。但是仍然会有很小的机率发生下面的问题,因为热插拔而产生的jtag口的静电和浪涌,最终导致fpga管脚的击穿。至此,也有人怀疑是否是盗版的usb blaster或者byteblasterii设计简化,去除了保护电路导致的。但经过很多实际情况的反馈,事实证明原装的usb blaster 也会发生同样的问题。也有人提出质疑是否是altera的低端芯片为了降低成本,fpga的io单元没有加二极管钳位保护电路。这类质疑其实都不是解决问题的本质,最重要的是我们要规范操作,尽可能的去减少因为实际操作不当导致一些硬件设备、接口等提前结束寿命或“英年早逝”,那重点来了,关于jtag下载口的使用,我们需要如何去规范操作呢。
上电时的操作流程顺序:
1.在fpga开发板及相关设备断电的前提下,插上jtag下载线接口;
2.插上usb blaster或者byteblasterii的电缆;
3.接通fpga开发板的电源。
下电时的操作流程顺序:
1.断开fpga开发板及相关设备的电源;
2.断开usb blaster或者byteblasterii的电缆;
3.拔下jtag下载线接口,并放置适宜地方存储。
虽然上述的操作步骤有点繁琐,有时我们在使用的时候也是不以为然,但是为了保证芯片不被损坏,建议大家还是中规中矩的按照上述的步骤来操作。本人上述出现的问题,经过检测后就是tck跟gnd短路了,虽然发生的概率不是很大,但是为了能够更合理更长久的的使用硬件相关设备,还是建议大家在实操过程中,不要担心繁琐,中规中矩操作,换个角度思考,“多磨多练”也是对自己有好处的。最后,还是给各位唠叨一句,关于jtag下载口的使用最好不要带电热插拔,起码可以让jtag口“活”的久一些,毕竟长情陪伴也是挺不错的,不要等到失去了才知道惋惜。
GTC23 | 3 月 22 日预告 — 在线观看派对:重塑软件定义汽车的电子架构
高校资产管理:全周期、全流程、动态数字化管理
出货量勇攀榜首,爱普特助力全国产MCU再树新标杆
运放做自动OR操作的电源选择器
硅谷数模分享SlimPort最新进展及All-in-one接口技术愿景
一文详细了解JTAG接口
smt贴片常见的问题
中国最受欢迎的七大企业,华为仅排第二
什么是时基电路_时基电路的作用介绍
NVIDIA Omniverse 连接器和 NVIDIA RTX 技术为大学生设计的游戏引擎赋能
WiFi上网卡 或许你的路由器该换了
什么是脉冲宽度_脉冲宽度是什么意思
随着更高性能的存储火爆 也给3D Xpoint带来了新的机会
整流二极管工作原理是什么?
苹果或将在11月推出自研的A系列芯片的Mac电脑
利用Python和PyTorch处理面向对象的数据集(1)
全球车市的“大萧条”下,车企对于电动化的热情不减反增
逻辑设计法设计PLC应用程序的五大步骤
关于嵌入式工控主板和计算机pc主板的区别
黑鲨游戏手机4 Pro上手体验