# AK-LinkW_CMSIS-DAP **Repository Path**: jhembed/AK-LinkW_CMSIS-DAP ## Basic Information - **Project Name**: AK-LinkW_CMSIS-DAP - **Description**: 使用ESP32S3实现的DAP-Link无线调试器,无线速度比肩有线STLink-V2! - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 17 - **Forks**: 11 - **Created**: 2025-03-08 - **Last Updated**: 2025-06-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: 无线DAPLINK ## README # 本项目未经授权,禁止商用!个人玩家随意折腾~ ### 成品展示 **不想自制的小伙伴可购买成品,淘宝店铺:行一工作室** ![并行工作](./pictures/右侧视图-白底图.jpg) ### 开发背景 #### 遇到需求 目前市面上调试器使用的较多的有ST-LinkV2、ST-linkV2.1、J-Link OB、DAP-Link等,但这些调试器无一例外都各有各的缺陷,并且都是有线的,在一些场景下使用有线调试器不方便:例如: 1. 有关电机的项目,有线连接怕烧掉电脑USB口 2. 受项目实际环境限制,有线连接不够长、或无法通过有线连接到电脑 针对以上使用需求,作者开始找无线的调试器,找到的结果要么是**速度快的价格贵**,如某点原子,300+的价格太让人劝退了。。。要么是**价格便宜的速度贼慢**,根本达不到正常的使用需求,又或者**无法同时使用DAP和虚拟CDC串口**,无奈,由于找不到又便宜、又好用、速度又快的,只好自己做了。。。 #### 发现缺陷 开源DAP-Link发展到今天,有一些普遍缺陷虽然已经被大家解决了,但是还是有一些小问题没有被解决。 ##### 缺陷1:无软件复位 作者日常开发使用做多最频繁的调试器就是DAP-Link,在前几年的时候,市面上卖的DAP-Link都没有软件复位的功能,也就是必须是5线制(多了一个RESET),发展到今天,大家搞得DAP-Link基本才都有了像ST-Link一样的软件复位,不需要接硬件RESET或手动断电了。 这里我得捧一下我自己^_^,之前在CSDN上发了一篇博文:[十分钟快速自制CMSIS_DAP仿真器~将ST-LINK-V2变身DAP仿真器~_cmsis-dap-CSDN博客](https://blog.csdn.net/qq153471503/article/details/120333511),虽然这边博文是USB使用的是HID方式,传输速度较慢,但在这篇博文里讲了怎么把软件复位加上去,帮助了不少人^_^ --- ### 解决问题 针对作者本人遇到这些使用问题,最终使用ESP32来实现,起初使用的S2,实现完毕后到了测速环节发现速度始终上不去,换成了S3后下载速度飞快!无线速度能达到41KB/s,几乎赶上ST-LinkV2的速度了!而有线模式更快,能达到100KB/S的速度! ##### 解决1:下载速度慢 软件方案如下: - 芯片型号:ESP32S3 - 无线通信:ESPNOW - USB协议库:cherryusb - USB通信方式:WINUSB 再结合S3双核的特性,有线模式下能到100Kb/s,无线模式41Kb/s,下载速度直接拉满。 对于大多数单片机来说已经足够用了,因为有好多低端的单片机并不支持高速下载。 由于目前SWD协议还是用IO模拟的,后期如果换成使用硬件SPI模拟SWD协议,速度还能更快! ##### 解决2:其他无线DAP无法同时使用CDC串口 这个问题优化了好久的软件,最终实现了使用开发板5Mbps的波特率,一边无线下载程序,一边无线串口大数据量收发,同时工作不影响。 --- ### 使用介绍 - 使用环境: - Keil-MDK>=5.29 - IAR>=8.32 - 开发板型号:ESP32-S3-DevKitM-1 - 引脚布局: ![引脚布局](./pictures/pinlayout.jpg)      - 实物: ![示例](./pictures/示例.png) --- ### 引脚使用情况 | 引脚名称 | GPIO编号 | 备注 | |:---------:|:-----------:|:------:| | TCK/SWCLK | GPIO_NUM_4 | - | | TMS/SWDIO | GPIO_NUM_5 | - | | TDI | GPIO_NUM_6 | - | | TDO | GPIO_NUM_7 | - | | nRESET | GPIO_NUM_15 | - | | nTRST | GPIO_NUM_16 | - | | UART_TX | GPIO_NUM_17 | - | | UART_RX | GPIO_NUM_18 | - | | RGB_LED | GPIO_NUM_48 | - | | 主机按键 | GPIO_NUM_1 | 按下为高电平 | | 从机按键 | GPIO_NUM_2 | 按下为高电平 | > **注意:如果使用开发板测试,上电后把主机按键(GPIO_NUM_1)接到GND上,否则由于IO电平不稳定,程序会一直对按键进行消抖处理,导致无线下载速度慢!** --- ### 下载速度测试 ***注:测量是手动掐秒表计时,下载速度受芯片型号、线损、WIFI干扰等多方面的因素影响,以下测试速度仅供参考。*** **有线模式、无线模式、ST-LinkV2擦除和校验的时间基本差不多的,所以下载速度的评定以编程时间来计算。** - 测试芯片:STM32F407VGT6 - 测试大小:1000K - 测试软件:Keil-MDK - 测试方式:扇区擦除+编程+校验 | 调试器类型 | 编程耗时 | 总耗时 | 理论下载速度 | | --------- | ----- | ----- | -------- | | STLink V2 | 23.XX | 37.XX | ≈43Kb/s | | S3无线模式 | 27.XX | 40.XX | ≈41Kb/s | | S3有线模式 | 10.XX | 24.XX | ≈100Kb/s | --- ### 并行工作互不影响 **无线CDC串口和DAP同时工作,互不影响。** 测试方法:发送端使用Keil启动程序烧录,接收端TX和RX短接使用高波特率CDC串口回环收发。 测试效果: ![并行工作](./pictures/并行使用.gif) --- ### 工作模式设置 ***注意:固件刷入后默认有线模式*** - 绿灯:有线模式 - 蓝灯:主机模式 - 黄灯:从机模式 #### 无线模式设置 主机:GPIO_NUM_1上电前接3.3V,亮红灯后断开 从机:GPIO_NUM_2上电前接3.3V,亮红灯后断开 执行以上操作后,主从机自动通过广播的形式进行配对,**当主机亮蓝灯**、**从机亮黄灯时**,则配对成功,配对信息掉电后不丢失。 #### 有线模式设置 GPIO_NUM_1和GPIO_NUM_2上电前接3.3V,亮红灯后断开,等待亮绿灯后表示设置成功,掉电不丢失。 --- ### 信道更换 > 利用七彩色:红、橙、黄、绿、青、蓝、紫,代表8-14区间的7个信道。 无线速率受WIFI信号干扰的影响,默认14信道(紫色),如果下载速度慢,请尝试更换其他信道。 更换信道步骤: - **上电后**,长按主机键3秒,等待灯灭; - 松开按键,RGB灯闪烁三下,代表进入信道设置; - 单击从机按键更换信道,七种颜色循环显示; - 重新上电后生效。 **信道设置后,掉电不丢失。** --- ### 固件编译 0、清理工程: ```bash idf.py clean ``` 1、设置目标芯片: ```bash idf.py set-target esp32s3 ``` 2、打开图形化配置: ```bash idf.py menuconfig ``` 3、将时钟运行到240Mhz ```bash Component config ---> ESP System Settings ---> CPU frequency (240 MHz) ---> ``` 4、使能高分辨率定时器的回调函数在中断中执行 ```bash Component config --->     ESP Timer (High Resolution Timer) --->         [*] Support ISR dispatch method ``` 5、关闭开门狗(影响DAP和CDC收发的效率) ```bash Bootloader config ---> [ ] Use RTC watchdog in start code Component config --->     ESP System Settings --->         [ ] Interrupt watchdog         [ ] Enable Task Watchdog Timer ``` 6、开启CherryUSB ```bash Component config ---> [*] CherryUSB Configuration ---> [*] Enable usb device mode ---> Select usb device speed (FS) ---> Select usb device ip, and some ip need config in usb_config.h, please check (dwc2_esp) ---> [*] Enable usb cdc acm device [*] Enable usb hid device ``` 7、调整espnow默认信道为14 ```bash Example Configuration --->     (14) Channel ``` 8、修改cherryusb的配置文件 开启cherryusb描述符的高级用法,在`managed_components\cherry-embedded__cherryusb\osal\idf\usb_config.h`文件的最后一行加入: ```c #define CONFIG_USBDEV_ADVANCE_DESC ``` 10、编译: ```bash idf.py build ``` 漫长的编译等待。。