您的位置  > 互联网

边界扫描被广泛用作观察集成电路内部子模块的调试方法

JTAG

JTAG 这个名称源自该标准的制定者联合测试组 (Joint Test Group) 的缩写。 相关标准被标准化为 IEEE Std。 1990年1149.1-1990(该标准的全称是Test Port and -Scan(测试访问端口和边界扫描架构))。

JTAG 是来自主要制造商的工程师团队的一个奇特名称,他们坐在一起提出了我们现在称为 JTAG 的标准。

边界扫描

JTAG 最初是作为一种使用边界扫描技术测试印刷电路板或集成电路内子模块上的互连(电线)的方法而开发的。 边界扫描被广泛用作一种调试方法,用于观察集成电路引脚的状态、测量电压或分析集成电路的内部子模块。 电路板上的许多芯片都可以通过菊花链将其 JTAG 引脚连接在一起。

边界扫描(-Scan)技术的基本思想是在靠近芯片的输入/输出引脚上增加一个移位寄存器单元,即边界扫描寄存器(-Scan)。 当芯片处于调试状态时,边界扫描寄存器可以隔离芯片和外设的输入/输出。 通过边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。

如今,越来越多的器件采用BGA(球栅阵列)封装。 板上的每个 BGA 器件都对使用传统钉床或飞针机可以完成的测试施加了严格的限制。 JTAG 为球栅阵列 (BGA) 芯片的生产测试提供了一种简单的方法。 因此,边界扫描也被认为是JTAG的同义词。

调试

JTAG 的成立主要是为了帮助电子设备的生产和测试,而不是真正为软件调试设定标准! 但随着时间的推移,芯片厂商发现将JTAG集成到芯片中可以辅助芯片软件调试! 如今,JTAG 被用作访问集成电路子模块的主要手段,使其成为调试嵌入式系统的重要机制。

详细的调试协议(定义如何通过JTAG接口读取边界扫描寄存器)由架构制造商定义。 例如ARM在《ARM® Debug v5》规范中对DP给出了详细的介绍; RISC-V在《RISC-V Debug》DMI中详细介绍了DMI。

固件烧录

JTAG允许器件编程器硬件将数据传输到内部非易失性器件存储器(例如CPLD、闪存)。 目前,所有的FPGA和CPLD,包括我们常用的SoC和MCU,都使用JTAG来提供对其编程功能的访问。

需要注意的是,固件烧录根据存储介质可以分为RAM烧录和ROM烧录。 其中,RAM烧录可以直接写入,而ROM烧录则需要特定的烧录算法(通常是(例如Keil))。 首先将烧录算法写入RAM,然后在RAM中运行程序。 调试器与RAM中的通信以实现烧录)。

轻敲

最初的JTAG标准IEEE 1149.1定义了5个引脚,统称为测试端口(TAP)。 JTAG本身没有固定电压,它由目标板和目标芯片的IO供电电压决定。 必须保证JTAG信号线的电压与所连接芯片的电压相同。

TCK:测试时钟,内部有弱下拉电阻。 TCK为TAP的操作提供独立的基本时钟信号。 TAP的所有操作均由该时钟信号驱动。 TMS:测试模式,带内部弱上拉电阻。 TMS信号用于控制TAP状态机的转换,在TCK的上升沿有效。 通过TMS信号,可以控制TAP在不同状态之间进行转换。 TDI:测试数据输入,带内部弱上拉电阻。 TDI是数据输入的接口。 所有要输入到特定寄存器的数据都是通过TDI接口(由TCK驱动)逐位串行输入的。 TDO:测试数据输出。 TDO是数据输出的接口。 所有从特定寄存器输出的数据都通过TDO接口(由TCK驱动)逐位串行输出。 TRST:测试复位(),带内部弱上拉电阻。 TRST 可用于重置(初始化)TAP。 由于TRST是可选的,所以有四线JTAG和五线JTAG。

IEEE-1149.7标准定义的JTAG(cJTAG)减少了引脚数量,仅定义了2个引脚,可以采用星形拓扑连接:

TMSC:测试:测试时钟

以上只是信号线,另外可能还有一些其他引脚

VTREF:接口信号电平参考电压,一般直接接。 这可用于确定 JTAG 接口使用的逻辑电平! 我们常用的J-Link、ULINK等都可以采用5V电压供电,然后它们内部可以转换输出1.8V~5V直接给芯片供电。 复位(nSRST):可选,连接目标板上的系统复位信号,可以直接复位目标系统。 同时可以检测目标系统的复位情况。 为了防止误触发,应在目标端添加适当的上拉电阻。 测试时钟(RTCK):可选,目标端反馈给仿真器的时钟信号用于同步TCK信号的产生。 不使用时直接接地。

JTAG 标准没有定义每个 TAP 引脚的布局。 我们常见的调试器接口有20个引脚(源自ARM给出的接口定义,详细见下文),多余的引脚是一些电源、地等的布局,基本如下图所示:

轻敲

TAP 负责解释 TCK 和 TMS 信号并控制 JTAG 接口的行为。 数据输入引脚(TDI)用于将数据加载到物理引脚和IC内核之间的边界单元中,并将数据加载到指令寄存器或数据寄存器之一中。 数据输出引脚(TDO)用于从边界单元、或者从指令或数据寄存器读取数据。

TAP的主体是一个有限状态机(FSM,State),有16个状态。 其状态转换过程由TMS信号控制,TMS信号由TCK驱动。 TAP 控制器只能在 TCK 的上升沿改变状态。 FSM下一步跳转到的状态(next state)由TMS的电平和FSM的当前状态决定。

状态机只有两条“路径”,代表两种不同的模式:指令模式和数据模式。

数据寄存器(DR)路径:上图中绿色所示,用于加载指令 指令寄存器(IR)路径:上图中蓝色所示,用于读取/读取数据寄存器(包括边界扫描寄存器( BSR)) 获取/写入数据,

IEEE 1149.1 标准定义了一组必须可用的指令才能使设备被视为合规。 这些指令是(有关每种状态的更多详细信息,请参阅 IEEE 1149.1 标准 JTAG 文档):

:该指令通过单位直通寄存器(寄存器)连接TDI和TDO线。 该指令允许测试 JTAG 链中的其他设备,而无需任何不必要的开销。 :该指令将 TDI 和 TDO 连接到边界扫描寄存器(BSR)。 通过dr JTAG状态采样设备的引脚状态,通过shift dr状态将新值移入BSR; 然后使用 dr 状态将这些值应用于器件的引脚。 /:该命令将 TDI 和 TDO 连接到 BSR。 然而,设备仍处于正常功能模式。 在此指令期间,可以通过数据扫描操作访问 BSR,以采样进入和离开器件的功能数据。 该指令还用于在加载指令之前将测试数据预加载到 BSR 中。

其他常见指令包括:

:该指令将TDI和TDO连接到寄存器。 :该指令将 TDI 和 TDO 线连接到边界扫描寄存器 (BSR)。 指令允许用户设置和读取引脚状态,并且与器件的核心逻辑信号相关。 社署

SWD(Wire Debug)是ARM设计的用于对系列微控制器进行编程和调试的协议。 由于 SWD 是为编程和调试而设计的,因此它具有许多其他地方通常不具备的特殊功能,例如通过 IO 线向计算机发送调试信息。

建筑学

与将 TAP 连接在一起的 JTAG 不同,SWD 使用称为 DAP(调试端口)的总线。 在这个DAP上,有一个主站(DP,Debug Port,调试端口)和一个或多个从站(AP,Port,访问端口),类似于JTAG TAP。 DP通过包含AP地址的数据包与AP进行通信。

调试端口

调试端口是主机和DAP 之间的接口。 它还处理主机接口。 可以使用三种不同的调试端口来访问 DAP:

JTAG 调试端口 (JTAG-DP):该端口使用标准 JTAG 接口和协议来访问 DAP。 串行线调试端口 (SW-DP):该端口使用 SWD 协议访问 DAP。 串行线/JTAG 调试端口 (SWJ-DP):此端口提供使用 JTAG 或 SWD 对 DAP 的访问。 这是许多微控制器上的通用接口。 它复用JTAG的TMS和TCK信号,分别传输SWDIO和信号。 必须发送特定序列才能从一个接口切换到另一个接口。访问端口

可以根据需要将多个 AP 添加到 DAP。 ARM提供了两种AP规范:

内存访问端口 (MEM-AP):该 AP 提供对核心内存和寄存器的访问。 JTAG 访问端口 (JTAG-AP):此 AP 允许将 JTAG 链连接到 DAP.debug

SWD仅用于调试(跟踪),因此比JTAG简单得多。 详细的调试协议在《ARM® Debug v5》的The Wire Debug Port (SW-DP)一章中介绍。

固件烧录

固件烧录的实现方法和JTAG中的一样,都是SWD协议。 这里我就不详细说了!

别针

SWD协议定义了2个引脚,在架构上支持星形拓扑。 SWD本身没有固定电压,由目标板和目标芯片的IO供电电压决定。 必须保证JTAG信号线与所连接的芯片电压相同。 :

SWDIO:有线数据输入。 主机发送的时钟信号。 由于处理器时钟和SWD时钟之间没有关系,因此频率选择由主机接口决定。 SWCLK:线时钟。 这是一个双向信号,包含来自/发往 DP 的数据。 数据由主机在信号的上升沿期间设置,并由 DP 在信号的下降沿期间采样。

SWD实际上只是ARM处理器JTAG的修改/实现。 ARM在其系统和接口设计参考文档中提供了通用的接口布局,这已成为事实上的标准。 通常它将JTAG的TMS和TCK信号复用,分别传输SWDIO和信号,允许用户使用JTAG或SWD。

除了调试信号外,ARM的SWD接口还指定了专用引脚,允许目标CPU通过UART或协议在专用引脚上输出特定数据。 该引脚称为 SWO。 并非所有支持 SWD 的 ARM 架构都支持 SWO。

参考