可能需要考虑某些方面:
- 运行模式调试与停止模式调试
- 简单的信号转换器与智能调试探针
- 纯 JTAG 调试器与调试和跟踪工具
运行模式调试与停止模式调试
“运行模式调试”表示“在运行操作系统的系统上调试应用程序”。当您在 Windows/Linux/Mac 机器上调试应用程序时,也会发生这种情况。当您在应用程序中遇到断点时,CPU 仍在运行。只有被调试的应用程序才会停止。
因此,如果您的嵌入式系统正在运行操作系统,您的 GDB 可能能够通过以太网连接到运行在目标操作系统上的 gdbserver,从而允许您在设备上调试应用程序。
“停止模式调试”表示“通过控制 CPU 的运行状态来调试 CPU 上的所有软件”。因此,如果您在停止模式调试的 CPU 上遇到断点,您的整个 CPU 将停止。这允许您调试裸机应用程序或操作系统本身或操作系统上下文中的应用程序,甚至是管理程序。
对于停止模式调试,您通常需要一个带有 JTAG 接口(或 SWD 或类似接口)的芯片和一个在线调试器。基本上可以让您在非常低的级别上控制 CPU。以前,这是通过使用在线仿真器(而不是 JTAG)来完成的,该仿真器将 CPU 替换为特殊的键合芯片,这也允许在非常低的水平上控制芯片。为了使想法更加混乱,一些供应商将他们的 JTAG 探针也称为“在线仿真器”。
简单的信号转换器与智能调试探针
对于停止模式调试,您需要一个探针,它将您的 PC 接口转换为芯片的低级调试接口。所以基本上是一些 USB 到 JTAG 转换器。或以太网到 JTAG 转换器。
我能想到的最简单的探针只是一些设备,它允许您通过 USB 控制一些 GPIO(通用输入输出)引脚。然后所有的 JTAG 通信协议和更高的调试协议完全在软件中完成。优点:非常灵活。缺点:很慢。
更高级的探针知道如何进行 JTAG,因此,只有高级调试协议必须通过 USB 处理,而低级 JTAG 通信由探针本身完成。这些探测通常仍然很慢,因为当您需要较短的延迟时 USB 效率不高。
高端探针通常处理调试协议本身,该协议对于每个 CPU 架构或有时甚至对于单个芯片都是独立的。因此,运行调试软件的主机 PC 只发送一个高级命令,如“执行单步”,而其余的则由探测器自己处理。这提高了性能,尤其是对于复杂的多核芯片,这些芯片通常需要大量的 JTAG 通信,直到完成一个简单的任务。
简单的 USB 到 JTAG 转换器通常已经在廉价评估板的 PCB 上。理论上,您也可以将这样的转换器直接集成到芯片本身中,但这通常不是芯片制造商做的,因为这会增加每个芯片的成本。在专业领域,高端调试器相当普遍,因为公司不希望他们的开发人员坐在他们的 PC 前,只是等待缓慢的调试器完成应用程序下载。
一般来说,我认为调试器越快、越灵活、功能越丰富,它就会变得越大、越昂贵。所以这在很大程度上取决于您的需求。
纯 JTAG 调试器与调试和跟踪工具
所有 JTAG 调试器都允许您停止和重新启动 CPU、设置断点以及读写内存和 CPU 寄存器。这就是我上面提到的停止更多调试。
某些调试探针还允许您在 CPU 运行且无需停止的情况下记录 CPU 的代码执行和数据访问。这称为实时跟踪。对于这样的跟踪记录,您需要调试探针和支持此功能的芯片。
例如在 ARM Cortex 芯片上,此功能称为 ETM,它不适用于 Cortex-M0/M0+ 芯片,但通常在 Cortex-A/R 芯片和 Cortex-M3(及更大)芯片具有 100 个或更多引脚时可用。
支持跟踪的工具通常比不支持跟踪的调试探针更大、更昂贵。
影响带有跟踪记录器的调试器价格的因素:
- 用于保存跟踪数据的内存大小
- 在一个目标跟踪引脚上支持最大速度(用于并行跟踪)。
- 支持的跟踪引脚数(用于并行跟踪)(例如,单引脚 SWO 跟踪通常比 ETM 跟踪便宜得多)。
- 支持高速串行跟踪端口/每个通道的最大速度/支持的通道数。
- 上传到主机 PC 的速度(探头有 USB 3 和/或千兆以太网接口还是只有 USB 2?)
您所指的劳特巴赫设备支持对 Cortex-M 芯片的跟踪,在跟踪端口上总共有 1600 MBit/s。官方产品页面在这里https://www.lauterbach.com/microtrace_cortexm.html
你写的
顺便说一句,一次有效,一次无效,通常是黑魔法
如果您的工具无法正常工作,我建议您向工具供应商寻求支持。对于劳特巴赫,请访问 https://www.lauterbach.com/tsupport.html
JTAG 调试本身并不是什么黑魔法:JTAG 协议本身是一个 IEEE 标准,并且调试协议(在下一个级别)通常在公众可以访问的芯片制造商手册中进行描述。然而,这当然是很多工程。