2、边界扫描链的常见陷阱:JTAG链连接错误、TMS/TDI/TDO/TCK信号电平不匹配、边界扫描链的测试时钟与系统时钟冲突
边界扫描,说白了就是 JTAG。很多硬件工程师觉得 JTAG 嘛,不就是个下载口,连上就能用。嗯,我年轻时也这么想,直到有一次板子调了三天,死活连不上调试器……最后发现是 TDO 虚焊了。从那以后,我对 JTAG 链的审查就格外上心。
这一节,我把自己踩过的坑和见过的典型问题整理出来。你审查原理图时,对着这几条查,基本能过滤掉 90% 的边界扫描陷阱。
2.1 JTAG 链连接错误
JTAG 链的连接,核心就一句话:TDI 进,TDO 出,首尾相连。但实际项目中,我见过太多反着接、漏接、多接的情况。
JTAG 链基本规则:
- 第一颗芯片的 TDI 接连接器(或主控)的 TDO
- 第一颗芯片的 TDO 接第二颗芯片的 TDI
- 最后一颗芯片的 TDO 接回连接器(或主控)的 TDI
- 所有芯片的 TCK 和 TMS 并联
我审查过一块 8 片 FPGA 的板子,设计者把 TDI 和 TDO 搞反了,链子根本不通。你想想看,8 片 FPGA,每片几百个 ball,查起来多痛苦。所以原理图阶段,我习惯在 netlist 里用颜色标注 JTAG 链,一眼就能看出信号流向对不对。
常见连接错误清单:
- TDI/TDO 接反:信号流向颠倒,链子不通
- 漏接某颗芯片的 TDO:链子断开,后续芯片无法访问
- 多颗芯片的 TDI 并联:信号冲突,逻辑混乱
- TCK/TMS 未并联:部分芯片时钟或状态机不同步
- 未处理未使用的 JTAG 引脚:比如悬空的 TDO 可能产生毛刺
还有一个细节:链中芯片的顺序。有些芯片的 IDCODE 是固定的,你可以通过读取 IDCODE 来验证链的顺序。我在项目中遇到过,设计者把两颗不同厂商的芯片顺序搞反了,结果 IDCODE 读出来对不上,折腾了半天才发现是顺序问题。
2.2 TMS/TDI/TDO/TCK 信号电平不匹配
电平不匹配,是 JTAG 链里最隐蔽的坑。为什么?因为 JTAG 信号在低频下可能还能工作,但到了高频(比如 10MHz 以上),电平不匹配就会导致信号畸变、时序违规,甚至烧坏芯片。
我记得有一次,一个项目用了 3.3V 的 MCU 和 1.8V 的 FPGA 组成 JTAG 链。设计者觉得 3.3V 的 TDI 直接进 FPGA 没问题,结果 FPGA 的 I/O 承受不了 3.3V,烧了。嗯,那批板子报废了 20 片,教训深刻。
| 信号 | 常见电平标准 | 不匹配风险 | 推荐处理方式 |
|---|---|---|---|
| TDI | 1.8V / 2.5V / 3.3V | 输入过压损坏、逻辑阈值不匹配 | 电平转换器或电阻分压 |
| TDO | 1.8V / 2.5V / 3.3V | 输出驱动不足、接收端无法识别 | 电平转换器或开漏+上拉 |
| TCK | 1.8V / 2.5V / 3.3V | 时钟沿抖动、时序违规 | 电平转换器或时钟缓冲器 |
| TMS | 1.8V / 2.5V / 3.3V | 状态机跳转错误 | 电平转换器或电阻分压 |
我的审查习惯:
我会在原理图上标注每个 JTAG 引脚的电压域。如果链中有多个电压域,我会检查是否每个跨域信号都加了电平转换。别指望芯片的 5V 容忍特性——那只是能承受,不代表逻辑阈值匹配。
还有一个容易被忽略的点:TCK 的时钟树。如果链中芯片的 TCK 来自不同的时钟源,或者经过了不同的缓冲器,skew 会很大。我建议所有芯片的 TCK 从同一个源扇出,走线等长,必要时加时钟缓冲器。
2.3 边界扫描链的测试时钟与系统时钟冲突
这个问题,说白了就是:测试时钟(TCK)和系统时钟(比如 PLL 输出)在芯片内部打架。
边界扫描的测试逻辑,通常由 TCK 驱动。但有些芯片内部,边界扫描的移位操作会用到系统时钟的某个分频或倍频。如果这两个时钟不同步,或者频率差距太大,测试结果就会出错。
我遇到过最典型的情况:一颗 SoC,内部 PLL 输出 200MHz 给核心逻辑,JTAG 的 TCK 只有 10MHz。设计者没注意,结果边界扫描测试时,移位数据总是错位。查了半天,发现是芯片内部的一个测试模式寄存器,需要系统时钟的某个沿来采样,但那个沿和 TCK 的沿没对齐。
时钟冲突的典型场景:
- TCK 与系统时钟异步:跨时钟域采样导致 metastability
- TCK 频率过高:系统时钟域内的测试逻辑来不及响应
- 系统时钟未稳定时启动 JTAG:PLL 锁定前,测试逻辑状态不确定
- 多颗芯片的 TCK 相位不一致:链中不同芯片的测试时钟沿不同步
怎么避免?我建议在原理图阶段就明确:TCK 必须是一个独立的、干净的时钟源。不要从系统时钟分频得到,更不要用 PLL 的输出。如果必须用系统时钟,那就要加同步器,或者确保 TCK 的频率远低于系统时钟(比如 1/10 以下)。
避坑指南:
我曾经在一个项目里,为了省一个晶振,把 TCK 和系统时钟共用了。结果系统时钟一跑起来,JTAG 就乱套。后来老老实实加了个独立的 10MHz 晶振给 TCK,问题全消。所以,别省那个晶振钱。
2.4 知识体系总览
下面这张图,我把 JTAG 链的三大陷阱和它们之间的关系画出来了。你审查原理图时,可以对着这张图逐项检查。
这张图把三大陷阱和它们的子问题都列出来了。你审查原理图时,可以逐项对照。我个人习惯是把这张图打印出来,贴在工位上,每次审图都对着过一遍。
2.5 总结
边界扫描链的审查,其实就三件事:链通不通、电平对不对、时钟乱不乱。这三件事做好了,JTAG 测试基本不会出大问题。