第二章:JTAG接口详解:TDI、TDO、TCK、TMS信号定义、JTAG链的连接方式

好,咱们进入正题。上一章我聊了边界扫描能干什么,这一章咱们把最基础的东西讲透——JTAG接口的四个核心信号。

你想想看,做硬件测试这么多年,我见过太多工程师把JTAG当成“黑盒子”来用。插上烧录器,点一下下载,完事。但一旦遇到链不通、信号干扰、或者多片级联的问题,就抓瞎了。说白了,不懂这四个信号,你连问题出在哪都找不到。

2.1 四个核心信号:TDI、TDO、TCK、TMS

JTAG接口其实就四个信号,加上一个可选的TRST(复位)。咱们一个一个说。

信号名 全称 方向 作用
TDI Test Data In 输入 串行数据输入到芯片
TDO Test Data Out 输出 串行数据从芯片输出
TCK Test Clock 输入 测试时钟,同步所有操作
TMS Test Mode Select 输入 控制TAP状态机的跳转

2.2 TDI 和 TDO:数据怎么流?

TDI是数据入口,TDO是数据出口。这个很好理解。但有个细节我特别想强调——数据是串行移入的

什么意思呢?就是你给TDI送一个bit,它进到芯片的移位寄存器里。再送一个bit,之前的bit就往里推一格。就像排队一样,一个一个往里进。

我记得有一次调试一块FPGA板子,怎么都读不到IDCODE。折腾了半天,最后发现是TDI和TDO搞反了。嗯,这种低级错误我也犯过。所以画原理图的时候,一定要反复核对TDI和TDO的连接方向。

重要原则:在JTAG链中,前一级芯片的TDO连接到后一级芯片的TDI。数据从第一个芯片的TDI流入,从最后一个芯片的TDO流出。

2.3 TCK:时钟是命脉

TCK是测试时钟。所有JTAG操作都在TCK的上升沿或下降沿触发。

我个人习惯把TCK当作整个测试系统的“心跳”。它频率不能太高,否则信号质量会变差。我在一个高速项目中试过跑50MHz的TCK,结果链上的第三个芯片老是丢数据。降到20MHz,问题就消失了。

经验之谈:TCK频率建议控制在10MHz~25MHz之间。如果链上有多个芯片,或者走线比较长,适当降低频率会更稳定。

2.4 TMS:控制状态的“方向盘”

TMS信号控制TAP(Test Access Port)状态机的跳转。TAP状态机有16个状态,通过TMS在TCK上升沿的电平来决定下一步去哪。

你可能会问:“这16个状态我都要记住吗?”其实不用。常用的就那么几个:

  • Test-Logic-Reset:复位状态,TMS保持高电平5个TCK周期就能进入
  • Run-Test/Idle:空闲状态,等待指令
  • Shift-DR:移位数据寄存器,这时候TDI/TDO开始干活
  • Shift-IR:移位指令寄存器,用来加载指令

我曾经遇到一个案例,某款芯片的TMS信号有毛刺,导致状态机乱跳。用示波器一抓,发现是走线太长,信号反射造成的。加了个33Ω的串联电阻,搞定。

2.5 JTAG链的连接方式

单个芯片的JTAG连接很简单。但实际项目中,往往要把多个芯片串成一条链。这就是所谓的“JTAG菊花链”。

连接规则就一句话:TDI进,TDO出,中间串起来

举个例子,假设你有三颗芯片:U1、U2、U3。连接方式如下:

测试控制器TDI → U1.TDI
U1.TDO → U2.TDI
U2.TDO → U3.TDI
U3.TDO → 测试控制器TDO

TCK和TMS:所有芯片并联,共用一个时钟和模式选择信号

注意:TCK和TMS是广播信号,所有芯片共享。但TDI和TDO是串联的。千万不要把TDI和TDO也并联起来,那样数据就乱套了。

我记得有一次做板级测试,链上挂了8颗芯片。调试的时候发现,读出来的IDCODE总是少一位。查了半天,原来是中间有一颗芯片的TDO虚焊了。从那以后,我每次焊接完JTAG链,第一件事就是用边界扫描指令读一遍所有芯片的IDCODE。能读全,说明链没问题。

2.6 多链与独立JTAG口

有些复杂板卡会有多条JTAG链。比如CPU一条链,FPGA一条链,外设芯片一条链。这样做的好处是:

  • 每条链独立控制,互不干扰
  • 某条链出问题,不影响其他链
  • 调试时可以只操作特定链,节省时间

但代价是占用的IO口多。每条链都需要独立的TDI、TDO、TCK、TMS。如果你的测试控制器口线不够,就得用菊花链把所有芯片串起来。

我的建议:如果条件允许,尽量把关键芯片(如CPU、FPGA)放在独立链上。其他普通芯片串成一条链。这样既节省口线,又方便调试。

2.7 信号电平与匹配

JTAG信号的电平标准通常是3.3V或1.8V。但不同芯片可能支持不同的电平。我在一个项目中遇到过3.3V的控制器去连1.8V的芯片,结果把芯片烧了。

所以,连接前一定要确认:

  • 控制器的输出电平是否在芯片的输入容忍范围内
  • 芯片的TDO输出电平是否被控制器正确识别
  • 必要时加电平转换芯片,比如TXB0104

嗯,这些细节看似琐碎,但往往是项目中最容易踩坑的地方。你想想看,如果链都连不通,后面再好的测试方案也是白搭。

下一章我会讲TAP状态机的详细工作原理。到时候咱们再深入聊聊怎么通过TMS信号控制状态跳转。今天先到这,你先把这四个信号和链的连接方式吃透。