头图

前言

本文算是 DAPLINK 学习的一个引子,主要介绍一下各类调试器及其使用。
接下来我会首先使用合宙 AIR32F103 进行复刻,然后是分析 DAPLINK 源码,最后根据学习情况来自制 DAPLINK。

烧录方式:

  • 1)<font color="red">ISP(In-System Preogramming,在系统编程)</font>:通过 MCU 片内 BootROM 完成在板 Flash 烧写操作

    • (1)要求芯片出厂时带有 ISP 固件程序
    • (2)一般通过串行方式烧写,速度较慢,不适合烧写容量大的代码
    • (3)如:LPC1700 系列芯片,通过串口使用上位机软件 FlashMagic 即可烧写
  • 2)<font color="red">IAP(In-Application Programming,在应用编程)</font>:支持用户程序运行时烧写 Flash

    • (1)要求部分用户程序已经烧写至 MCU 片内 Flash
  • 3)<font color="red">调试接口(JTAG、SWD 等)烧写</font>:借助仿真器 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 接口接法:

参考


送南阳马生序
7 声望3 粉丝

余之业有不精、德有不成,非天质之卑,则心不若他之专耳,岂他人之过哉!