搞嵌入式开发,调试器是日常必备工具。有线连接虽然稳定,但也带来了桌面凌乱、移动不便等困扰,尤其面对大型或位置固定的设备时,往往需要搬着笔记本来回跑,实在麻烦。
因此,无线调试方案应运而生。今天就来分享一个开源的无线调试器项目:wireless-esp8266-dap。它让我们可以摆脱线缆束缚,实现更灵活的调试体验。
wireless-esp8266-dap 项目简介
wireless-esp8266-dap 是一个基于乐鑫 ESP8266 和 ESP32 系列芯片的开源无线调试器项目,旨在为这些芯片本身以及其他支持标准调试接口的 ARM Cortex-M 目标芯片提供便捷的无线调试解决方案。
项目地址:https://github.com/windowsair/wireless-esp8266-dap (MIT license)
主要特性
- 支持的 ESP 主控芯片
- ESP8266/8285
- ESP32
- ESP32C3
- ESP32S3
- 支持的调试接口
- 支持的 USB 通信协议
- USB-HID
- WCID & WinUSB (默认)
- 支持的调试跟踪器
- 其他亮点
- 通过 SPI 接口加速的 SWD 协议(最高可达 40MHz)
- 支持 elaphureLink,可实现无需驱动的快速 Keil 调试
- ...
项目核心在于,你仅需一枚 ESP 芯片即可开启无线调试。其背后结合了 USBIP 协议栈和 CMSIS-DAP 协议栈来实现功能。
性能参考:在 5 米范围内,擦除并烧写一个 100KB 大小的 Hex 固件,耗时约 4 分 24 秒。

对于 Keil MDK 用户,项目还支持 elaphureLink 协议。
elaphureLink 项目地址:https://github.com/windowsair/elaphureLink
这意味着你可以无需配置复杂的 usbip,就能更快速地开始无线调试。这类将硬件调试器功能软件化的开源实战思路,非常值得在云栈社区的开发者圈子中探讨。
如何连接:WIFI 配置与发现
固件默认的 WIFI SSID 是 DAP 或者 OTA,密码是 12345678。
你可以在 wifi_configuration.h 文件中预配置多个无线接入点。此外,也可以在该文件中修改设备的 IP 地址(但更推荐的做法是在路由器中为设备绑定静态 IP)。

固件内置了 mDNS 服务,因此你可以直接通过 dap.local 这个主机名来访问设备,无需记忆 IP 地址。
注意:ESP8266 的 mDNS 仅支持 IPv4。

本地构建与固件烧写 (以 ESP8266 为例)
- 获取 ESP8266 SDK
项目源码中已附带了适配好的 SDK,请勿使用其他版本。
- 编译与烧写
项目使用 ESP-IDF 编译系统进行构建。详细构建指南可参考官方文档。
以下是在命令行中完成编译和烧写的示例:
# 编译项目
python ./idf.py build
# 烧写固件到指定串口(请将 /dev/ttyS5 替换为你的实际串口号)
python ./idf.py -p /dev/ttyS5 flash
使用方法:以 Windows 平台为例
-
获取 USBIP 工具
- Windows: 使用 usbip-win 项目。
- Linux: USBIP 工具已集成在内核中,但本文步骤基于 Windows 平台。
-
启动 ESP8266
将已烧写好固件的 ESP8266 设备上电,并确保其与你的开发电脑连接到同一个 WIFI 网络。
-
通过 USBIP 连接 ESP8266
打开命令行工具,执行以下命令之一进行连接:
# 方式一:HID模式,适用于 SourceForge 上的预编译版本或旧版 usbip-win
.\usbip.exe -D -a <your-esp8266-ip-address> 1-1
# 方式二(推荐):兼容 HID 或 WinUSB 模式,适用于 usbip-win 0.3.0 kmdf ude 版本
.\usbip.exe attach_ude -r <your-esp8266-ip-address> -b 1-1
如果一切顺利,你将在 Windows 设备管理器中看到新的设备被识别。

- 在 Keil MDK 中进行调试
此时,在 Keil MDK 的调试器设置中,你应该能选择到 CMSIS-DAP 调试器,并对其进行配置。这标志着无线调试通道已经建立成功。

这样一来,你就成功搭建了一套无线调试环境。无论是对于固定的工控设备调试,还是需要频繁移动的开发场景,都能极大提升效率。如果你对嵌入式开发或更多开源项目感兴趣,欢迎到技术社区交流心得。