用于低级嵌入式系统访问的LibSWD串行线调试框架外文翻译资料

 2021-11-25 10:11

英语原文共 6 页

用于低级嵌入式系统访问的LibSWD串行线

调试框架

摘要

现代微电子已经在嵌入式系统中取得了很好的成绩,这些系统在家庭娱乐,电信,医疗设备,各种工业中有了广泛应用,甚至在军事和航空航天系统领域起重要作用。这些系统的复杂性越来越高,需要新的工具来开发,测试和安全分析。 因此做一项持续的工作,从头开始创建一个免费和开放的低级访问框架(在线仿真和片上调试)到基于ARM-Cortex [7]的设备,这些设备使用新的SWD总线(JTAG替代)。 LibSWD [1]是一个获得BSD许可的软件库,它被集成到众所周知的开源应用程序中,如UrJTAG [11]和OpenOCD [12]

简述

A.软件和硬件

现代嵌入式系统是最先进的硬件和软件的混合体。硬件(电子组件)使软件(计算机程序)可以运行,但另一方面,它是在操作系统的帮助下使硬件智能化,能够通信并和用户友好交互的软件。在设备达到最终产品状态之前,它需要克服设计,开发和测试的漫长而艰难的道路,利用难以想象的资源和成千上万的工作思维。只有极少数人真正知道创建使操作系统(高级组件)正常运行的基本组件有多么困难和重要(引导加载程序,驱动程序,编译器,链接器以及更多低级服务),这些服务在世界之间创建了一个连接软硬件的虚拟桥梁。图1显示了现代微控制器的一个简单芯片中包含多少种不同的外设。

B.底层访问

系统的硬件和物理部分通常被称为底层,因为它们使逻辑和软件结构(所谓的高级功能)的操作成为可能。另一方面,仍然可以访问.底层系统资源。使用特殊的物理接口连接,即使软件尚未运行(即没有引导加载程序和操作系统),从硬件角度测试软件组件(即调试引导加载程序或操作系统组件),或者只是测试硬件本身。

C.标准

JTAG是各种微控制器架构内部(如CPU,外设和存储器)的低级访问方法的最著名标准(IEEE1149.1 [3]),可以在硬件级别完全控制目标系统。对于开发人员,测试人员和安全研究人员而言,这是非常重要的功能,可以无限制地访问

图2 JTAG TAP / DAP状态机[6]

图1 ARM Cortex CPU在STM32单片机中的框图[9]

系统中的每个信息。但由于JTAG存在一些局限性,ARM公司[4]引入了称为串行线调试(SWD)的替代解决方案,并在其新的ARM Cortex器件系列中实现。

本文介绍了使用LibSWD软件库进入现代微处理器系统的底层访问,该软件库以平台独立,自由和开源方式实现串行线调试传输。

II.JTAG

A.什么是JTAG

如前一节所述,JTAG是众所周知的访问微处理器系统内部的底层访问机制。 IEEE1149.1 [3]标准定义了一个有限状态机(见图2),它定义了对测试访问端口/调试访问端口寄存器(指令和数据寄存器)的访问,以便访问系统内部,如CPU,外设,存储器,调试单元等

但是,特殊寄存器和访问端口本身的内部组织是依赖于目标的,并且在不同的CPU体系结构中有所不同。 ARM设计的微处理器使用ARM调试接口标准[5](本文稍后介绍),MIPS设计的微处理器使用EJTAG标准[8],其他设备可能会使用自己的内部组织。这使得事情变得复杂并且需要目标的特定软件实现,而物理接口和访问方法对于所有JTAG感知设备仍然是通用的

B.信号

JTAG测试访问端口需要以下电信号才能运行:

bull;TDI(测试数据输入),为扫描链提供输入电流。

bull;TDO(测试数据输出),提供扫描链的输出电流。

bull;TCK(Test ClocK),为目标系统提供同步时钟源。

bull;TMS(测试模式选择),提供目标系统的操作模式选择,对于正确的状态机操作至关重要。

bull;TRST(Test ReSeT),可以重置目标访问端口。

bull;GND(接地),提供零电位的电压参考点。

bull;VCC(电压电源),为接口输入缓冲器和电压电平转换器提供参考电压。

bull;SRST(系统ReSeT),可以重置整个目标系统(对于开发和远程管理很有用)。

C.实践

对于某些系统,TRST信号可以省略,只使用TMS和TCK引脚才能实现等效功能,SRST有时也可以使用目标内部来激活。因此,JTAG连接工作至少需要六个信号(TRST和SRST可以省略),并且这些信号在系统PCB上的某处作为一组测试点或甚至是专用连接器具有相应的引脚。

在未知电路板上查找JTAG连接器是一个非常复杂的问题(对于单独的出版物而言足够大),并且通常这需要从目标CPU / SoC的技术/服务规范或甚至硬件逆向工程技术获得的知识。

访问所提到的信号也给目标系统带来了一些安全风险,因此通常通过在整个PCB上扩展测试点来禁用或至少隐藏测试访问端口功能块。

如图3所示,JTAG感知设备可以一个接一个地串联在一起,其中链的输入(TDI)是第一个设备的输入,第一个设备的输出是第二个设备的输入,最后一个设备的输入设备输出是链输出(TDO)。在这种情况下,TCK,TMS和TRST控制信号对于所有设备是通用的,只需要一个接口来访问所有链元件,一次只能有一个设备处于活动状态。不幸的是,整个链条与其最慢的组件一样快,一个组件的故障打破了整个链条。

图3 JTAG扫描链[10]

III.调试访问港口

A.什么是DAP

尽管串行线调试(SWD)在某种程度上替代了对ARM Cortex器件进行底层访问的JTAG方法,但JTAG和SWD都存在于向从调试访问端口(DAP)传输命令。调试访问端口是一个专用的硅片上器件,用作调试主机(软件 接口)和微处理器内部(存储器、外设、调试单元等)之间的网关。

要了解基于ARM微处理器的嵌入式系统中底层访问的工作原理,了解调试访问端口(DAP)的工作原理至关重要,请阅读“ARM调试接口”规范[5]以获取详细信息。

DAP远比带有命令行界面(CLI)实现的Bootloader或操作系统串行端口控制台复杂,因为它适用于不在软件域中的硬件寄存器传输级别。其目的是使用访问端口(AP)作为其接口来访问专用的片上功能块。读取和写入选定的AP寄存器会触发可能导致存储器访问(使用MEM-AP时),通用总线访问(AHB-AP),调试功能等的操作。

并非所有内部外围设备都具有相应的访问端口,因此只能通过DAP从外部访问硬件中实现的AP功能。

B.架构

图4显示了调试访问端口的内部架构。调试端口接口(也称为JTAG术语中的测试访问端口)是物理信令连接器.DAP内部接口将DAP连接到多个访问端口(在本例中为AHB-AP)。

图4 ARM Cortex调试访问端口组织[6]

C.功能

根据硬件功能,从调试器的角度来看,DAP可以支持JTAG传输(使用JTAG-DP),SWD传输(使用SW-DP)或两者。负责解码传输比特流的块称为串行线和JTAG调试端口(SWJ-DP),它包含SW-DP和JTAG-DP。读取,写入和错误处理操作的方法对于JTAG和SWD略有不同,但通常它们访问相同的DAP寄存器。

DAP寄存器可以读/写访问端口,以便对选定的片上子系统执行操作。因此,DAP只是调试器主机/软件和目标片上子系统之间的网关,它可以存储读/写结果,错误代码,AP地址并最终中止它们的操作,但是没有目标AP的DAP是没有用的。

D.注册

调试访问端口包含以下寄存器:

bull;IDCODE - 识别码寄存器,包含唯一的32位识别码流,其中包含符合JEDEC标准的制造商代码,设备和版本代码。

bull;ABORT - 中止寄存器用于中止正在进行或停止的操作,也用于清除SW-DP上的错误标志。

bull;CTRL / STAT - 控制/状态寄存器包含有关DAP状态的所有重要信息,还允许控制DAP功能。

bull;SELECT - AP选择寄存器功能用于选择要访问的访问端口地址和所选AP内的寄存器组。

bull;RDBUFF - 读取缓冲区在JTAG-DP(用于启动读取操作)和SW-DP(用于返回最后一个AP读取结果)中具有不同含义,因为在AP中读取数据寄存器会启动读取并在默认情况下生成WAIT状态,但是顺序从RDBUFF读取将给出不可预测的结果!

bull;WCR - 线控制寄存器与CTRL / STAT具有相同的地址,但当SELECT位0设置为1时,它被访问。其目的是控制物理SWD总线参数。

bull;RESEND - Read Resend Register仅在SW-DP上可用,其目的是在不重复AP传输的情况下从损坏的传输中恢复读取数据。

IV.串行线调试

A.什么是SWD

如前面部分所述,串行线调试(SWD)是JTAG传输方法的替代方法,用于在ARM Cortex器件中对片上调试访问端口(DAP)和外设特定访问端口(AP)执行操作。要了解其软件实施的复杂性,首先要了解SWD基础知识。它是基于打包的半双工串行协议,其中每个传输都由调试器主机初始化和控制。

图5显示了示例成功的读写操作图(这些不是精确的时序图!),它可以很好地可视化SWD数据包元素:

bull;REQUEST - 定义访问类型(读,写)和位置(AP / DP寄存器地址)。它

图5 成功的读写SWD操作[6]

还包含奇偶校验控制位以避免协议错误。

bull;TRN - 周转时间为接口缓冲区提供了从读取到写入切换总线方向的时间。可以使用WCR DP寄存器设置时钟周期中的TRN长度。

bull;ACK - 返回目标响应状态 - 可以是OK,WAIT(重试传输),FAULT(发生不可恢复的错误时),或者协议错误序列发生时没有响应(目标断电,目标不理解请求,等等)。

bull;DATA - 保存32位数据有效负载。

bull;PARITY - 偶数奇偶校验位来控制DATA完整性。

B.信号

图6更详细地介绍了SWJ-DP信号。 JTAG和SWD使用相同的信号/端口引脚 - JTAG TMS是SWD SWDIOTMS,TCK是SWCLKTCK。 SWD仅使用两个信号引脚,而不是JTAG使用的五个信号引脚。要激活SW-DP或JTAG-DP,应在TMS信号上应用特殊的16位序列,但出于向后兼容的原因,默认情况下JTAG-DP处于活动状态。因此,可以使用一个串行线和JTAG接口来访问支持SWJ的设备,这是一种优雅的解决方案。

图6 成功的读写SWD操作[6]

V. LIBSWD

A.什么是LibSWD

LibSWD是世界上第一个基于平台和硬件的独立开源框架,用于处理串行线调试端口,符合ADI(Arm Debug Interface,5.0版本)规范[5]。它是根据3条款BSD许可证发布的,并记录在Doxygen中。欲了解更多信息,请访问项目网站http://libswd.sf.net。

B.它能做什么

串行线调试是JTAG(IEEE1149.1)传输层的替代方案,用于访问基于ARM Cortex的设备中的调试访问端口。 LibSWD提供了访问目标上的调试访问端口和各种访问端口寄存器的方法。

从程序员和用户的角度来看,它就像调用swd_dap_detect()和swd_ {dp,ap} _ {read,write}函数一样简单进行目标硬件上的低级操作。 LibSWD使用简单但灵活的API处理线路上的比特流生成,该API可以重用现有应用程序的功能,以便更容易地集成,特别是现有的接口驱动程序代码。

每个总线操作(例如控制,请求,周转,确认,数据和奇偶校验数据包)都被命名为由swd_cmd_t数据类型表示的“命令”,该数据类型构建队列,以后可以使用标准集(特定于应用程序)将其刷新到真实硬件中。这样,LibSWD几乎是独立的,可以很容易地集成到现有实用程序中以进行底层访问,并且只需要定义驱动程序桥来控制物理接口互连主机和目标。

驱动程序和其他特定于应用程序的函数是extern类型,位于为该应用程序及其硬件制作的外部文件中。图7显示了LibSWD如何轻松地集成到现有的低级访问应用程序中。

lt;

原文和译文剩余内容已隐藏,您需要先支付 20元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。