概述
JTAG
和SWD
是物理层通信协议,类似于UART这种。绝大部分处理器都支持JTAG
通信,因为JTAG
是调试的通用协议,而SWD
是ARM
的专用调试通信协议。CMSIS-DAP
是ARM规定的调试标准,规定了应用层的调试指令集。JLink
是SEGGER
开发的通用调试器,JLink
固件能兼容很多处理器架构的调试标准,兼容CMSIS-DAP
。STM32
内部调试单元支持SWD
和JTAG
两种物理层通信协议。STM32
是ARM
处理器,内部调试单元符合CMSIS-DAP
标准,能使用对应的调试指令。- 基于
CMSIS-DAP
标准开发的ST-Link
调试器能用于STM32
调试,使用SWD
通信,并使用CMSIS-DAP
标准里规定的调试指令。 SEGGER
开发的J-Link
能兼容CMSIS-DAP
标准,因此也能用于STM32
调试,使用SWD
或者JTAG
通信协议都可以,使用J-Link
调试器时能使用J-Link
规定的指令进行调试。J-Link
固件兼容了很多芯片架构的调试指令集,比如ARM、PowerPC等等。
一、程序烧写和仿真
1、程序烧写的方式
无论是jtag
还是串口烧写,本质都是先通过上位机(keil
或者flymcu
或者芯片官方上位机等烧写bin
的上位机)往mcu
的ram
里烧写一段代码即.FLM
文件,这段代码在上位机(keil
体现在配置项里,flymcu
应该是内置了吧,jlink
体现在JFlash
的文件夹下面)里存的有,这段代码的作用是从上位机接收数据(即用户程序的bin
文件)并将其写入到flash
指定的地址空间里。而jtag
和串口起到的作用都是通信接收数据。
1.1 OTA形式(下载模式下升级软件)
- 系统Bootloader
官方系统Bootloader程序
(位于OTP
区域)和官方Download Tools
是配套使用实现OTA
,连接线一般是串口
,如果觉得不好用,也可以自行开发上位机来适配官网的Bootloader
程序:官方会提供对应的通信协议和指令的,上位机按照这个协议给官方Bootloader
发送bin
程序即可。这个外在的条件是MCU
启动时要手动置boot0和boot1
引脚的电平,确保MCU
从系统Bootloader
启动。如果想做到flymcu
那种不依赖外部boot
引脚而是自动一键烧写,则硬件电路上需要像正点原子开发板那样多一块串口芯片ch340
,此芯片的dtr
引脚连接到复位引脚可控制mcu
复位,rts
脚连接到boot0
引脚控制boot0
引脚的电平,然后在flymcu
选择dtr低电平复位,rts高电平进入系统Bootloader
,即可一键下载程序。 - 用户Bootloader
用户开发的Bootloader程序
(位于ROM
)和用户开发的Download Tools
(烧写上位机发送bin
文件给Bootloader
)是配套使用实现OTA
,连接线一般是串口
,这里的通信协议就是用户自定义了。这个也可以成为二次Bootloader
,官方的系统Bootloader
称为一次Bootloader
。如果启用二次Bootloader
,那么进行软件升级时,MCU
要从Flash
启动而不能从系统Bootloader
启动了。这个可以模仿系统Bootloader
的进入条件:MCU
上电前置某个GPIO
的电平;也可以在经过一段时间检查串口是否接收到数据,如果有则进入软件升级,否则跳转到应用程序段。
1.2 通用Jlink形式
Jlink固件
和JFlash上位机
是配套使用实现程序烧写,连接线是Jlink
即仿真器硬件
Jlink固件
和keil
是配套使用实现程序烧写和仿真,连接线是Jlink
即仿真器硬件
1.3 各个芯片厂家link形式
-
ST芯片厂家
-
st-link固件
和flymcu
上位机或者flash demo loader
上位机或者st-link untilty
上位机是配套使用实现stm32程序烧写
,连接线是st-link即仿真器硬件 -
st-link固件
和keil
是配套使用实现stm32程序烧写和仿真,连接线是st-link即仿真器硬件 -
兆易创新芯片厂家
-
gd-link固件
固件和gd download tools上位机,连接线是gd-link即仿真器硬件 -
gd-link固件
和keil
是配套使用实现gd32
程序烧写和仿真,连接线是gd-link
即仿真器硬件 -
国民技术芯片厂家
-
nc-link
固件和national download tools
上位机,连接线是nc-link
即仿真器硬件 -
nc-link固件
和keil
是配套使用实现n32程序烧写和仿真,连接线是nc-link
即仿真器硬件
1.4 第三方link形式
pwlink
(创意工坊)支持一定数量的ARM
处理器烧写和仿真
2、程序仿真的方式
Jlink固件
和keil
是配套使用实现程序烧写和仿真,连接线是Jlink即仿真器硬件
st-link固件
和keil
是配套使用实现stm32程序烧写和仿真,连接线是st-link即仿真器硬件
3、调试示波器
调试示波器即上位机软件,可以在程序运行时(不需要进入Debug模式
)通过调试器实时查看变量的值,其通信是基于JTAG或者SWD
,因此调试电脑和MCU
之间需要通过Jlink调试器或者DAP调试器
连接。
(1)Jscope
- 安装
JLink
驱动时自动安装,一起安装的还有JFlash
(2)Freemaster
NXP
芯片公司提供,官网可以下载
二、烧写和仿真接口、设备
2.1 JTAG和SWD是处理器的物理层调试协议
特性 | JTAG (IEEE 1149.1) | SWD (Serial Wire Debug) |
---|---|---|
协议类型 | 扫描链协议 (Scan Chain) | 串行协议 (Serial Protocol) |
引脚数 | 多 (标准至少4-5根): TMS, TCK, TDI, TDO, (nTRST) | 少 (最少仅需2根): SWDIO, SWCLK |
连接方式 | 需要连接所有目标器件形成一个扫描链 | 点对点连接,每个目标器件独立连接 |
速度 | 相对较低 (受限于扫描链更新) | 相对较高 (串行协议效率更高) |
带宽 | 较低 | 较高 |
调试功能 | 强大 (完整边界扫描,可访问所有JTAG功能) | 核心调试功能完备 (寄存器访问、断点、内存读写等) |
编程功能 | 支持 | 支持 |
物理接口 | 通常使用标准的10/14/20针JTAG连接器 | 通常使用与JTAG兼容的连接器,但只连接部分引脚 |
优势 | 功能强大、标准化、支持多器件调试、边界扫描测试 | 引脚少、布线简单、成本低、速度快、功耗低 |
劣势 | 引脚多、布线复杂、成本稍高、速度相对慢 | 功能不如JTAG全面 (缺少边界扫描等高级功能) |
主要应用 | 复杂多核系统、FPGA调试、需要边界扫描的场合 | 主流ARM Cortex芯片调试/编程的首选 |
总结:
- SWD是JTAG的精简和优化版本,专门针对ARM Cortex内核设计。
- 核心区别在于协议和引脚数:
SWD
使用高效的串行协议,只需2根核心线(SWDIO, SWCLK
),而JTAG
使用基于扫描链的协议,需要至少4-5根线。 - SWD优势明显: 引脚少、布线简单、成本低、速度高、功耗低,完全满足绝大多数
ARM
芯片调试编程需求,已成为嵌入式领域最主流的调试接口。 - JTAG优势在特定场景: 功能更全面(尤其边界扫描),更适合复杂系统、多器件调试或需要
非ARM内核调试
的场景。 - 兼容性: 很多调试器(如J-Link, ST-Link)和芯片调试接口支持双协议,同一个物理接口(如标准的
20针JTAG/SWD
连接器)可以通过配置选择使用JTAG
模式或SWD
模式。
2.2 DAP和Jlink和ST-link和Ulink的关系
DAP, J-Link, ST-Link, ULINK
这些都是调试探针或调试器硬件
。它们的作用是连接PC上的调试软件
和目标板上的调试接口
,将调试命令
(通过JTAG/SWD等协议
)发送给目标芯片
的调试单元,并传回状态信息。
- CMSIS-DAP (DAP)
-
CMSIS-DAP (DAP)
是 一个开源的调试器固件标准
,是应用层的调试指令集,由ARM定义。通常支持SWD协议
和处理器通信,部分支持JTAG
协议(取决于固件实现),和调试电脑即上位机的通信一般是USB HID协议,操作系统兼容性好,免驱或通用驱动。 -
基于开源的DAP标准
可以制作自己的调试器固件即程序,进而制作自己的调试器
:调试器硬件一般是基于一个USB
设备即带USB
接口模块的微控制器,比如STM32F103、LPC11U35, SAMD21, RP2040等MCU,把自己制作的符合CMSIS-DAP规范的调试器固件烧写到调试器的MCU里即可
。很多淘宝上的DAPLink调试器
也都是这样自制的。 -
DAP
标准能提供基础的调试(断点、单步、寄存器/内存访问)和编程(Flash
下载)功能。 -
基于
CMSIS-DAP
标准的常见调试器,可以称为DAP调试器
:- ULink-DAP(已停产):ARM和Keil合作的
- ST-Link/V2-1:ST芯片厂家的
- NXP LPCLink2:NXP芯片厂家的
- PW-Link等第三方的DAPLink调试器
- J-Link (SEGGER)
-
J-Link (SEGGER)
是由SEGGER公司开发和销售的商业级、高性能、通用型调试探针或者说调试器。其支持JTAG, SWD, cJTAG, FINE等多种协议
,用起来十分通用。 -
J-Link调试器硬件
通常基于SEGGER定制的专用芯片或FPGA,固件
则由SEGGER开发。淘宝山也有挺多盗版的Jlink调试器。 -
J-Link
调试器支持几乎所有主流的微控制器架构(ARM Cortex, RISC-V, RX, MSP430, 8051等)和数千种芯片型号。 -
J-Link
调试器被绝大多数主流IDE
(Keil, IAR, Embedded Studio, Eclipse+GDB等)原生支持。 -
J-Link
调试器支持高级调试特性(如J-Trace
指令跟踪),配套软件(J-Link Commander, J-Flash
)功能齐全且强大。 -
工业级品质,稳定性高,价格 相对较高
-
J-Link
硬件版本- 硬件版本目前常见的是
v9
- 硬件版本目前常见的是
-
J-Link
固件版本:v6 v7 v8 v9 v11
- J-Link BASE,
- J-Link PLUS,
- J-Link ULTRA+
- J-Link PRO(带跟踪功能)
两者对比
在Keil
中需要选择对应的仿真器类型,这里把ST-Link、ULink
和CMSIS-DAP
并列选择了,实际上CMSIS-DAP
是一个标准,而ST-Link、ULink
是此标准下的一些具体实现。而对于其他芯片厂家基于CMSIS-DAP标准
制作的调试器比如GD-Link、NC-Link
就没有这个待遇了,使用这些调试器时需要选择CMSIS-DAP Debugger
。
- ST-Link (STMicroelectronics)
-
ST-Link调试器
由STMicroelectronics (意法半导体) 为其STM8和STM32微控制器
开发和提供的官方、低成本调试器/编程器,其符合CMSIS-DAP
标准,本质上就是DAP调试器
。 -
ST-Link
调试器主要支持SWD协议
(针对STM32
)和SWIM协议
(针对STM8
)。部分版本(V2, V2-1
)也支持JTAG
。 -
ST-Link
调试器硬件早期基于STM32F1
系列微控制器,后期版本(如V2-1, V3
)使用更强大的MCU
或专用芯片。 -
ST-Link
调试器完美支持ST
自家的STM32CubeProgrammer
、STM32CubeIDE
,也被Keil、IAR等主流IDE支持
(需要安装ST驱动
)。 -
ST-Link/V2-1
的固件可以刷成开源的CMSIS-DAP固件
。 -
ST-Link
调试器版本- ST-Link/V2 (最常见),
- ST-Link/V2-1 (增加虚拟串口/VCP功能),
- ST-Link/V3 (性能更强,体积更小)
- ULINK (ArRM/ Keil)
- 由ARM公司(早期由Keil开发维护)为其Keil MDK开发环境设计和优化的官方调试器系列,支持
JTAG, SWD
协议,基于CMSIS-DAP
标准,基于专用硬件设计,本质上就是DAP调试器
。 - 与
Keil µVision IDE
深度集成,提供无缝的调试体验和最佳性能,对其他IDE
的支持不如J-Link
广泛。 - 商业产品,价格较高。
ULink
调试器版本- ULINK-ME (基础),
- ULINK2 (经典),
- ULINKpro (高端, 带跟踪)。
2.3 总结梳理
JTAG
和SWD
是通信协议,绝大部分处理器都支持JTAG
通信,因为JTAG
是调试的通用协议,而SWD
是ARM
的专用调试通信协议。CMSIS-DAP
是ARM规定的调试标准。JLink
是SEGGER
开发的通用调试器,JLink
固件能兼容很多处理器架构的调试标准,兼容CMSIS-DAP
。STM32
内部调试单元支持SWD
和JTAG
两种通信协议。STM32
是ARM
处理器,内部调试单元符合CMSIS-DAP
标准。- 基于
CMSIS-DAP
标准开发的ST-Link
调试器能用于STM32
调试,使用SWD
通信,并使用CMSIS-DAP
标准里规定的指令。 SEGGER
开发的J-Link
能兼容CMSIS-DAP
标准,因此也能用于STM32
调试,使用SWD
或者JTAG
通信协议都可以,使用J-Link
调试器时能使用J-Link
规定的指令进行调试。
三、例子解读
国民技术的官方系统Bootloader和官方Download Tools的使用验证
兆易创新的官方系统Bootloader和官方Download Tools的使用验证