6 J+ Q" [% f+ n J! G% a9 M7 x根据查阅资料及本人的一些实践经验所得,在使用JTAG下载接口的过程中,请不要随意带电插拔,否则会损坏FPGA芯片的JTAG口信号管脚。那么如何去确认JTAG口已经损坏了呢。首先你要去排除基本的几项因素,一是,是否匹配连接,有很多设备会对应很多接口,在实际条件下要匹配正确,否则也会出现上述情况;二是,排除下载线的问题,如果是下载线坏了,可以使用多根下载线去尝试,排除这类问题。如果还是不能访问FPGA的JTAG口,那么很有可能你的FPGA芯片的JTAG口已经损坏。此时请用万用表检查TCK,TMS,TDO和Tdi是否和GND短路,如果任何一个信号对地短路则表示JTAG信号管脚已经损坏。
8 t5 g0 v" R7 O2 k* O7 Z- S7 G3 |/ k; P
2 A) {/ N/ A" [2 T
1 q3 n8 q4 Y/ g, H9 p至于JTAG口是什么,这里我们也来探讨一下,JTAG英文全称是 Joint Test Action Group,翻译过来中文就是联合测试工作组。
JTAG是一种IEEE标准用来解决板级问题,诞生于20世纪80年代。今天JTAG被用来烧录、debug、探查端口。当然,最原始的使用是边界测试。
3 Q0 A. W2 B: W0 J
1、边界测试:9 a+ @: d4 r7 d1 K1 K# Y
" q% A2 B! D2 U* j8 s' r
举个例子,你有两个芯片,这两个芯片之间连接了很多很多的线,怎么确保这些线之间的连接是OK的呢,用JTAG,它可以控制所有IC的引脚。这叫做芯片边界测试。
; z- B1 i3 l7 `: y+ B
4 u# Y8 M: _) p3 \% i+ |: ]
1 Q" ? W0 ~9 S; b6 j6 l, q8 q4 I$ U8 F# t0 W& J' z1 \& `# @3 b
- A) a D* J. D$ `/ G5 C( D# G
2、JTAG引脚:
: Y m- T8 S X( [3 [ L$ o
6 S" {' g0 Q4 j' C9 c9 \9 o
JTAG发展到现在已经有脚了,通常四个脚:TDI,TDO,TMS,TCK,当然还有个复位脚TRST。对于芯片上的JTAG的脚实际上是专用的。
TDI:测试数据输入,数据通过TDI输入JTAG口;
TDO:测试数据输出,数据通过TDO从JTAG口输出;
TMS:测试模式选择,用来设置JTAG口处于某种特定的测试模式;
TCK:测试时钟输入;
TRST:测试复位。
& O" _7 }1 J8 P" s) \
( z3 a, {7 U0 U& g8 t1 C
4 g+ C- q( c. ]: ]; D- m
5 Y, m# @- s( u( S" d( U& Y
! ~% J! P" n" ]- |& O t
CPU和FPGA制造商允许JTAG用来端口debug;FPGA厂商允许通过JTAG配置FPGA,使用JTAG信号通入FPGA核。
* S9 C+ R9 @8 y# r
3、JTAG如何工作:
' g) `7 f( G) u; S3 e2 r
2 I+ }# U; f# g9 y
PC控制JTAG:用JTAG电缆连接PC的打印端口或者USB或者网口。最简单的是连接打印端口。
% r) d: }. S1 N9 v" i
A$ t2 ~: E3 j2 S8 j* eTMS:在每个含有JTAG的芯片内部,会有个JTAG TAP控制器。TAP控制器是一个有16个状态的状态机,而TMS就是这玩意的控制信号。当TMS把各个芯片都连接在一起的时候,所有的芯片的TAP状态跳转是一致的。下面是TAP控制器的示意图:
& X/ U% I/ s6 ?# v# n7 c
& _ q- N$ T; k3 B1 M6 a/ j
/ w* Z2 N9 J! f4 x
改变TMS的值,状态就会发生跳转。如果保持5个周期的高电平,就会跳回test-logic-rest,通常用来同步TAP控制器;通常使用两个最重要的状态是Shift-DR和Shift-IR,两者连接TDI和TDO使用。
* Z/ g( m' `; t& q* r$ z' m
IR:命令寄存器,你可以写值到这个寄存器中通知JTAG干某件事。每个TAP只有一个IR寄存器而且长度是一定的。
DR:TAP可以有多个DR寄存器,与IR寄存器相似,每个IR值会选择不同的DR寄存器。(很迷)
2 n& `9 ]# H0 F/ c8 [
4、JTAG链相关疑问:
" M6 ~6 u b' P; T
. k" U8 _8 r7 V( Z! h$ l- b
计算JTAG链中的IC数目:
一个重要的应用是IR值是全一值,表示BYPASS命令,在BYPASS模式中,TAP控制器中的DR寄存器总是单bit的,从输入TDI到输出TDO,通常一个周期,啥也不干。
1 N: o X; J8 k* E- } ~, C
可用BYPASS模式计算IC数目。如果每个IC的TDI-TDO链的延迟是一个时钟,我们可以发送一些数据并检测它延迟了多久,那么久可以推算出JTAG链中的IC数目。
3 e+ {# X1 ]: w$ n# F; E, Y
得到JTAG链中的器件ID:
# F" g! y7 b4 ]: v
大多数的JTAG IC都支持IDCODE命令。在IDCODE命令中,DR寄存器会装载一个32bit的代表器件ID的值。不同于BYPASS指令,在IDCODE模式下IR的值没有标准。不过每次TAP控制器跳转到Test-Logic-Reset态,它会进入IDCODE模式,并装载IDCODE到DR。
% F: m3 m8 Z0 Q" J. B5 q2 T
. z6 N+ Z4 w1 {; r6 s- V* M
5、边界扫描:
' P& m0 X. A0 e9 Y0 ]& `- k6 b
' C5 T5 \/ |7 H8 j4 P! Y7 A% q
8 U" e9 _3 T! e2 ]# h
7 ]' ]1 o5 R& y$ k+ k% d
TAP控制器进入边界扫描模式时,DR链可以遍历每个IO块或者读或拦截每个引脚。在FPGA上使用JTAG,你可以知晓每个引脚的状态当FPGA在运行的时候。可以使用JTAG命令SAMPLE,当然不同IC可能是不同的。
9 r- b% c5 `( r& m# k
9 B. F6 S) l4 C$ x* a: @" @1 Q" `1 O5 m. P9 K; N. b2 U" _% [7 V' P
5 y3 k% T7 B8 f& A+ t
这里没有过多的讲解JTAG调试原理,但是但是对于感兴趣的大侠们,可以获取详细文档查看一下,JTAG调试原理详细技术文档。
链接:https://pan.baidu.com/s/1PbBFgWnZgROeIiYhscBuZw
5 b9 F( T. a& W) g" p
提取码:0u5a
% m* m; c3 x+ ~% t+ j2 f
/ ]" q5 J! N9 @
如果JTAG口已经损坏了,那只能“节哀顺变”了,但是也不要只顾着伤心,最重要的是分析其中的原因,做其他事情也是一样的道理。那我们就来分析分析,我们在使用的过程中,可能经常为了方便,随意插拔JTAG下载口,在大多数情况下不会发生问题。但是仍然会有很小的机率发生下面的问题,因为热插拔而产生的JTAG口的静电和浪涌,最终导致FPGA管脚的击穿。至此,也有人怀疑是否是盗版的USB Blaster或者ByteBlasterII设计简化,去除了保护电路导致的。但经过很多实际情况的反馈,事实证明原装的USB Blaster 也会发生同样的问题。也有人提出质疑是否是ALTERA的低端芯片为了降低成本,FPGA的IO单元没有加二极管钳位保护电路。 这类质疑其实都不是解决问题的本质,最重要的是我们要规范操作,尽可能的去减少因为实际操作不当导致一些硬件设备、接口等提前结束寿命或“英年早逝”,那重点来了,关于JTAG下载口的使用,我们需要如何去规范操作呢。
+ B. T. V/ P9 A3 g, f. o- X
上电时的操作流程顺序:
. S. v' `2 c: Y' p2 C4 m, T/ I" ^) [
0 R: p/ k. J: ?6 y; N; k2 N1 Q
1. 在FPGA开发板及相关设备断电的前提下,插上JTAG下载线接口;
( I! N0 M' V2 r
2. 插上USB Blaster或者ByteBlasterII的电缆;
4 F0 \& {* O9 S* \* k \4 Z
3. 接通FPGA开发板的电源。
6 z" Q5 j1 _2 Q
下电时的操作流程顺序:, S! m' ^. u! G) Z6 ]& x6 d
8 m' R& N# O- B! u: ^6 l, Q
1. 断开FPGA开发板及相关设备的电源; 8 I4 ]1 q: A& r
2. 断开USB Blaster或者ByteBlasterII的电缆;
; }" }7 @3 |0 l Q+ [7 u
+ J3 a( g+ t7 M9 I4 Q
3. 拔下JTAG下载线接口,并放置适宜地方存储。
( l6 s4 x- E4 z6 R7 t8 w# r1 \
6 a! K" O: N' l: M1 b& Q" w o, `
" I8 A; P1 A* v7 U4 o
虽然上述的操作步骤有点繁琐,有时我们在使用的时候也是不以为然,但是为了保证芯片不被损坏,建议大家还是中规中矩的按照上述的步骤来操作。本人上述出现的问题,经过检测后就是TCK跟GND短路了,虽然发生的概率不是很大,但是为了能够更合理更长久的的使用硬件相关设备,还是建议大家在实操过程中,不要担心繁琐,中规中矩操作,换个角度思考,“多磨多练”也是对自己有好处的。最后,还是给各位唠叨一句,关于JTAG下载口的使用最好不要带电热插拔,起码可以让JTAG口“活”的久一些,毕竟长情陪伴也是挺不错的,不要等到失去了才知道惋惜。