嵌入式调试接口详解:JTAG、ST-LINK、DAP-Link 与 CMSIS-DAP
在嵌入式开发中,调试接口是连接开发主机与目标微控制器的关键桥梁。本文将深入介绍四种常见的调试接口技术,帮助开发者更好地理解和选择适合自己项目的调试工具。
#JTAG:经典的边界扫描测试接口
JTAG(Joint Test Action Group)最初是为了解决复杂电路板的测试问题而开发的IEEE 1149.1标准。随着时间推移,它已经成为嵌入式系统调试的重要工具。
JTAG接口通常包含以下信号线:
- TCK(Test Clock):测试时钟
- TMS(Test Mode Select):测试模式选择
- TDI(Test Data In):测试数据输入
- TDO(Test Data Out):测试数据输出
- TRST(Test Reset):测试复位(可选)
JTAG的主要优势在于其通用性和成熟度。几乎所有的ARM处理器、FPGA和复杂的微控制器都支持JTAG接口。通过JTAG,开发者可以进行程序下载、单步调试、断点设置、寄存器和内存查看等操作。然而,JTAG接口需要较多的引脚,在某些空间受限的应用中可能不太适用。
#ST-LINK:STM32专属的调试利器
ST-LINK是意法半导体(STMicroelectronics)专门为STM32系列微控制器开发的调试编程器。它支持JTAG和SWD(Serial Wire Debug)两种调试协议,其中SWD只需要两根信号线(SWDIO和SWCLK),大大减少了所需的引脚数量。
ST-LINK的演进历程包括:
- ST-LINK/V1:早期版本,功能相对基础
- ST-LINK/V2:改进了性能和稳定性,支持更多STM32系列
- ST-LINK/V2-1:增加了虚拟串口功能
- ST-LINK/V3:最新版本,支持更高的通信速度和更多功能
ST-LINK与STM32CubeIDE、Keil MDK、IAR等主流开发环境都有良好的集成,使得STM32的开发变得更加便捷。许多STM32开发板(如Nucleo和Discovery系列)都内置了ST-LINK调试器,进一步降低了开发门槛。
#DAP-Link:开源的通用调试解决方案
DAP-Link是ARM公司开发的开源调试器固件,可以将支持的硬件平台转换为CMSIS-DAP兼容的调试器。它的设计理念是提供一个标准化、低成本的调试解决方案。
DAP-Link的特点包括:
- 完全开源,可以自由修改和定制
- 支持拖放式编程,将固件文件直接拖到虚拟U盘即可烧录
- 内置虚拟串口功能,方便调试输出
- 支持多种目标平台,不限于特定厂商
DAP-Link通常运行在低成本的微控制器上,如NXP的LPC11U35或STM32F103等。这使得制作自定义调试器变得非常容易,许多开发板制造商都选择集成DAP-Link作为板载调试器。
#CMSIS-DAP:ARM的标准化调试协议
CMSIS-DAP(Cortex Microcontroller Software Interface Standard - Debug Access Port)是ARM定义的标准调试协议,旨在为Cortex-M系列微控制器提供统一的调试接口。
CMSIS-DAP协议定义了主机与调试器之间的通信方式,支持通过USB HID或USB Bulk传输。这种标准化带来了几个重要优势:
- 无需安装专用驱动程序(使用HID模式时)
- 跨平台支持,可在Windows、Linux、macOS上使用
- 统一的API接口,简化了调试工具的开发
CMSIS-DAP可以看作是一个协议规范,而DAP-Link是这个规范的一个具体实现。除了DAP-Link,许多商业调试器也支持CMSIS-DAP协议,如SEGGER J-Link、Keil ULINKplus等。
相关配置文件
wlink-f1
# choose st-link/j-link/dap-link etc.
adapter driver cmsis-dap
transport select swd
# 0x10000 = 64K Flash Size
#加上这么一句,将WCHLink识别为DPLink
cmsis-dap vid_pid 0x1a86 0x8012
set FLASH_SIZE 0x20000
source [find target/stm32f1x.cfg]
# download speed = 10MHz
adapter speed 10000