ARM CoreSight调试与追踪体系在Cortex M3内核中的实现
扫描二维码
随时随地手机看文章
引言
在芯片制造技术飞速发展的今天,高速、高集成度、低功耗的极致追求给芯片设计人员提出了一个又一个挑战,而在这样的片上系统中调试与追踪内核状态更是芯片调试技术的一个难题。为了解决非侵入式、实时调试等多类问题,ARM引入了全新的ARMCoreSight调试体系结构。CoreSight是ARM公司于2003年开发的、综合而全面的调试与跟踪架构。部分ARM9与ARM11内核采用早期版本的CoreSight,不过现在大范围推广的Cortex系列处理器已完全采用新版的调试体系并充分证明了它的优势。CoreSight包括众多组件,每一种都能协助外部主机以极高的效率了解芯片的实时运行情况。芯片中内嵌的特定组件和为系统设计人员提供的调试工具使开发人员可以友好的使用CoreSight构架调试和跟踪片上系统,而不用再通过直接设置寄存器、遵循特定协议和处理电平信号来使用。
为了扩大成本和功耗敏感的MCU和终端应用(如智能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械)市场,ARM公司针对这类混合信号设备进行了优化,贯彻了新一代的CoreSight调试构架,推出了新一代CortexM系列微控制器。而意法半导体公司(ST)推出的STM32、德州仪器公司(TI)推出的Stellaris,都是一种ARMCortexM3内核的实现。32位RISC处理器、低功耗、高性能模拟技术、高速DMA通道、丰富的外设和新一代的调试体系,都赋予了其不俗的表现。
然而,新一代调试构架定义的多种功能对不熟悉新调试机制的开发者来说略嫌繁琐,特别是传统JTAG调试和新一代的SerialWireDebug(SWD)调试二合一的调试接口使不少开发者无法理清头绪。因此本文将从整体上分析ARMCoreSight调试构架和ARMDebugInterfaceArchitecture(ADI),并通过对比ST和TI推出的芯片来明确新调试体系的实现方式,为开发者扫清调试障碍。
1ARMCoreSight调试构架
ARM新一代CoreSight调试构架提供了微处理器所需全部的调试与追踪功能。片上程序流可通过丰富的硬件执行断点与高级观察点、矢量捕获和元数据跟踪功能进行监控,甚至在启用全部中断时也得到监控。在处理器运行的同时也能读写寄存器与存储器中的数据,并能对片上资源的使用进行验证。代码描述可确定处理器在一定时间内的工作情况,从而明确处理器何时会在无限循环中中止,或在何处全力加速程序执行。此外,我们通过新的调试构架还能看出哪些代码从不执行,从而释放出宝贵的片上资源。程序员可确认脉宽调制器是否能满足要求,另外还可检查堆栈是否存在潜在问题,进而确定意外情况的反馈以及状态、条件码和分支的有效性。
ARM新一代调试构架提供了对多种调试方式的支持。经典的JTAG调试方式经过多年、大范围的应用,已经具有了成熟、规范、通行等优点。然而,现在的MCU对于速度和封装的要求已经越来越高,传统的4线(5线可选)JTAG协议已经不能满足对芯片封装尺寸的严格要求和对引脚需求的严格控制。在这种需求下,ARM在新一代调试体系中引入了旨在替代旧式JTAG调试方式的SerialWireDebug(SWD)调试方式,它很好地改良了ARM体系结构下的产品调试机制。
ARMCoreSight构架中的组件是通过存储器映射机制访问它们自身的控制寄存器(例如AMBA3APB接口),而不通过传统的JTAG访问其组件资源。ARM选择这样的实现方式有很多种原因,例如:传统JTAG方式的时钟信号TCK必须工作在所有调试组件共有的最低频率,这极大限制了调试的速度(也许还将面对休眠态、工作在低频率状态的片上组件);传统的同步JTAG接口在一个设备掉电时会导致整个调试链的终止等。
ARMCoreSightarchitecture包含三类子构架:
Visiblecomponentarchitecture:规定了所有组件所必须遵守的、共有的编程者模型(软件接口)。规定了对组件可用的拓扑探访结构;
Reusablecomponentarchitecture:规定了调试体系的物理接口;
Systemarchitecture:规定了系统级需要的时钟、控制信息、ROM表、追踪信息格式等。
在ARMCoreSight构架基础上,ARM指定了具体的调据被链接调试资源类型的不同,ADI定义了两类AP的实现:MEM-AP和JTAG-AP。MEM-AP用来链接到存储器映射(Memorymapped)类型的资源,而JTAG-AP主要用来链接到经典的IEEE1149.1JTAG设备上。我们常用的是MEM-AP类型,通过对ARM存储器映射机制下的系统资源的访问,我们可以调试几乎所有的片上资源。而当我们使用IEEE1149.1JTAG调试设备做扫描边界测试时,我们需要用到JTAG-AP实现。
3基于CortexM3内核调试的MCU实现
首先,我们先对比两个具体的实现方案。其一是意法半导体公司的STM32MCU,而另一个则为德州仪器公司的Stellaris。
图2所示为STM32的调试体系构架。
试接口规范,旨在统一所有采用CoreSight调试体系的片上系统。
2ARM调试接口规范
采用ARM设计IP的芯片厂商在设计调试支持的时候,都必须要遵守ARMDebugInterfaceArchitectureSpecification(ARM调试接口体系结构规范,ADI)。ARM调试接口规范为嵌入式片上系统
(SoC)中的调试组件定义了标准调试接口,其功能逻辑框图如图1所示。
ADI中定义了一"由DebugPort(DP)和AccessPort(AP)组成的调试访问接口DebugAccessPort(DAP),外部的调试设备统一由DAP来链接被调试的片上系统资源。
ADI中定义了一个单一的外部调试设备物理连接接口:DebugPort(DP)。ADI允许三种不同的DP实现:JTAG-DP,SWD-DP,SWJ-DP。其中JTAG-DP即为经典的JTAG调试机制物理接口,而SWD-DP则是ARM新引入的两引脚串行线调试结构。SWJ-DP则为JTAG/SWD二合一接口。
同时,ADI还定义了访问接口:AccessPort(AP)。AP为DAP与被调试资源的链接提供了接口。AP通过资源特定的连接方式(例如一个debugbus)链接到被调试的资源,根据被链接调试资源类型的不同,ADI 定义了两类 AP 的实现 :MEM-AP 和 JTAG-AP。MEM-AP 用来链接到存储器映射(Memory mapped)类型的资源,而 JTAG-AP 主要用来链接到经典的 IEEE 1149.1 JTAG 设备上。我们常用的是 MEM-AP 类型,通过对 ARM 存储器映射机制下的系统资源的访问,我们可以调试几乎所有的片上资源。而当我们使用 IEEE 1149.1JTAG 调试设备做扫描边界测试时,我们需要用到 JTAG-AP实现。
3 基于 Cortex M3 内核调试的 MCU 实现
首先,我们先对比两个具体的实现方案。其一是意法半导体公司的 STM32MCU,而另一个则为德州仪器公司的Stellaris。
图 2 所示为 STM32 的调试体系构架。
STM32MCU和StellarisMCU的设计都遵循了ARM的ADI规范。
STM32选用了SWD和JTAG二合一DP接口:SWJ-DP,这样的选择方便了对老式JTAG调试设备的兼容。通过固定的操作脉冲,调试设备开发者可以轻松实现在JTAG和SWD方式之间的切换。而不同的硬件设备是复用接口引脚的,这对引脚分配严苛的MCU设计提供了很大便利。而Stellaris则只选用了SWD-DP一种物理连接实现,这体现了TI设计人员对SWD调试方式能力的信任与把握,因为节省出来的不仅仅是管脚,更是硅片的体积和成本。
同时,STM32的AHB-AP是一种MEM-AP的实现。通过Internalprivateperipheralbus(PPB),调试者可以访问挂接
到ARM高性能总线的所有片上资源。而TI的Stellaris也通过类似的机制实现了对片上资源的访问控制。
ST公司在STM32系列的不同型号中还提供了可选的调试组件,当然,这得益于CoreSight调试构架中的组件化、模块化设计。其中DWT、FPB的结合给调试者提供了数据观察点、硬件断点和FLASH重映射等功能,而ITM、ETM和TPIU的结合给调试者提供了不输于大型系统调试方案的指令流、数据流监控功能。而TI的Stellaris并没有提供可选的ETM组件。TI官方也给出了令人信服的解释:嵌入式跟踪宏单元(ETM)旨在为开发工具提供明确的逐指令跟踪信息。该功能对较复杂的微处理器尤其实用,特别是那些所用片上资源太过动态,难以实现外部实时决定性的处理器。例如,片上高速缓存会根据程序环路执行的具体变化而变化,同时数据和输入也在不断变化,因此无法以合理的价格通过外部工具来复制。但是,MCU不使用高速缓存,所以ETM作用不大。
由以上分析可以得出,只要不同的厂商在设计基于ARM内核芯片时遵循了ARM相关协议和规范,开发人员在选择和开发芯片时就能触类旁通,大大减少相应的学习开发时间,降低开发成本。同时,更多的开发工具和开发平台将能得到很好的重用,这对开发者来说是一个巨大的成本优势。
4JTAG和SWD对比
SerialWireDebug(SWD)是ARM体系结构中定义的新一代调试机制,具有占有引脚少,高速下运行稳定等特点,其所使用的基于分组的协议可提供比JTAG快一倍多的数据速率,SWD的诞生就旨在替代原始的JTAG调试方式。图4所示为SWD下ARM调试机制示意图。
从图5中可以看出,SWD协议仅仅需要一个时钟引脚和一个数据传输引脚即可完成工作。而可选的SWO引脚可以与ITM组件结合,提供类printf形式的跟踪调试信息。相比于传统的JTAG调试协议,新的SWD调试方式的各类优势不言而喻。同时,在现有的SWD接口中,我们仍然可以使用JTAG的边界扫描测试功能,当然,这需要我们具有JTAG-AP接口的实现。
JTAG |
1149.1 |
SerialW |
ireDebug |
Pin |
Purpose |
Pin |
Purpose |
TCK |
Clock |
SWCLK |
Clock |
TMS |
StaleMachine Contro1 |
SWDIO |
DataIn&Out |
TDI |
Da/In |
— |
— |
TDO |
Da/Out |
SWO |
— |
TRST |
Reset |
— |
— |
图5 SWD与JTAG1149.1引脚对比
5结语
ARM的新一代调试体系结构极大的增强了ARM体系结构功能的完整性和健壮性,及时转入新的调试体系结构是必要的,也是具有极大好处的。我们在选择功能芯片时,在考虑了成本和开发难度的前提下,对芯片可维护性和延续性的考虑也要列入其中。同时,在选用开发工具和平台的过程中,是否支持ARM新的调试机制也应该成为我们一个重要选择因素。