logo
0
0
WeChat Login

请注意:不同语言版本的翻译可能落后于项目的原始文档。请以原始文档为准。

image

Build Status master  Build Status develop

 PRs Welcome %e2%9d%a4

简介

只需要一枚ESP芯片即可开始无线调试!通过USBIP协议栈和CMSIS-DAP协议栈实现。

👉在5米范围内,擦除并烧写100kb大小的固件(Hex固件) :


对于Keil用户,我们现在支持elaphureLink。无需usbip即可开始您的无线调试之旅!

特性

  1. 支持的ESP芯片

    • ESP8266/8285
    • ESP32
    • ESP32C3
    • ESP32S3
  2. 支持的调试接口:

    • SWD
    • JTAG
  3. 支持的USB通信协议:

    • USB-HID
    • WCID & WinUSB (默认)
  4. 支持的调试跟踪器:

    • TCP转发的串口
  5. 其它

    • 通过SPI接口加速的SWD协议(最高可达40MHz)
    • 支持 elaphureLink,无需驱动的快速Keil 调试
    • 支持 elaphure-dap.js,网页端的 ARM Cortex-M 设备固件烧录调试
    • 支持 OpenOCD-elaphureLink, 无需 USBIP!
    • 支持 OpenOCD/pyOCD
    • ...

连接你的开发板

WIFI连接

固件默认的WIFI SSID是DAP或者OTA,密码是12345678

你可以在wifi_configuration.h文件中添加多个无线接入点。

你还可以在上面的配置文件中修改IP地址(但是我们更推荐你通过在路由器上绑定静态IP地址)。

WIFI

固件中已经内置了一个mDNS服务。你可以通过dap.local的地址访问到设备。

ESP8266的mDNS只支持ipv4。

mDNS

调试接口连接

ESP8266
SWD
SWCLKGPIO14
SWDIOGPIO13
TVCC3V3
GNDGND

JTAG
TCKGPIO14
TMSGPIO13
TDIGPIO4
TDOGPIO16
nTRST (optional)GPIO0*
nRESETGPIO5
TVCC3V3
GNDGND

Other
LED_WIFI_STATUSGPIO15
TxGPIO2
RxGPIO3 (U0RXD)

Rx和Tx用于TCP转发的串口,默认不开启该功能。

ESP32
SWD
SWCLKGPIO14
SWDIOGPIO13
TVCC3V3
GNDGND

JTAG
TCKGPIO14
TMSGPIO13
TDIGPIO18
TDOGPIO19
nTRST (optional)GPIO25
nRESETGPIO26
TVCC3V3
GNDGND

Other
LED_WIFI_STATUSGPIO27
TxGPIO23
RxGPIO22

Rx和Tx用于TCP转发的串口,默认不开启该功能。

ESP32C3
SWD
SWCLKGPIO6
SWDIOGPIO7
TVCC3V3
GNDGND

JTAG
TCKGPIO6
TMSGPIO7
TDIGPIO9
TDOGPIO8
nTRST (optional)GPIO4
nRESETGPIO5
TVCC3V3
GNDGND

Other
LED_WIFI_STATUSGPIO10
TxGPIO19
RxGPIO18

Rx和Tx用于TCP转发的串口,默认不开启该功能。

ESP32S3
SWD
SWCLKGPIO12
SWDIOGPIO11
TVCC3V3
GNDGND

JTAG
TCKGPIO12
TMSGPIO11
TDIGPIO10
TDOGPIO9
nTRST (optional)GPIO14
nRESETGPIO13
TVCC3V3
GNDGND

硬件参考电路

目前这里仅有ESP8266的参考电路。

我们为你提供了一个简单的硬件电路例子作为参考:

sch

除此之外,你也可以像我们一开始给出的那张图片直接用杜邦线连接开发板,这就不需要额外的电路。

此外,你还可以从贡献者那里获得一个完整的硬件参考电路,详见 circuit文件夹。


编译固件并烧写

你可以在本地构建或使用Github Action在线构建固件,然后下载固件进行烧写。

使用Github Action在线构建固件

详见:Build with Github Action

在本地构建并烧写

ESP8266
  1. 获取ESP8266 SDK

    项目中已经随附了一个SDK。请不要使用其他版本的SDK。

  2. 编译和烧写

    使用ESP-IDF编译系统进行构建。 更多的信息,请见:Build System

下面例子展示了在Windows上完成这些任务的一种可行方法:

# 编译
python ./idf.py build
# 烧写
python ./idf.py -p /dev/ttyS5 flash
ESP32/ESP32C3
  1. 获取esp-idf

    目前,请考虑使用esp-idf v4.4.2: https://github.com/espressif/esp-idf/releases/tag/v4.4.2

  2. 编译和烧写

    使用ESP-IDF编译系统进行构建。 更多的信息,请见:Build System

下面例子展示了在Windows上完成这些任务的一种可行方法:

# 编译
idf.py build
# 烧写
idf.py -p /dev/ttyS5 flash

位于项目根目录的idf.py脚本仅适用于较老的ESP8266设备,请不要在ESP32设备上使用。

我们还提供了预编译固件用于快速评估。详见 Releases

使用

  1. 获取USBIP项目
  • Windows: usbip-win
  • Linux:USBIP作为Linux内核的一部分发布,但我们还没有在Linux平台上测试,下面的说明都是在Windows平台下的。
  1. 启动ESP8266并且把ESP8266连接到同一个WIFI下。

  2. 通过USBIP连接ESP8266:

# 仅HID模式,用于SourceForge上的预编译版本或者旧的USBIP版本。
.\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

如果一切顺利,你应该看到你的设备被连接,如下图所示。

image

下面我们用keil MDK来测试:

target


经常会问的问题

Keil提示“RDDI-DAP ERROR”或“SWD/JTAG Communication Failure”

  1. 检查线路连接。别忘了连接3V3引脚。
  2. 检查网络连接是否稳定。

DAP很慢或者不稳定

注意,本项目受限于周围的网络环境。如果你在电脑上使用热点进行连接,你可以尝试使用wireshark等工具对网络连接进行分析。当调试闲置时,线路上应保持静默,而正常工作时一般不会发生太多的丢包。

一些局域网广播数据包可能会造成严重影响,这些包可能由这些应用发出:

  • DropBox LAN Sync
  • Logitech Arx Control
  • ...

对于ESP8266, 这无异于UDP洪水攻击...😰

周围的射频环境同样会造成影响,此外距离、网卡性能等也可能是需要考虑的。

文档

速度策略

单独使用ESP8266通用IO时的最大翻转速率只有大概2MHz。当你选择最大时钟时,我们需要采取以下操作:

  • clock < 2Mhz :与你选择的时钟速度类似。
  • 2MHz <= clock < 10MHz :使用最快的纯IO速度。
  • clock >= 10MHz :使用40MHz时钟的SPI加速。

请注意,这个项目最重要的速度制约因素仍然是TCP连接速度。

对于OpenOCD用户

这个项目最初是为在Keil上运行而设计的,但现在你也可以在OpenOCD上通过它来烧录程序。

> halt
> flash write_image [erase] [unlock] filename [offset] [type]

现已支持 pyOCD

系统 OTA

当这个项目被更新时,你可以通过无线方式更新固件。

请访问以下网站了解OTA操作。在线OTA

对于大多数ESP8266设备,你不需要关心闪存的大小。然而,闪存大小设置不当可能会导致OTA失败。在这种情况下,请用idf.py menuconfig改变闪存大小,或者修改sdkconfig

# 选择一个flash大小
CONFIG_ESPTOOLPY_FLASHSIZE_1MB=y
CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y

# 然后设置flash大小
CONFIG_ESPTOOLPY_FLASHSIZE="2MB"

如果闪存大小为2MB,sdkconfig文件会看起来像这样:

CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y
CONFIG_ESPTOOLPY_FLASHSIZE="2MB"

对于闪存大小为1MB的设备,如ESP8285,必须做以下修改。

CONFIG_PARTITION_TABLE_FILENAME="partitions_two_ota.1MB.csv"
CONFIG_ESPTOOLPY_FLASHSIZE_1MB=y
CONFIG_ESPTOOLPY_FLASHSIZE="1MB"
CONFIG_ESP8266_BOOT_COPY_APP=y

可以用esptool.py工具检查你使用的ESP设备闪存大小:

esptool.py -p (PORT) flash_id

TCP转发的串口

该功能在TCP和Uart之间提供了一个桥梁:

发送数据   ->  TCP  ->  Uart TX -> 外部设备

接收数据   <-  TCP  <-  Uart Rx <- 外部设备

uart_tcp_bridge

当TCP连接建立后,ESP芯片将尝试解决首次发送的文本。当文本是一个有效的波特率时,转发器就会切换到该波特率。例如,发送ASCII文本115200会将波特率切换为115200。 由于性能原因,该功能默认不启用。你可以修改 wifi_configuration.h 来打开它。

elaphure-dap.js

对于 ESP8266 ,该功能默认关闭。可以在 menuconfig 中打开它:

CONFIG_USE_WEBSOCKET_DAP=y

开发

请查看其他分支以了解最新的开发进展。我们欢迎任何形式的贡献,包括但不限于新功能、关于电路的想法和文档。

如果你有什么想法,欢迎在下面提出:

致谢

归功于以下项目、人员和组织。

许可证

MIT 许可证