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主控又可以分为
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);
- 📚主频超频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盘进行烧录。
🔰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开源项目
- 🧨
https://github.com/kaidegit/pico-link