大多数情况下,在嵌入式开发中,调试嵌入式系统与调试桌面应用程序没有太大区别。通常,运行我们的开发环境的主机没有任何访问外部硬件状态的工具。这就是为什么我们需要配置一组额外的硬件和软件组件,以便我们可以使用某种通信通道将从主机上的调试器发送的命令转换为目标设备。让我们了解一下调试嵌入式目标的典型设置。
调试接口-问题?
现在有两种流行的接口用于调试嵌入式系统:JTAG 和串行线调试 (SWD)。经典 JTAG 由 Joint Test
Access Group 在 80 年代开发,作为在制造后验证设计和测试印刷电路板的标准。今天,JTAG
被半导体行业广泛采用,并经常用于编程、测试和调试嵌入式系统。 JTAG 接口的主要缺点是它至少需要四个引脚(TRST
是可选的)才能正常工作。当我们使用引脚数量有限的小封装 IC 时,这可能是一个问题。
Arm 开发了一个简化的替代接口,称为串行线调试 (SWD)。它用两个信号代替 JTAG 接口 - 一条双向数据线
(SWDIO) 和时钟 (SWCLK),提供所有常用的调试和测试功能,与 JTAG 相比具有更高的性能。尽管许多现代微控制器同时支持 JTAG 和 SWD
接口,但 SWD 是一种专有接口,主要用于 Arm 生态系统。
调试探针-问题?
我们可以将调试探针描述为主机和目标嵌入式系统的调试端口之间的硬件中介。任何调试探针的主要任务是将来自调试器的命令转换为目标设备可理解的信号。通常,调试探针通过
USB 连接到主机,但以太网或 Wi-Fi 连接也有更多奇特的变化,允许嵌入式开发人员甚至从世界任何地方远程调试设备。
市场上有很多调试适配器,从开源和供应商不可知探针 (Black Magic Probe) 到来自芯片供应商
(Atmel-ICE、ST-link) 和独立商业公司 (Segger) 的专有解决方案J-链接)。一些供应商还提供带有板载调试探针的开发套件(Nordic
nRF52-DK、NXP i.MX RT1010),因此开发人员无需任何额外硬件即可开始调试。
值得一提的是,PlatformIO Unified Debugger
具有高度可配置性,可与各种调试探针一起使用,它还为具有内置调试电路的开发套件提供了大量预定义配置。这意味着开发人员不需要任何调试配置,只需连接您的开发板并开始新的调试会话。
调试服务器-问题?
简单地说,调试服务器是一个运行在主机上的软件,它充当调试器和连接到目标设备的调试探针之间的桥梁。 OpenOCD
是免费和开源调试服务器的最佳示例之一。这是一个社区驱动的项目,具有大量受支持的调试探针和目标设备。另一个例子是 pyOCD——一个用于编程和调试 Arm
Cortex-M 微控制器的开源包。另一方面,像 Segger 这样的公司提供自己的工具集(包括调试服务器),可以更好地利用其 J-link
调试探针的功能。在嵌入式开发中,还有一些调试探针根本不需要任何中间主机软件(例如 Black Magic
Probe),并且可以通过串行端口模拟调试服务器来直接与调试器交互。