Arm 是否有一种从应用程序直接向JTAG端口发送数据的方法?(Cortex-M3)

Arm 是否有一种从应用程序直接向JTAG端口发送数据的方法?(Cortex-M3),arm,embedded,cortex-m3,jtag,nxp-microcontroller,Arm,Embedded,Cortex M3,Jtag,Nxp Microcontroller,我使用的是NXP LPC1769,它包含一个Cortex-M3。到目前为止,我只从JTAG接口访问它,但现在我不得不用另一种方式访问它。IT例程应该读取内存的某些部分,并立即将它们发送到JTAG端口。有办法做到这一点吗 *更新:经过数小时的研究,我发现了一些可能有用的东西:Cortex-M3支持ITM(仪器跟踪宏细胞),它可以通过JTAG端口的TDO引脚发送数据。我现在的问题是,人们将如何着手这样做?我只找到了ITM的特定于调试器的应用程序,在我的例子中,我希望能够从正在运行的应用程序发送特定的

我使用的是NXP LPC1769,它包含一个Cortex-M3。到目前为止,我只从JTAG接口访问它,但现在我不得不用另一种方式访问它。IT例程应该读取内存的某些部分,并立即将它们发送到JTAG端口。有办法做到这一点吗


*更新:经过数小时的研究,我发现了一些可能有用的东西:Cortex-M3支持ITM(仪器跟踪宏细胞),它可以通过JTAG端口的TDO引脚发送数据。我现在的问题是,人们将如何着手这样做?我只找到了ITM的特定于调试器的应用程序,在我的例子中,我希望能够从正在运行的应用程序发送特定的JTAG消息(或写入特定的DP/AP寄存器)。

有几种方法可以通过JTAG端口执行主机I/O。我通常使用的第一种方法叫做半托管。半托管使用处理器断点向主机提供调试板的IO。此处对该机制进行了详细解释:

在调试器上启用半宿主的方式将根据您使用的工具而改变。例如,可以在此处找到用于在LPCXpresso IDE中设置半宿主的线程:并且可以在此处找到GNU Arm Eclipse指南:

与使用ITM相比,半托管的缺点是速度较慢

正如您在问题中提到的,另一种方法是使用ITM(仪器跟踪宏单元)功能。与半托管不同,如果启用了SWO引脚或配置了单独的UART输出,则ITM可以在不等待JTAG适配器轮询数据的情况下运行。与半托管一样,详细信息将根据您使用的工具而更改


可以在此处找到将ITM用作LPCXpresso IDE中标准输出的指南:。

我回答了另一个问题(),可能对您有用。它特别针对keilide,但是ITM部分应该是您所需要的。我不知道的是如何在PC端提取ITM信息。调试工具中必须有一个文档。也许你会在那里发现一些东西。首先,我怀疑这是jtag,但与社会福利署不同的是,细微的差别,当然。它是一个主从式的东西,比如spi、i2c、usb等等。如果你想“发送”一些东西给主机,你就把它放在某个地方,让主机对它进行轮询。如果它真的是JTAG,情况仍然是这样,主控驱动时钟,JTAG状态机tdo是它的从机,你把值放在JTAG空间的寄存器中,然后让主控轮询它。阅读arm文档中的这些主题。相信我,这是JTAG。我的代码处理通过TAP状态机的导航,通过位敲击单个JTAG信号,如果它是SWD,它将无法工作。我目前正在使用您提到的轮询解决方案,但我正在寻找替代方案的原因是,对于我的应用程序来说,轮询速度太慢。我知道JTAG主要是一个主从式的东西,它并不意味着目标向主机发送数据,但我希望有一种方法。