4、JTAG调试接口:JTAG标准介绍、TAP控制器状态机、Boundary Scan原理、JTAG在固件调试中的应用
说到固件调试,JTAG 接口绝对是个绕不开的话题。我个人觉得,如果你能把 JTAG 玩明白,那调试 Retimer 这类高速芯片时,底气会足很多。今天我们就来聊聊 JTAG 的那些事儿。
4.1 JTAG 标准介绍
JTAG,全称是 Joint Test Action Group,说白了就是联合测试行动组搞出来的一个标准。它最早是为了解决电路板测试问题而生的,后来被 IEEE 标准化为 1149.1 协议。
你想想看,一块 PCB 上密密麻麻全是 BGA 封装的芯片,引脚根本没法用探针去测。这时候 JTAG 就派上用场了——它可以通过边界扫描(Boundary Scan)来测试芯片引脚的通断。
JTAG 接口通常有 5 个信号线:
| 信号名 | 方向 | 功能描述 |
|---|---|---|
| TCK | 输入 | 测试时钟,所有操作都同步于这个时钟 |
| TMS | 输入 | 测试模式选择,控制 TAP 状态机的跳转 |
| TDI | 输入 | 测试数据输入,串行数据从这里喂进去 |
| TDO | 输出 | 测试数据输出,串行数据从这里吐出来 |
| TRST(可选) | 输入 | 测试复位,低电平有效,用于复位 TAP 控制器 |
嗯,这里要注意:TRST 是可选的。很多芯片没有这个引脚,靠 TMS 连续拉高 5 个 TCK 周期也能复位 TAP 控制器。我在项目中遇到过一款芯片,它的 TRST 引脚被复用成了 GPIO,结果调试器死活连不上,折腾了半天才发现是复位时序的问题。
4.2 TAP 控制器状态机
TAP 控制器是 JTAG 的核心,它是一个 16 状态的有限状态机。你可能会问:为什么要搞这么复杂?其实它的设计思路很清晰——通过 TMS 信号在 TCK 的上升沿控制状态跳转。
我习惯把 TAP 状态机分成两大块:
- 数据寄存器(DR)路径:用于访问芯片内部的各个数据寄存器
- 指令寄存器(IR)路径:用于加载 JTAG 指令,选择要操作的数据寄存器
状态机的核心跳转路径是这样的:
Test-Logic-Reset
↓ (TMS=0)
Run-Test/Idle
↓ (TMS=1)
Select-DR-Scan
↓ (TMS=0) ↓ (TMS=1)
Capture-DR Select-IR-Scan
↓ (TMS=0) ↓ (TMS=0)
Shift-DR Capture-IR
↓ (TMS=1) ↓ (TMS=1)
Exit1-DR Shift-IR
↓ (TMS=0) ↓ (TMS=1)
Pause-DR Exit1-IR
↓ (TMS=1) ↓ (TMS=0)
Exit2-DR Pause-IR
↓ (TMS=1) ↓ (TMS=1)
Update-DR Exit2-IR
↓ (TMS=1)
Update-IR
说实话,刚开始看这个状态机的时候,我也觉得头大。但后来我发现一个规律:只要记住 TMS=0 是留在当前路径,TMS=1 是往右走或者往上走,大部分情况都能应付。
4.3 Boundary Scan 原理
Boundary Scan,边界扫描,这个名字起得很形象。它就是在芯片的每个 I/O 引脚旁边都加了一个移位寄存器单元,这些单元串联起来形成一条扫描链。
为什么需要这个?你想想看,当芯片焊接到 PCB 上之后,你没法直接测量引脚上的电平。但通过 Boundary Scan,你可以:
- 输出测试向量:把数据通过 TDI 串行移入,然后更新到输出引脚上
- 捕获引脚状态:把输入引脚的电平捕获到寄存器中,再通过 TDO 串行移出来
说白了,Boundary Scan 就是给芯片的每个引脚装了一个「虚拟探针」。我在调试 Retimer 芯片时,经常用这个功能来检查 PCB 焊接有没有虚焊、短路。
4.4 JTAG 在固件调试中的应用
JTAG 在固件调试中的用途,远不止测试 PCB 焊接。我个人觉得,它最强大的功能是实时控制芯片内部状态。
具体来说,有这几个典型场景:
- 固件下载与烧录:通过 JTAG 把固件二进制写入芯片的 Flash 或 SRAM 中。我习惯用 OpenOCD 配合 J-Link 调试器,命令行操作,效率很高。
- 断点调试:设置硬件断点,让 CPU 在指定地址停下来,然后查看寄存器、内存的值。这个在调试 Retimer 的初始化流程时特别有用。
- 寄存器读写:通过 JTAG 直接读写芯片内部的寄存器,不需要固件运行。我曾经用这个功能在芯片刚上电时,手动配置了几个关键寄存器,验证了硬件设计的正确性。
- 性能分析:通过 JTAG 读取程序计数器(PC)的采样值,分析固件的执行热点。
最后,我画了一张图来总结 JTAG 调试接口的核心知识体系:
好了,关于 JTAG 调试接口的核心内容就聊到这里。记住一句话:JTAG 不只是用来下载程序的,它是你深入芯片内部、定位疑难杂症的最强工具。下次遇到 Retimer 芯片不工作,别急着怀疑固件,先用 JTAG 看看芯片的状态再说。