yaboPP电子
技术文章

在Arm核心设备中的JTAG实现

2020年12月14日通过Sam Gallagher.

本文将教您JTAG和ARM核心设备之间的交叉点,特别注意ARM调试接口或ADI。

在我们关于JTAG的系列文章中,我们研究了IEEE 1149.1标准,包括测试访问端口(TAP)控制器和利用状态机。然后我们审查了不同的可用于使用JTAG的物理接口,包括常见的连接器引脚,以及市场上可用的JTAG接口和调试探针。

在本文中,我们将从JTAG标准稍微略微偏离,而是查看JTAG如何在普遍存在的ARM核心设备中实现。

手臂是什么?

Arm是指一种处理器架构,以及大量与微处理器和微控制器接口相关的知识产权。消费者个人电脑倾向于用在哪里X86衍生的处理器或PowerPC或MIPS,嵌入式电子产品通常使用ARM核心处理yabosports官网器实现。

处理器的“核心”被分发给ST微电子或恩智浦等制造商,然后这些制造商再添加额外的外围功能,如yabosports官网I2CSPI界面,ADCS.DACS.,USB接口等等。

ARM架构版是ARMV的示例,示例是ARMv2(从1987年的约会),ARMv6(2002-2005的处理器)等,以及利用这些架构的处理器内核作为ARMX系列(ARM1,ARM6,ARM7)品牌标记为ARMX系列(ARM1,ARM6,ARM7)和最近作为ARM Cortex-A / R / M系列,用于高性能(Cortex-A),实时(Cortex-R)和微控制器(Cortex-M)应用程序。架构版本控制遵循Cortex后缀命名,成为ARMV6-M,ARMV7-R,ARMV7-A等版本。

ARM的调试界面落在ARM Coresight架构的名称下;这包括调试接口(ARM调试接口,ADI),嵌入式跟踪宏单元(ETM),高速串行跟踪端口(HSSTP)和Coresight程序流程跟踪架构。ADI形成用于使用ARM核心处理器调试操作的基础,并且本标准的一部分包括JTAG接口以及串行电线调试(SWD)替代方案。本文的主题是ADI,特别是硬件接口层。

ARM调试界面(ADI)简介

Arm调试接口(ADI)是一个用于在主机和一个或多个设备之间进行调试的硬件接口和逻辑接口的规范。目前,大多数处理器都在实现adve5(在Arm IHI0031E中指定),而较新的adve6(参见Arm IHI0074C)正在缓慢地逐步引入。因为adve5更受欢迎,我们将在这里集中讨论adve5标准。

ADI定义了一个调试访问端口DAP (debug access port),由DP (debug port)和APs (access ports)组成。DAP是调试接口的主要“单元”。一个给定的设备将有一个调试端口,它处理与调试器的物理连接,以及许多访问端口,提供对系统资源的访问,如调试寄存器、跟踪端口寄存器、ROM表或系统内存。因此,DP包括物理连接(JTAG、SWD)以及一些内置寄存器,每个AP都有自己与系统的连接,以及一些自己的寄存器。

在adve5中,有两种类型的调试端口,以及(广义地说)三种类型的访问端口。DPs可以是JTAG-DPs,也可以是SWD-DPs,以设备外部连接DAP时使用的接口命名。ap可以是MEM-APs,通过寻址(类似于内存映射,因此有了这个名字)提供对资源的访问,JTAG-APs,允许JTAG扫描链连接到整个调试单元(DAP),以及特定于供应商的ap,它们不是由Arm指定的。到目前为止,mems - aps是最常见和最有用的,因此我们在这里不讨论其他类型。

在JTAG的上下文中,我们希望调试接口能够提供JTAG指令代码,以及供应商特定的JTAG特性。事实上,ADIv5标准提供了以下说明:

  • EXTEST(0B000000)
  • 样本(0 b00000001)
  • 预加载(0 b00000010)
  • intest(0b00000100)
  • 夹(0 b00000101)
  • HIGHZ(0B00000110)
  • 中止(0b11111000)
  • DPACC(0B11111010)
  • APACC(0B11111011)
  • IDCODE (0 b11111110)
  • 旁路(0b11111111)

同样,JTAG数据寄存器包括:

  • 中止(35位),注册以强制访问端口中止
  • DPACC(35位),调试端口读/写访问寄存器
  • APACC(35位),访问端口读/写访问寄存器
  • IDCODE(32位)
  • 旁路(1位)

这里应该突出的是指令DPACC和APACC以及相关的数据寄存器。DPACC(调试端口访问)和APACC(访问端口访问)是指令/寄存器,用于将命令传递给关联的DP和ap设备。通过在DPACC或APACC数据寄存器中设置不同的值,调试器可以执行不同的操作,通常与DP和APs本身的寄存器交互。注意这些DPACC和APACC寄存器(JTAG寄存器)与DPs和APs中内置的寄存器之间的区别。

调试器使用的通用方法是JTAG或门限接口执行指令通过利用状态机,然后指令把数据加载到DP或AP,和根据数据,不同的寄存器在DP或美联社访问,系统提供所需的链接。

那么,DP和AP寄存器是什么?可用的DP寄存器包括:

  • CTRL/STAT用于控制和获取DP的状态信息
  • 数据链路控制寄存器,控制数据链路的工作方式
  • DLPIDR,数据链路协议识别寄存器,协议版本信息
  • DPIDR,调试端口识别寄存器,调试端口信息
  • 事件状态寄存器,由系统用于向外部调试器发送事件信号
  • RDBUFF,读取缓冲区寄存器,提供读取操作;依赖于DP (JTAG或社署)
  • 选择AP选择寄存器,选择访问端口和具有该AP的活动寄存器库;选择DP地址银行
  • TARGETID,主机连接到单个设备时的目标器信息

而mems - ap寄存器为:

  • 控制/状态字寄存器(CSW,0x00),保存控制和状态信息
  • 传输地址寄存器(tar,0x04),保存下次访问内存系统或系统资源的地址
  • 数据读/写寄存器(DRW,0x0c),设置读数中的读取或写入焦油 - 如果读取DRW,则将访问设置为读取;如果您写入DRW,则可以将访问设置为写入
  • 银行数据寄存器(BD0到BD3, 0x10, 0x14, 0x18, 0x1C)提供对4个32位内存块的直接读或写访问,从TAR中的地址开始
  • 配置寄存器(CFG, 0xF4), MEM-AP配置信息
  • Base Base Address寄存器(Base, 0xF8),指向内存系统的指针,可以是一组调试寄存器的开始,也可以是ROM表的开始
  • 识别寄存器(ID​​R,0xFC),标识MEM-AP。

这些连接如图1所示。

图1所示。ARM调试接口图,总结连接。注意:并非所有寄存器都显示为DPS和AP。

可以在规范IHI 0031E中找到DP / AP寄存器和存储器映射的详细信息。我想专注于其他类型的调试端口,SWD-DP以及它如何使用两根电线实现JTAG的详细信息。

串口线调试(SWD)

虽然JTAG- dp是一个常见且熟悉的调试接口示例,但与我们讨论最相关的是为Arm设备定义的JTAG替代,Arm串行线调试(SWD)。SWD是作为一个两线接口开发的arm核心设备与有限的引脚计数。由于微控制器的外围设备往往非常密集,大多数Cortex-M设备将实现SWD来取代完整的JTAG,以节省pin面积。那么这个协议是如何工作的呢?

SWD在ADIV5规范中指定(B4章)。来自JTAG的TDI和TDO引脚由称为SWDIO的单个双向引脚代替;测试模式选择(TMS)引脚完全除去;并且时钟(TCK)保持相同(重新标记的CLK或SWCLK)。因此,与JTAG中使用的四个引脚相比,SWD仅使用两个引脚。为了做出这项工作,SWD依赖于JTAG操作的重复性质:操纵状态机,数据移入或输出,并重复该过程。与SWD的差异是没有状态机。相反,命令通过SWDIO串行发布,然后使用该引脚用于读取或写入数据。

SWD通信有三个阶段:包请求、确认和数据传输。在包请求期间,主机平台向DP发出一个请求,这个请求之后必须有一个确认响应。如果包请求是一个数据读或数据写请求,并且有一个有效的确认,系统进入数据传输阶段,数据通过SWDIO被计时(写)或计时(读)。在数据传输之后,主机负责启动包请求,或者用空闲周期驱动SWD接口(以SWDIO低时钟)。奇偶校验应用于包请求和数据传输阶段。

通过看到图2所示的时序图,最好地理解SWD的细节。

图2。显示串行线调试读写操作的时序图。(点击放大]

读取和写入操作都开始相同,从主机驱动SWDIO线到起始位,这是一个高信号。其次是配置,包括AP或DP访问位(APNDP),读取或写入位(RNW),地址(A [2:3]),奇偶校验位(PAR)和停止位(一个低信号),遵循最终由公园位,这是主机驱动在线路进入周转之前的线路。在转变期间,允许目标和主机均驾驶该行。

根据RnW的值,选择一个读或写操作。如果写入,目标提供一个3位的ACK信号,然后有另一个周转周期,随后是要写入的32位数据(WDATA)和一个奇偶位。如果读取,目标提供一个ACK,然后继续驱动带有32位读取数据(RDATA)的线路,后面跟着一个奇偶位。如果发生了错误,ACK位将指示错误,主机可以尝试重新启动操作。注意,WDATA和RDATA首先传输的是最低有效位(LSb),在图2中通过写入WDATA[0:31]而不是WDATA[31:0]来表示。

Arm IHI0031E文档提供了进一步的计时图来阐明通信中的各种情况,但上面是主要的用例。值得注意的是(截至撰写本文时)社署有两个版本;SWDv1只支持主机和目标(点对点)之间的一个连接,而SWDv2实现了单主机多目标通信(multidrop)。版本2几乎向后兼容版本1,除了一些边缘情况。

JTAG的其他变体

SWD不是唯一的双线型JTAG IEEE 1149.1标准。值得注意的是,IEEE 1149.7标准提供了一个减少引脚计数(2线)的JTAG接口。其他1149人。x标准,例如IEEE 1149.4混合信号测试总线标准, 和IEEE 1149.6(高级数字网络的边界扫描标准)已在过去二十年中开发,并为更多涉及的应用提供额外的功能。这包括模拟边界扫描测试,以及差分和交流耦合线的改进功能。

IEEE标准协会网站提供最多最新标准。

结论

我们对JTAG和SWD的报道到此结束。在本系列中,我们了解了JTAG的来源、工作方式以及如何使用它调试和编写设备。我们已经研究了JTAG的物理连接,包括可用的连接器和接口,包括商业的和开源的。最后,我们概述了流行的Arm处理器核心技术的JTAG实现,包括SWD两线接口。

从这里,我们可以出去并自信地使用我们嵌入式设备的调试和编程功能,学习不同实现的详细信息,并充分利用我们的时间。