找回密码
 注册
关于网站域名变更的通知
查看: 729|回复: 1
打印 上一主题 下一主题

关于JTAG口,你了解多少?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-1-19 21:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Heaven_1 于 2024-1-23 09:49 编辑
- X* X& |5 ]. D& u$ b( ?3 f" [: O& ?/ t" c! h' d0 R" L/ K
5 @) M2 b4 d" M( u# u# }3 s

        FPGA研发及学习过程中,有一个关键步骤就是下板实现,做硬件“硬现”很重要,一般来说用JTAG口比较常见一些,因此相信肯定有些大侠遇到过JTAG口失灵或者损坏无法使用的事情。最近我就遇到了这类事情,FPGA的JTAG口突然就不能下载程序了,而且这种事情已经不是第一次了,之前在做项目的时候也出现过,而且出现的形式也极其相似,之前还用的好好的,第二天就不行了,真是让人郁闷。为此,本人也是去尝试了很多解决办法,一开始也没有去设想是JTAG口坏了,于是乎,本人换了usb-blaster,可一点反应也没有。难道真的是JTAG口坏了?于是,本人就去查阅相关资料去搞清楚问题的本质在哪里,下面就是本人的一些收获,分享出来,仅供各位大侠参考,一起交流学习。


  z$ [. Y, Y  f2 u- d1 @

- b: J; H, H, h' m


) m7 j, T7 ?/ T

        根据查阅资料及本人的一些实践经验所得,在使用JTAG下载接口的过程中,请不要随意带电插拔,否则会损坏FPGA芯片的JTAG口信号管脚。那么如何去确认JTAG口已经损坏了呢。首先你要去排除基本的几项因素,一是,是否匹配连接,有很多设备会对应很多接口,在实际条件下要匹配正确,否则也会出现上述情况;二是,排除下载线的问题,如果是下载线坏了,可以使用多根下载线去尝试,排除这类问题。如果还是不能访问FPGA的JTAG口,那么很有可能你的FPGA芯片的JTAG口已经损坏。此时请用万用表检查TCK,TMS,TDO和Tdi是否和GND短路,如果任何一个信号对地短路则表示JTAG信号管脚已经损坏。
! M; Y* I+ {; l$ W5 G5 _: C& F. ~% S

) l4 i9 n$ f6 d2 W$ g! a

        至于JTAG口是什么,这里我们也来探讨一下,JTAG英文全称是 Joint Test Action Group,翻译过来中文就是联合测试工作组。


; k# y( X- A* j; Q5 }5 w, C

        JTAG是一种IEEE标准用来解决板级问题,诞生于20世纪80年代。今天JTAG被用来烧录、debug、探查端口。当然,最原始的使用是边界测试。


  ?9 c, q" k/ ~9 E  g5 ]

1、边界测试. g" O$ k; \7 o* }  y% |& R

+ ^  w8 q5 H1 k) i/ o0 i

        举个例子,你有两个芯片,这两个芯片之间连接了很多很多的线,怎么确保这些线之间的连接是OK的呢,用JTAG,它可以控制所有IC的引脚。这叫做芯片边界测试。


, ?" V# N+ w* K& m$ N* z


9 n" i$ p/ s" l+ s$ x, x; {7 A

) h* @3 B! I9 M! ~' w

" A5 \& U/ C7 l

2、JTAG引脚
  k' q$ {. T9 w. x" ?. `1 x, O
2 ]5 |' H2 [! q& Y$ G' L  s# W$ M

        JTAG发展到现在已经有脚了,通常四个脚:TDI,TDO,TMS,TCK,当然还有个复位脚TRST。对于芯片上的JTAG的脚实际上是专用的。

: g( h; `  C( Y* D


5 p; F2 ~+ ?& |# P# Q8 }3 N! @; X0 m
  • TDI:测试数据输入,数据通过TDI输入JTAG口;
  • TDO:测试数据输出,数据通过TDO从JTAG口输出;
  • TMS:测试模式选择,用来设置JTAG口处于某种特定的测试模式;
  • TCK:测试时钟输入;
  • TRST:测试复位。+ W- j0 x0 N% f& \

5 a8 h5 p; u, `2 ?0 d

; m, x: m9 H9 F7 ~: N2 ^% }* ~5 H
7 Y1 `# Y0 c/ v! s: }

! N, M' x  K- |' M5 C& u

$ }$ ~0 v$ h! B& L, S. E. x

: R. Z# k! O2 F' u4 l

. k2 X9 K- c; E4 Y8 L3 s  q& s

& j( d- v5 K$ i- @  J

CPU和FPGA制造商允许JTAG用来端口debug;FPGA厂商允许通过JTAG配置FPGA,使用JTAG信号通入FPGA核。6 ~; V* e, `; R2 g


8 A& q( U2 t2 B1 Y" G) U! L9 d0 r7 U0 K

! |$ p" O4 S# Y4 H& l

3、JTAG如何工作

PC控制JTAG:用JTAG电缆连接PC的打印端口或者USB或者网口。最简单的是连接打印端口。


# m( b; C( {0 D  f1 k

TMS:在每个含有JTAG的芯片内部,会有个JTAG TAP控制器。TAP控制器是一个有16个状态的状态机,而TMS就是这玩意的控制信号。当TMS把各个芯片都连接在一起的时候,所有的芯片的TAP状态跳转是一致的。下面是TAP控制器的示意图:

! F, t3 d. a0 x- n# j, w

; {/ o1 g, {6 {# e7 A


/ W# ]( `" {  e4 k  {! A6 l


, u1 d8 h- p; a  M; l

改变TMS的值,状态就会发生跳转。如果保持5个周期的高电平,就会跳回test-logic-rest,通常用来同步TAP控制器;通常使用两个最重要的状态是Shift-DR和Shift-IR,两者连接TDI和TDO使用。
$ Q* e* `6 j$ `3 Y


2 L+ }  `/ v) I/ j* t

IR:命令寄存器,你可以写值到这个寄存器中通知JTAG干某件事。每个TAP只有一个IR寄存器而且长度是一定的。

+ w! Q4 F4 ?7 Z% C$ N

DR:TAP可以有多个DR寄存器,与IR寄存器相似,每个IR值会选择不同的DR寄存器。(很迷)


/ n9 s3 Q+ H) X# p" }

4、JTAG链相关疑问

计算JTAG链中的IC数目:

5 h. |, ]& D! D

        一个重要的应用是IR值是全一值,表示BYPASS命令,在BYPASS模式中,TAP控制器中的DR寄存器总是单bit的,从输入TDI到输出TDO,通常一个周期,啥也不干。


) R. Q1 s- R! r0 V9 m9 w

        可用BYPASS模式计算IC数目。如果每个IC的TDI-TDO链的延迟是一个时钟,我们可以发送一些数据并检测它延迟了多久,那么久可以推算出JTAG链中的IC数目。

$ O+ _9 d4 Q% y) R  z( A, M5 j

得到JTAG链中的器件ID:

/ \; K8 u( q' \& t7 p

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

; ~/ b  k, |  t% a* v7 a5 d

1 r9 f7 J( w5 _- @# k

5、边界扫描:

* U& i) n* q3 n; e) ^


# b5 t+ Q2 D  m% }6 c


# n& s1 z1 x7 w- I8 W% m

8 B5 M. Q4 B8 e  k$ a: i! Y5 d$ r

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

: B! f, k& e( W8 ]8 l# f

' n% k) C2 _: ?* O. X  H


) n# u: i8 l$ y$ C" O8 ?

: E7 y$ a6 G3 g. H2 T% L, ]

        这里没有过多的讲解JTAG调试原理,但是但是对于感兴趣的大侠们,可以获取详细文档查看一下,JTAG调试原理详细技术文档。
% J! K, `: s' x


/ O0 n1 ]. A$ o+ [4 [( u

$ `7 Z/ Q, I4 l" u

        如果JTAG口已经损坏了,那只能“节哀顺变”了,但是也不要只顾着伤心,最重要的是分析其中的原因,做其他事情也是一样的道理。那我们就来分析分析,我们在使用的过程中,可能经常为了方便,随意插拔JTAG下载口,在大多数情况下不会发生问题。但是仍然会有很小的机率发生下面的问题,因为热插拔而产生的JTAG口的静电和浪涌,最终导致FPGA管脚的击穿。至此,也有人怀疑是否是盗版的USB Blaster或者ByteBlasterII设计简化,去除了保护电路导致的。但经过很多实际情况的反馈,事实证明原装的USB Blaster 也会发生同样的问题。也有人提出质疑是否是ALTERA的低端芯片为了降低成本,FPGA的IO单元没有加二极管钳位保护电路。这类质疑其实都不是解决问题的本质,最重要的是我们要规范操作,尽可能的去减少因为实际操作不当导致一些硬件设备、接口等提前结束寿命或“英年早逝”,那重点来了,关于JTAG下载口的使用,我们需要如何去规范操作呢。


8 b7 R4 W) S' ^  r. U


$ x8 s, e8 J$ D7 l5 K8 |1 L) K7 A

上电时的操作流程顺序:


4 A6 t2 x. D, w

  • 1.在FPGA开发板及相关设备断电的前提下,插上JTAG下载线接口;
  • 2.插上USB Blaster或者ByteBlasterII的电缆;
  • 3.接通FPGA开发板的电源。  o0 c( g  @% H. i7 f% g. F

8 @% _: ^' W# R; z+ ^! _7 {
+ b, M7 q1 ?8 v7 D' U7 J

. k& ~) I: p& |. B6 x

下电时的操作流程顺序:

. G( P8 U* p$ O* E' [0 H, M% X$ o

# M) {5 N8 ^* z3 `

  • 1.断开FPGA开发板及相关设备的电源;
  • 2.断开USB Blaster或者ByteBlasterII的电缆;
  • 3.拔下JTAG下载线接口,并放置适宜地方存储。) ~; G' \8 k  v9 [2 Q7 U
& M( }8 ]$ L8 F8 X0 v

2 B! O7 Y1 `; J9 f4 u

. W# q# ?2 V+ S3 z7 ?! A. J1 S
1 x5 F. u7 ^/ o" u5 ?& g

% ]+ @8 ~6 d6 i3 |( v/ i" w- ^
) a7 K4 F6 z' j+ g; F: l

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

9 f6 b1 s& p6 M! g4 x6 b) }
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2024-1-23 09:52 | 只看该作者
    JTAG下载程序很方便
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-19 21:20 , Processed in 0.125000 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表