第二章: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信号控制状态跳转。今天先到这,你先把这四个信号和链的连接方式吃透。