问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

DAP-LINK之debugprobe调试器介绍

创作时间:
作者:
@小白创作中心

DAP-LINK之debugprobe调试器介绍

引用
CSDN
1.
https://blog.csdn.net/weixin_42880082/article/details/146158345

DAP-LINK调试器是嵌入式系统开发中常用的硬件调试工具,而基于RP2040/RP2350的debugprobe项目则为开发者提供了一个开源且功能强大的选择。本文将详细介绍该项目的功能、使用方法以及性能优化技巧,帮助读者更好地利用这一工具进行嵌入式系统开发。

DAP-LINK之debugprobe调试器介绍

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

debugprobe_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);
  1. 传输数据包
    工程默认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板子,可以直接从仓库,下载对应版本的烧录文件烧录即可。

.uf2
文件直接DFU模式下的虚拟U盘进行烧录。

🔰
debugprobe

debugprobe_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-sdk
    2.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开源项目

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号