DAPLINK 之仿真调试器介绍
前言
本文算是 DAPLINK 学习的一个引子,主要介绍一下各类调试器及其使用。
接下来我会首先使用合宙 AIR32F103 进行复刻,然后是分析 DAPLINK 源码,最后根据学习情况来自制 DAPLINK。
烧录方式:
-
1)ISP(In-System Preogramming,在系统编程):通过 MCU 片内 BootROM 完成在板 Flash 烧写操作
- (1)要求芯片出厂时带有 ISP 固件程序
- (2)一般通过串行方式烧写,速度较慢,不适合烧写容量大的代码
- (3)如:LPC1700 系列芯片,通过串口使用上位机软件 FlashMagic 即可烧写
-
2)IAP(In-Application Programming,在应用编程):支持用户程序运行时烧写 Flash
- (1)要求部分用户程序已经烧写至 MCU 片内 Flash
-
3)调试接口(JTAG、SWD 等)烧写:借助仿真器 MCU 的调试接口控制 MCU 完成片内 Flash,甚至外扩的 Flash 烧写
- (1)适合前期开发调试阶段,量产后一般不同保留这种接口,除非是开发板
1 协议
1.1 JTAG 协议
- JTAG(Joint Test Action Group,联合测试工作组)是一种国际标准测试协议,主要用于芯片测试。
- 多数芯片都支持 JTAG 协议,并提供以下引脚来实现:
- TCK:测试时钟输入
- TDI:测试数据输入,数据通过 TDI 输入 JTAG 口
- TDO:测试数据输出,数据通过 TDO 从 JTAG 口输出
- TMS:测试模式选择,TMS 用来设置 JTAG 口处于某种特定的测试模式
- TRST:可选引脚,测试复位输入引脚,低电平有效
一个 IEEE 小组专注于硅芯片测试方法。 许多调试和编程工具都使用联合测试
动作组(JTAG)接口端口, 用于与处理器通信。
参见 IEEE Std 1149.1-1990《IEEE 标准测试访问端口和边界扫描体系结构规范》 ,
来自 IEEE 标准协会。—— 出自创芯工坊《用户手册》。
1.2 SWD 协议
-
SWD(Serial Wire Debug,串行调试),也是 ARM 内核调试器的一种通信协议。相比 JTAG 协议,占用更少的端口资源。
-
JTAG 协议与 SWD 协议端口对比:
使用 SOC 和调试器之间的串行连接的调试实现。 这个连接正常需要一个双向数据信号和一个单独的时钟信号, 而不是 JTAG 所需的 4 到 6 个信号连接。—— 出自创芯工坊《用户手册》。
2 调试仿真器
- 嵌入式开发时,连接电脑与单片机,用于调试、仿真、下载程序的设备。
2.1 ST-Link 仿真器
-
ST(意法半导体)官方发布了 3 种仿真器:ST-LINK、ST-LINK/V2、STLINK-V3SET,用于 STM8 和 STM32 系列芯片仿真。
-
ST-Link 仿真器支持 SWIM / JTAG / SWD 协议下载,其中 SWIM 协议是一种用于 STM8 微控制器的调试编程协议。
ST-LINK/V2 实物及引脚说明:
2.2 ULink 仿真器
- ULink 是 ARM/Keil 公司的仿真器,因此仅可在 Keil 上使用,支持 JTAG / SWD 下载。
ULink 仿真器实物图:
2.3 J-Link 仿真器
- J-Link 是德国 SEGGER 公司的仿真器,得到所有主流 IDE 的支持,支持 SWIM / JTAG / SWD 下载下载。
J-Link 仿真器实物图:
2.4 DAPLINK 仿真器
DAPLINK 仿真器是一类基于 ARM 开源的 DAPLINK(https://github.com/ARMmbed/DAPLink.git)实现,并修改优化的仿真器。
- 如手头的 PWLINK2 是创芯工坊推出的 PowerWriter 系列中的产品,集成了调试器(Debugger)+ 烧录工具(Programmer)
PWLINK 仿真器实物图片:
3 LINKer 搭配 CLion 的使用
以下方式均基于 OpenOCD 实现烧录
3.1 ST-Link + CLion + STM32F103RCT6
-
(1)使用 STM32CubeMX 初始化工程,并编写完成代码
-
(2)创建 ./config/stlink.cfg 文件,并添加:
# choose st-link/j-link/dap-link etc. # adapter driver cmsis-dap # transport select swd source [find interface/stlink.cfg] transport select hla_swd source [find target/stm32f1x.cfg] # download speed = 10MHz adapter speed 10000
从上述配置文件中注意到:接口配置文件为 stlink.cfg,目标配置文件为 stm32f1x.cfg,且传输方式选择 hla_swd。
- (3)选择上面添加的文件(当然最好是选择 OpenOCD 自带的安装目录下的 board/st_nucleo_f103rb.cfg 文件):
3.2 DAPLINK + CLion + STM32F103RCT6
-
(1)使用 STM32CubeMX 初始化工程,并编写完成代码
-
(2)创建 ./config/daplink.cfg 文件,并添加:
# choose st-link/j-link/dap-link etc. adapter driver cmsis-dap transport select swd source [find target/stm32f1x.cfg]
从上述配置文件中注意到:虽然未使用接口配置文件,但手动设置适配驱动器选择 cmsis-dap,传输方式选择 swd,目标配置文件为 stm32f1x.cfg。
由此可知,interface 文件中一般配置烧录器支持的驱动协议。
- (3)选择上面添加的文件:
- (4)PWLINK 与 JTAG 接口接法: