# 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**: 38 - **Forks**: 16 - **Created**: 2025-03-08 - **Last Updated**: 2026-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: 无线DAPLINK ## README # 本项目未经授权,禁止商用!个人玩家随意折腾~ ### 成品展示 **不想自制的小伙伴可购买成品,淘宝店铺:行一工作室** ![并行工作](./assets/右侧视图-白底图.png) ### 固件升级 **按住【主机键】后上电**,设备管理自动枚举出一个虚拟串口,打开软件`flash_download_tool`,如下图操作: ![固件烧录1](./assets/固件烧录1.png) ![固件烧录1](./assets/固件烧录2.png) ### 简介 软件方案如下: - 芯片型号:ESP32S3 - 无线通信:2.4G(espnow) - USB协议库:cherryusb - USB通信方式:WINUSB 起初使用的S2,实现完毕后到了测速环节发现速度始终上不去,换成了S3后下载速度飞快! 无线速度能达到41KB/s,几乎与ST-LinkV2的速度持平,有线模式能达到100KB/S的速度。 对于大多数单片机来说已经足够用了,因为有好多低端的单片机并不支持高速下载。 由于目前SWD协议还是用IO模拟的,后期如果换成使用硬件SPI模拟SWD协议,速度还能更快! 几经优化,终于实现一边无线下载程序,一边无线串口大数据量收发,同时工作不影响! --- ### 使用介绍 - 使用环境: - Keil-MDK>=5.29 - IAR>=8.32 - 开发板型号:ESP32-S3-DevKitM-1 - 引脚布局: ![引脚布局](./assets/pinlayout.jpg) - 实物: ![示例](./assets/示例.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 | --- ### 工作模式设置 > ***注意:固件刷入后默认有线模式*** - 绿灯:有线模式 - 蓝灯:主机模式 - 黄灯:从机模式 **无线模式设置** 主机:GPIO_NUM_1上电前接3.3V,亮红灯后断开 从机:GPIO_NUM_2上电前接3.3V,亮红灯后断开 执行以上操作后,主从机自动通过广播的形式进行配对,**当主机亮蓝灯**、**从机亮黄灯时**,则配对成功,配对信息掉电后不丢失。 **有线模式设置** GPIO_NUM_1和GPIO_NUM_2上电前接3.3V,亮红灯后断开,等待亮绿灯后表示设置成功,掉电不丢失。 --- ### 无线串口数据流转示意图 ![](./assets/串口数据流传示意图.png) ### 固件编译 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 ``` 漫长的编译等待。。