DAP-LINK之debugprobe调试器介绍

DAP-LINK之debugprobe调试器介绍


  • 📍项目地址:https://github.com/raspberrypi/debugprobe
  • 🎈debugprobe官方文档介绍(包含原理图):https://www.raspberrypi.com/documentation/microcontrollers/debug-probe.html

目前该开源工程有2个版本主要是以RP2040/RP2350为主控的DAP-LINK调试器。RP2040/RP2350主控又可以分为debugprobedebugprobe_on_pico版本。

  • 🌿debugprobe版本:理论上支持以ARM内核的单片机,调试和下载程序使用。
    在这里插入图片描述
  • 🌿 debugprobe_on_pico版本:以pico/pico2(RP2040/RP2350)最小系统板制作的,专门为调试树莓派用的,也就是目前ARM内核的RP2040/RP2350,不支持给其他ARM内核单片机调试和下载程序用。
基于RP2040制作的 debugprobe版本调试器,目前个人测试,SWD接口除了支持自家的RP2040/RP2035 ARM内核的 MCU以外,目前手上有的ARM内核不同型号单片机,测试了STM32、AT32、WCH32、 GD32系列,以ARM为内核的不同单片机烧录和在线调试(Keil)功能使用都正常。其他ARM内核的单片机,理论上应该也都是支持的。
  • ⚡基于RP2040制作的Debug Probe,如果主频超频一下,我觉得,应该可以成为目前众多DAP-LINK调试器中,主频运行最高的一款。项目默认的时钟主频是125MHz.DAP_SWD通讯实际使用的频率是有限的,实现的方法是基于RP2040的PIO功能,DAP_SWD频率自动适配。所以主时钟频率的高低对于DAP_SWD通讯速度上不会有提升,但是对于数据的处理会快一些。
  • 🔖DAP-LINK最终的传输速度,手多方面因素影响,RP2040的USB硬件属于USB1.1 PHY, **USB 2.0全速(Full Speed)**模式,理论最大速率为 12 Mbps(1.5 MB/s)。而两个PIO功能用在了实现SWD传输上了,无法在USB输出上再提升硬件加速。即便是换做是RP2350硬件上也是使用的USB1.1。

提升debugprobe调试器性能

1. 提高主频,默认RP2040主频运行在125MHz,可以超频到300MHz.
  • 🎉个人曾测试过RP2040 主频超频300MHz主频,正常运行,部分用户有成功超频至 400 MHz 甚至更高,但这取决于具体硬件和散热条件。需要注意不是所有RP2040芯片都能轻松实现超频并造成运行,有些RP2040芯片因硬件体质差异,具体的超频范围不是确定的,一般超频270MHz以内基本都可以达到这个水平。频率再往上不确定。
  • 👉有关RP2040主频超频内容,可以参考我的相关文章,自己验证超频功能。《RP2040 C SDK clocks时钟源配置使用
  • 🔬个人基于debugprobe此项目基础上,添加对时钟相关的配置,超频运行至300MHz,编译的固件并烧录做了测试,完全能运行,基于Keil给其它单片机做烧录和在线调试正常。我会在下面分享个人编译的固件。
  • 串口1(4,5)打印:
    在这里插入图片描述
  • 🛠修改地方:
  • 超频配置:
//main.c
  vreg_set_voltage(VREG_VOLTAGE_1_30); // 300MHz需要调压,如果<=270MHz不需要加这句
   set_sys_clock_khz(PLL_SYS_KHZ, true);

安全配置倍频方式:

 clock_configure(clk_sys,
    CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX,
    CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB,
    48 * MHZ,
    48 * MHZ);
   // 禁用 PLL_SYS
   pll_deinit(pll_sys);
     vreg_set_voltage(VREG_VOLTAGE_1_30); // 300MHz需要调压,如果270MHz不需要加这句 
     set_sys_clock_khz(PLL_SYS_KHZ, true);//设置系统时钟频率为300MHz,不安全函数
//      pll_init(pll_sys, 1, 1500 * MHZ, 6, 2);
// clock_configure(clk_sys,//设置系统时钟,设置源为PLL_SYS,辅助源为CLK_SYS_AUX,目标频率
//   CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX,
//   CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS,
//   300 * MHZ,
//   300 * MHZ);

//DAP_config.h
/// Processor Clock of the Cortex-M MCU used in the Debug Unit.
/// This value is used to calculate the SWD/JTAG clock speed.300MHz:300000000U
#define CPU_CLOCK               300000000U      ///< Specifies the CPU Clock in Hz.
  • 通过串口1打印主频测试代码:
 uint f_pll_sys = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_PLL_SYS_CLKSRC_PRIMARY);
    // 将f_pll_sys的值通过uart1发送
    char freq_str[32];
    int len = snprintf(freq_str, sizeof(freq_str), "PLL SYS Frequency: %u kHz\n", f_pll_sys);
    uart_write_blocking(PROBE_UART_INTERFACE, (uint8_t *)freq_str, len);
  • 📚主频超频300MHz工程:
  • 🌿修改后的源码工程:https://gitee.com/perseverance51/debugprobe
2. 传输数据包

工程默认USB输入缓冲和输出缓冲数据包大小默认为64(DAP_PACKET_SIZE),修改为512或者1024.以及DAP_PACKET_COUNT默认为2.修改为4或8

//CMSIS_5\CMSIS\DAP\Firmware\Examples\LPC-Link-II\V1\USBD_User_HID_0.c
static uint8_t  USB_Request [DAP_PACKET_COUNT][DAP_PACKET_SIZE];  // Request  Buffer
static uint8_t  USB_Response[DAP_PACKET_COUNT][DAP_PACKET_SIZE];  // Response Buffer

  • 参数配置在include\DAP_config.h
/// Maximum Package Size for Command and Response data.
/// This configuration settings is used to optimize the communication performance with the
/// debugger and depends on the USB peripheral. Typical vales are 64 for Full-speed USB HID or WinUSB,
/// 1024 for High-speed USB HID and 512 for High-speed USB WinUSB.
#define DAP_PACKET_SIZE         1024U            ///< Specifies Packet Size in bytes.
/// Maximum Package Buffers for Command and Response data.
/// This configuration settings is used to optimize the communication performance with the
/// debugger and depends on the USB peripheral. For devices with limited RAM or USB buffer the
/// setting can be reduced (valid range is 1 .. 255).
#define DAP_PACKET_COUNT        4U              ///< Specifies number of packets buffered.2

📘基于RP2040制作debugprobe调试器说明

如果自己手上有pico板子,可以直接从仓库,下载对应版本的烧录文件烧录即可。

  • 📍当前版本资源下载页:https://github.com/raspberrypi/debugprobe/releases/tag/debugprobe-v2.2.1
    在这里插入图片描述
  • .elf后缀文件需要使用DAPLINK进行烧录。.uf2文件直接DFU模式下的虚拟U盘进行烧录。
🔰debugprobedebugprobe_on_pico SWD引脚和电路差异
  • 🌿debugprobe SWD接口原理图部分:

在这里插入图片描述

✨需要注意GPIO13是作为SWDIO_IN_PIN输入引脚,通过一个缓冲区芯片与SWDIO_OUT_PIN输出引脚相连的。如果个人制作,缓冲区芯片可以省略,但是R12和R13不能省掉,或者使用一个肖特基二极管替代。否则下载部分一些ARM内核型号的单片机会出现报错,这个坑我已经踩过了。

  • debugprobe\include\board_debug_probe_config.h

SWDIO  14
SWCLK  12
  • 🌟如果自己编译源码获得固件,其引脚可以自己指定。

在这里插入图片描述
在这里插入图片描述

  • debugprobe_on_pico 制作的话,直接使用pico最新系统板烧录对应的程序即可。

debugprobe_on_pico 电路上没有上面的debugprobe的要求。使用SWD接口调试pico/pico2时,连接的引脚与debugprobe的不同.

  • debugprobe\include\board_pico_config.h
SWDIO  3
SWCLK  2

debugprobe项目如何自己编译

  • 这里主要介绍 window环境下进行编译,如果是其他环境可以直接安装项目文档说明进行操作即可。
  • 此项目工程需要PICO-sdk2.0版本或以上才行。
  • 下载项目:
1. git clone https://github.com/raspberrypi/debugprobe
2. cd debugprobe
3.  git submodule update --init --recursive
  • 🌟在windows环境下,推荐使用VSCode 配合官方插件Raspberry Pi Pico,这样可以免去一系列的环境部署和设置操作。

  • 将项目从github上下载后,在项目文件夹内鼠标右键菜单,使用VSCode打开,如果安装了Raspberry Pi Pico插件,会弹出提示是否导入Raspberry Pi Pico工程。选择是即可导入。
    在这里插入图片描述

  • 默认编译生成的是debugprobe版本文件
    在这里插入图片描述

  • 编译其他型号和版本固件,在CMakelist.txt文件中修改:

option (DEBUG_ON_PICO "Compile firmware for the Pico instead of Debug Probe" OFF)
if (DEBUG_ON_PICO)
    target_compile_definitions (debugprobe PRIVATE
	DEBUG_ON_PICO=1
    )
    if (PICO_BOARD STREQUAL "pico")
        set_target_properties(debugprobe PROPERTIES
            OUTPUT_NAME "debugprobe_on_pico"
        )
    elseif (PICO_BOARD STREQUAL "pico2")
        set_target_properties(debugprobe PROPERTIES
            OUTPUT_NAME "debugprobe_on_pico2"
        )
    else ()
        message(SEND_ERROR "Unsupported board ${PICO_BOARD}")
    endif ()
endif ()
  • 编译DEBUG_ON_PICO固件:
# 设置 DEBUG_ON_PICO 变量为 ON
set(DEBUG_ON_PICO ON)
# 注释掉 option
# option (DEBUG_ON_PICO "Compile firmware for the Pico instead of Debug Probe" OFF)
if (DEBUG_ON_PICO)
    target_compile_definitions (debugprobe PRIVATE
	DEBUG_ON_PICO=1
    )
    if (PICO_BOARD STREQUAL "pico")
        set_target_properties(debugprobe PROPERTIES
            OUTPUT_NAME "debugprobe_on_pico"
        )
    elseif (PICO_BOARD STREQUAL "pico2")
        set_target_properties(debugprobe PROPERTIES
            OUTPUT_NAME "debugprobe_on_pico2"
        )
    else ()
        message(SEND_ERROR "Unsupported board ${PICO_BOARD}")
    endif ()
endif ()
  • 切换RP2040/R02350就不需要动CMakelist.txt文件,执行修改对应型号,再进行编译即可。
    在这里插入图片描述
📗其他基于RP2040制作的DAP-LINK开源项目
  • 🧨https://github.com/kaidegit/pico-link
nanoDAP-wl 是实验室推出的基于cmsis-dap的无线调试器,即插即用,速度快,支持虚拟串口。无线调试器包括发射机/接收机,基于2.4G无线通信,可对10m范围内的目标进行调试下载、单步调试等操作,在某些有线仿真器不便调试的场景,如目标始终处于移动状态(飞行器、小车、机器人等),目标已经组装成产品形态,并且已安装在墙上或者高处等。此时使用无线调试器能较好的解决这些场景下调试问题,有效提高研发效率。 产品特点 使用极简,PC端无需安装额外软件,只需将发射机和接收器分别上电,等待连接成功,即可开始调试 支持SWD协议,典型的基于ARM Cortex-M系列芯片均支持SWD调试,常见的芯片如STM32系列,GD32系列,ATMEL-SAM系列,NORDIC-NRF51/52系列,NXP-LPC系列等芯片均支持SWD调试下载 支持JTAG协议,配合开源调试器OpenOCD可支持全球范围内几乎所有SoC芯片的调试,如ARM Cortex-A系列、DSP、FPGA、MIPS等,因为SWD协议只是ARM自己定义的私有协议,而JTAG则是国际IEEE 1149标准 支持虚拟串口,而且支持同时进行仿真调试和串口输出 接收机支持向目标板供电(5V、3.3V),以及从目标板取电(5V、3.3V)两种方式进行工作 支持MDK/IAR/OpenOCD,支持Windows/Linux/Mac 下进行调试开发 软件基于CMSIS-DAP实现,使用USB HID协议,无需安装驱动即可下载调试 v1.0版本硬件开源、固件开放,可供爱好者自行制作 使用场景用于调试飞行器,小车,机器人,由于调试目标为通常处于移动状态,若使用传统下载器不仅下载比较麻烦,而且无法进行单步调试。 目标板已经组装好外壳,成为产品形态,此时传统的有线方式不便调试。 产品安装在高处,如路灯、高塔等位置,此时使用有线方式不便调试。 产品链接(见附件) 说明 nanoDAP-wl v1.0 版本硬件开源,供爱好者自行制作研究。 固件针对个人开放,请大家加入QQ群 698319017 向群主索取。 更多信息 更多详情,用户手册和原理图等,请在https://github.com/wuxx/nanoDAP-wireless查看。 感兴趣的朋友请加入QQ群 698319017 研究讨论学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值