ARM 使用 JTAG 或 SWD,最常见的微控制器 ARM 内核是 Cortex 系列,它们几乎完全通过 SWD 进行编程和调试。
JTAG 和 SWD 都有很好的定义,大多数供应商都描述了如何进入和操作调试访问端口 (DAP),这是您通常访问内部总线、CPU、存储器和外围设备的方式。您用于开发/调试的 PC 和 micro 的 JTAG/SWD 端口之间的物理接口是适配器。
虽然您几乎可以使用任何东西连接到端口并操作 SWD 接口,但大多数供应商都会有自己的“风味”适配器。使用供应商推荐的工具通常是阻力最小的途径,因为供应商将支持他们的适配器,他们推荐的软件将与他们的适配器一起使用,并且应该合理地记录事情,使事情尽可能顺利。
话虽如此,我对供应商工具的体验是,它们是不合标准、快速且肮脏的工具。我经常在使用 OpenOCD 和供应商工具(主要是 ST-Link、Olimex、OpenSDA 等)时遇到问题,尤其是在调试方面。告诉你:没什么比最终让嵌入式系统在调试环境下显示错误以及调试器软件/ide(gdb、eclipse等)、OpenOCD、供应商驱动程序和供应商适配器不同步、丢弃调试连接并需要重新启动硬件才能重试。这种令人沮丧的环境不稳定性为 Segger 等供应商打开了大门,这些供应商制造自己的 JTAG/SWD 适配器,提供出色的支持,并且其工具可与许多不同的供应商合作。对于一个统一的界面,几乎可以与您使用的所有设备一起使用,有一些话要说。
我花了很多时间避开 J-Link,因为它的价格以及我更喜欢使用开放软件和供应商工具。几年前,我开始在一个项目中使用 J-Link 适配器,该项目已经拥有它们并且没有回头。他们的工具都是多平台的,他们的独立调试器 Ozone 非常棒。我很少遇到 OpenOCD 和 J-Link 的“调试不稳定中间”问题,也从来没有遇到过 Ozone 的问题。
Segger 还采取了相当不错的步骤,即为开发套件上的任何板载调试器提供免费“升级”,将供应商特定的调试器转变为许可的 J-Link。这当然是为了让您尝试和使用他们的工具,这样您就可以购买它们以在自己的板上使用,但这是一个绝妙的策略。有关 ST-Link的更多信息,请按照其他供应商的“模型 -> 其他 J-Links”链接。他们还有教育折扣和价格非常合理的 J-Link“精简版”硬件(我认为是 50 美元?)并且仅限于 Cortex 处理器内核。
现在 Segger 并不是唯一的第三方适配器:一个专门针对 gdb 的开源调试器可用。这是黑魔法探测器. 他们销售硬件,但也有在 GPL 下发布的完整原理图、布局和软件。我还没有机会使用这些,但我很高兴尝试这个调试器。在调试器上实现 GDB 协议应该会显着提高稳定性。当然还有其他更高端的系统,例如劳特巴赫和(现已不复存在的)Abatron BDI2000 和 BDI3000 适配器。更高级/更昂贵的工具通常是联网的,而不是直接连接到调试 PC,提供(更快)更快的 JTAG 接口,并且通常还具有单独的跟踪端口可用,这些端口与兼容的 MCU 一起为您提供每条执行指令的详细日志,它执行的时间和每条指令后的内部处理器状态。
您也可以随时实现自己的。我在赛普拉斯的 PSoC5LP 中嵌入了我自己的 SWD 接口,以解决一个特定问题,该问题允许我通过一个 USB 连接对整个设备链进行编程以进行制造。您也可以使用并行端口或一对 GPIO 线来摆动信号。这一切都取决于你所追求的。