Embedded 使用openOCD提取Cortex-M(STM32F4)上的ETB痕迹

Embedded 使用openOCD提取Cortex-M(STM32F4)上的ETB痕迹,embedded,stm32,openocd,Embedded,Stm32,Openocd,STM32F4发现(Cortex-M4)具有ETB,一个存储指令跟踪的缓冲区。如何使用OpenOCD和片上st-link调试器从ETB中提取跟踪 我对SWO/SWD有点困惑。我应该用什么?此外,我是否需要任何额外的硬件来提取跟踪 谢谢恐怕我从未听说过 在已实现的子集中包括嵌入式跟踪缓冲区(ETB) 及其 . 我认为这是因为ETB是一个可选功能,ST决定不在其STM32F4控制器及其嵌入的ARM内核中配置/实现此ETB选项 我查阅了STM32F4xx系列高级代表的编程/参考手册和数据表,但没有找到

STM32F4发现(Cortex-M4)具有ETB,一个存储指令跟踪的缓冲区。如何使用OpenOCD和片上st-link调试器从ETB中提取跟踪

我对SWO/SWD有点困惑。我应该用什么?此外,我是否需要任何额外的硬件来提取跟踪


谢谢

恐怕我从未听说过 在已实现的子集中包括嵌入式跟踪缓冲区(ETB) 及其 . 我认为这是因为ETB是一个可选功能,ST决定不在其STM32F4控制器及其嵌入的ARM内核中配置/实现此ETB选项

我查阅了STM32F4xx系列高级代表的编程/参考手册和数据表,但没有找到任何关于ETB的信息,这似乎证实了这一假设


现在,如果想要从MCU中流出跟踪数据,ETB不是唯一的选项:

  • STM32F4控制器都有一个指令跟踪宏单元(ITM),它可以在数据监视点/跟踪(DWT)的协助下,提供软件定义的字符输出流或数据值或程序计数器的快照,这些数据或计数器可以在断点处收集,也可以定期收集单位。 您可以使用ITM

    • 使用字符输出为应用程序插入指令(
      printf()
    • 来分析你的应用程序
    • 通过跟踪程序断点或数据观察点来检查软件的某些属性/状态流
    ITM可通过SWO引脚使用任何适配器硬件,如ST-Link、j-Link、uLink-*等的任何版本。 它是一个合适的跟踪接口,因为它工作时不会在断点处停止CPU,所以检查不会破坏系统的实时属性

  • 许多STM32F4控制器(AFAIK,具有>=100引脚的控制器)包括一个嵌入式跟踪宏单元(ETM),它能够跟踪程序计数器(PC)和每个CPU周期的数据,因此您可以使用该控制器跟踪控制器的整个控制流(和数据流),也无需在任何断点处停止

    要跟踪的大量数据(确保您有一个免费的USB3端口…)只能通过GPIOE组周围的同步端口接口(可选函数TraceLk+TRACED0/1/2/3=>5个引脚)以有用的方式传输,GPIOE组连接到ETM旁边的跟踪端口接口单元(TPIU)

    为了使用这项技术,您需要更昂贵的调试适配器变体,如j-Trace、uLink Pro或Lauterbach。据我所知,最便宜的支持ETM的适配器(虽然还没有使用)是PDQlogic的QTrace,起价约为379英镑。其他的价格约为1-4千欧元/千欧元/千美元



你的问题听起来似乎告诉我你可能刚开始编程STM32。因此,我建议您获得一个内置ST链接的开发板。这是获得(首先运行SWD调试,然后)SWO跟踪运行的最便宜的解决方案。Atolic blog提供了一个很好的介绍如何快速完成此操作。

SWO是一个串行单线协议,许多STM32(所有STM32F4)可以通过它输出跟踪数据。SWD是一个双线调试协议/HW接口。因此,只要您只想处理单个核心(因为SWD不支持菊花链连接多个核心),它就比JTAG更有效。它由大多数(所有?)STM32支持,尤其是所有STM32F4支持。您可以使用它对µC进行编程、调试(读/写寄存器、内存、设置断点/观察点等)。这两个协议一起通常被称为SWV(3引脚,加上Vcc/GND)。它们通常聚集在一起,在JTAG可用的四个/五个引脚中的三个进行多路复用。您尝试过etm命令吗@Codo-我也有同样的想法(见下面的答案),但我现在非常确定控制器不提供ETB功能。STM32F4是专为中端市场设计的,在中端市场,通过节省芯片空间来降低价格是芯片供应商的一项标准……您好,谢谢您的回答。我尝试了ITM方法,效果很好。我能找到痕迹。然而,我对阅读ETB痕迹感兴趣。我现在有一个NXP K64F freedom板,上面实现了ETB。你知道如何在K64F上使用openOCD访问ETB吗。谢谢,对不起。恐怕我还没有使用过这种架构,我只是在一个完全不同的控制器上使用了ETB。