diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 4e43640..dc31f82 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -14,7 +14,7 @@ on:
jobs:
build:
runs-on: ubuntu-18.04
- continue-on-error: true
+ continue-on-error: false
strategy:
matrix:
target-hardware: [esp8266, esp32, esp32c3]
@@ -66,18 +66,30 @@ jobs:
path: './'
- - name: Merge bin files
- id: merge
- if: matrix.target-hardware != 'esp8266' || matrix.target-hardware == 'esp8266' && steps.script.outputs.status == 'success' && !cancelled()
+ - name: Merge bin files (esp8266)
+ if: matrix.target-hardware == 'esp8266'
run: |
git clone https://github.com/espressif/esptool.git
sudo python3 ./esptool/esptool.py --chip ${{ matrix.target-hardware }} merge_bin -o build/wireless_esp_dap_full.bin 0x0 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/wireless_esp_dap.bin
sudo mv build/wireless_esp_dap.bin build/wireless_esp_dap_app.bin
- echo "::set-output name=status::success"
+
+ - name: Merge bin files (esp32)
+ if: matrix.target-hardware == 'esp32'
+ run: |
+ git clone https://github.com/espressif/esptool.git
+ sudo python3 ./esptool/esptool.py --chip ${{ matrix.target-hardware }} merge_bin -o build/wireless_esp_dap_full.bin 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/wireless_esp_dap.bin
+ sudo mv build/wireless_esp_dap.bin build/wireless_esp_dap_app.bin
+
+ - name: Merge bin files (esp32c3)
+ if: matrix.target-hardware == 'esp32c3'
+ run: |
+ git clone https://github.com/espressif/esptool.git
+ sudo python3 ./esptool/esptool.py --chip ${{ matrix.target-hardware }} merge_bin -o build/wireless_esp_dap_full.bin 0x0 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/wireless_esp_dap.bin
+ sudo mv build/wireless_esp_dap.bin build/wireless_esp_dap_app.bin
+
- name: Upload firmware
uses: actions/upload-artifact@v2
- if: matrix.target-hardware != 'esp8266' || matrix.target-hardware == 'esp8266' && steps.merge.outputs.status == 'success' && !cancelled()
with:
name: firmware_${{ matrix.target-hardware }}.zip
path: |
diff --git a/README.md b/README.md
index cb0b1b5..c173e43 100644
--- a/README.md
+++ b/README.md
@@ -62,7 +62,9 @@ You can also specify your IP in the above file (We recommend using the static ad

-There is built-in ipv4 only mDNS server. You can access the device using `dap.local` .
+There is built-in ipv4 only mDNS server. You can access the device using `dap.local`.
+
+> The mDNS in ESP8266 only supports ipv4.

@@ -127,8 +129,8 @@ There is built-in ipv4 only mDNS server. You can access the device using `dap.lo
|--------------------|---------|
| TCK | GPIO14 |
| TMS | GPIO13 |
-| TDI | GPIO19 |
-| TDO | GPIO18 |
+| TDI | GPIO18 |
+| TDO | GPIO19 |
| nTRST \(optional\) | GPIO25 |
| nRESET | GPIO26 |
| TVCC | 3V3 |
@@ -225,7 +227,7 @@ See: [Build with Github Action](https://github.com/windowsair/wireless-esp8266-d
1. Get ESP8266 RTOS Software Development Kit
- The SDK is already included in the project, please use it for subsequent operations.
+ The SDK is already included in the project. Please don't use other versions of the SDK.
2. Build & Flash
@@ -270,7 +272,7 @@ idf.py -p /dev/ttyS5 flash
-> We also provided sample firmware quick evaluation. See [Releases](https://github.com/windowsair/wireless-esp8266-dap/releases)
+> We also provided sample firmware for quick evaluation. See [Releases](https://github.com/windowsair/wireless-esp8266-dap/releases)
## Usage
diff --git a/README_CN.md b/README_CN.md
index 04461c6..87bf198 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -11,51 +11,75 @@
## 简介
-只需要**一枚ESP8266**即可实现的无线调试器!通过USBIP协议栈和CMSIS-DAP协议栈实现。
+只需要**一枚ESP芯片**即可开始无线调试!通过USBIP协议栈和CMSIS-DAP协议栈实现。
-> 👉在5M速度范围下,擦除并下载100kb大小的固件(Hex固件) 实测图:
+> 👉在5米范围内,擦除并烧写100kb大小的固件(Hex固件) :

+----
+
+对于Keil用户,我们现在支持[elaphureLink](https://github.com/windowsair/elaphureLink)。无需usbip即可开始您的无线调试之旅!
+
## 特性
-1. 支持的调试协议模式和调试接口:
- - [x] SWD(SW-DP)
- - [x] JTAG(JTAG-DP)
- - [x] SWJ-DP
-2. 支持的USB通信协议:
+1. 支持的ESP芯片
+ - [x] ESP8266/8285
+ - [x] ESP32
+ - [x] ESP32C3
+
+2. 支持的调试接口:
+ - [x] SWD
+ - [x] JTAG
+
+3. 支持的USB通信协议:
- [x] USB-HID
- [x] WCID & WinUSB (默认)
-3. 支持的调试跟踪器:
- - [ ] UART TCP桥
-4. 其它
- - [x] 通过SPI接口加速的SWD协议
+4. 支持的调试跟踪器:
+ - [x] TCP转发的串口
+
+5. 其它
+ - [x] 通过SPI接口加速的SWD协议(最高可达40MHz)
+ - [x] 支持[elaphureLink](https://github.com/windowsair/elaphureLink),无需驱动的快速Keil调试
- [x] ...
## 连接你的开发板
### WIFI连接
- 固件默认的WIFI SSID是`DAP`,密码是`12345678`。你可以在[wifi_configuration.h](main/wifi_configuration.h)文件中修改`WIFI_SSID`和` WIFI_PASS`字段来修改ESP8266连接的目标WIFI。你还可以在上面的配置文件中修改IP地址(但是我们更推荐你通过在路由器上绑定静态IP地址)。
+
+固件默认的WIFI SSID是`DAP`或者`OTA`,密码是`12345678`。
+
+你可以在[wifi_configuration.h](main/wifi_configuration.h)文件中添加多个无线接入点。
+
+你还可以在上面的配置文件中修改IP地址(但是我们更推荐你通过在路由器上绑定静态IP地址)。

-ESP8266具有一个内置的mDNS服务(仅ipv4). 你可以通过 `dap.local` 操作设备。
+固件中已经内置了一个mDNS服务。你可以通过`dap.local`的地址访问到设备。
+
+> ESP8266的mDNS只支持ipv4。

+
### 调试接口连接
-| SWD接口 | ESP8266引脚 |
+
+ESP8266
+
+| SWD | |
|----------------|--------|
| SWCLK | GPIO14 |
| SWDIO | GPIO13 |
| TVCC | 3V3 |
| GND | GND |
+
--------------
-| JTAG接口 | ESP8266引脚 |
-| :----------------: | :---------: |
+
+| JTAG | |
+|--------------------|---------|
| TCK | GPIO14 |
| TMS | GPIO13 |
| TDI | GPIO4 |
@@ -67,17 +91,104 @@ ESP8266具有一个内置的mDNS服务(仅ipv4). 你可以通过 `dap.local`
--------------
-| 其它 | ESP8266引脚 |
-|:------------------:|:-------------:|
+| Other | |
+|--------------------|---------------|
| LED\_WIFI\_STATUS | GPIO15 |
| Tx | GPIO2 |
| Rx | GPIO3 (U0RXD) |
-> Rx 和 Tx 被用于UART TCP桥,默然不开启此功能。
+> Rx和Tx用于TCP转发的串口,默认不开启该功能。
+
+
+
+
+
+ESP32
+
+| SWD | |
+|----------------|--------|
+| SWCLK | GPIO14 |
+| SWDIO | GPIO13 |
+| TVCC | 3V3 |
+| GND | GND |
+
+
+--------------
+
+
+| JTAG | |
+|--------------------|---------|
+| TCK | GPIO14 |
+| TMS | GPIO13 |
+| TDI | GPIO18 |
+| TDO | GPIO19 |
+| nTRST \(optional\) | GPIO25 |
+| nRESET | GPIO26 |
+| TVCC | 3V3 |
+| GND | GND |
+
+--------------
+
+| Other | |
+|--------------------|---------------|
+| LED\_WIFI\_STATUS | GPIO27 |
+| Tx | GPIO23 |
+| Rx | GPIO22 |
+
+
+> Rx和Tx用于TCP转发的串口,默认不开启该功能。
+
+
+
+
+
+
+ESP32C3
+
+| SWD | |
+|----------------|--------|
+| SWCLK | GPIO6 |
+| SWDIO | GPIO7 |
+| TVCC | 3V3 |
+| GND | GND |
+
+
+--------------
+
+
+| JTAG | |
+|--------------------|---------|
+| TCK | GPIO6 |
+| TMS | GPIO7 |
+| TDI | GPIO9 |
+| TDO | GPIO8 |
+| nTRST \(optional\) | GPIO4 |
+| nRESET | GPIO5 |
+| TVCC | 3V3 |
+| GND | GND |
+
+--------------
+
+| Other | |
+|--------------------|---------------|
+| LED\_WIFI\_STATUS | GPIO10 |
+| Tx | GPIO19 |
+| Rx | GPIO18 |
+
+
+> Rx和Tx用于TCP转发的串口,默认不开启该功能。
+
+
+
+
----
## 硬件参考电路
+
+目前这里仅有ESP8266的参考电路。
+
+
我们为你提供了一个简单的硬件电路例子作为参考:

@@ -98,30 +209,64 @@ ESP8266具有一个内置的mDNS服务(仅ipv4). 你可以通过 `dap.local`
### 在本地构建并烧写
-下面展示的是在Ubuntu20.04中使用终端安装依赖软件并编译烧录固件的操作流程。
-1. 下载本仓库到本地:
- ```bash
- $ sudo apt update && sudo apt install -y cmake git
- $ git clone https://github.com/windowsair/wireless-esp8266-dap.git && cd wireless-esp8266-dap*
- ```
-2. 获取ESP8266 RTOS软件开发套件:
- ```bash
- $ git submodule init && git submodule update && cd ESP8266_RTOS_SDK
- ```
-3. 安装ESP8266 RTOS软件开发套件:
- ```bash
- $ sudo apt install -y python3 python3-pip
- $ ./install.sh && . ./export.sh && cd ..
- ```
-4. 编译并烧录固件:
- ```bash
- # 编译固件
- $ python3 ./idf.py build
- # 烧录固件,“/dev/ttyS5”需要改成你对应的串口
- $ python3 ./idf.py -p /dev/ttyS5 flash
- ```
-> 我们也提供了已经编译好的固件用于快速评估。在[Releases](https://github.com/windowsair/wireless-esp8266-dap/releases)中查看详细信息。
+
+ESP8266
+
+1. 获取ESP8266 SDK
+
+ 项目中已经随附了一个SDK。请不要使用其他版本的SDK。
+
+2. 编译和烧写
+
+ 使用ESP-IDF编译系统进行构建。
+ 更多的信息,请见:[Build System](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html "Build System")
+
+
+下面例子展示了在Windows上完成这些任务的一种可行方法:
+
+```bash
+# 编译
+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](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html "Build System")
+
+
+下面例子展示了在Windows上完成这些任务的一种可行方法:
+
+```bash
+# 编译
+idf.py build
+# 烧写
+idf.py -p /dev/ttyS5 flash
+```
+
+
+> 位于项目根目录的`idf.py`脚本仅适用于较老的ESP8266设备,请不要在ESP32设备上使用。
+
+
+
+
+> 我们还提供了预编译固件用于快速评估。详见 [Releases](https://github.com/windowsair/wireless-esp8266-dap/releases)
+
+
+
## 使用
@@ -152,9 +297,33 @@ ESP8266具有一个内置的mDNS服务(仅ipv4). 你可以通过 `dap.local`
------
+## 经常会问的问题
+
+### Keil提示“RDDI-DAP ERROR”或“SWD/JTAG Communication Failure”
+
+1. 检查线路连接。别忘了连接3V3引脚。
+2. 检查网络连接是否稳定。
+
+
+## DAP很慢或者不稳定
+
+注意,本项目受限于周围的网络环境。如果你在电脑上使用热点进行连接,你可以尝试使用wireshark等工具对网络连接进行分析。当调试闲置时,线路上应保持静默,而正常工作时一般不会发生太多的丢包。
+
+一些局域网广播数据包可能会造成严重影响,这些包可能由这些应用发出:
+- DropBox LAN Sync
+- Logitech Arx Control
+- ...
+
+对于ESP8266, 这无异于UDP洪水攻击...😰
+
+
+周围的射频环境同样会造成影响,此外距离、网卡性能等也可能是需要考虑的。
+
+
+
## 文档
-### 速度性能
+### 速度策略
单独使用ESP8266通用IO时的最大翻转速率只有大概2MHz。当你选择最大时钟时,我们需要采取以下操作:
@@ -215,13 +384,13 @@ CONFIG_ESPTOOLPY_FLASHSIZE="1MB"
CONFIG_ESP8266_BOOT_COPY_APP=y
```
-可以用esptool.py工具检查你使用的ESP8266的闪存大小:
+可以用esptool.py工具检查你使用的ESP设备闪存大小:
```bash
esptool.py -p (PORT) flash_id
```
-### Uart TCP桥
+### TCP转发的串口
该功能在TCP和Uart之间提供了一个桥梁:
```
@@ -232,7 +401,7 @@ esptool.py -p (PORT) flash_id

-当TCP连接建立后,网桥将尝试解决首次发送的文本。当文本是一个有效的波特率时,bridge 将切换到它。例如,发送ASCII文本`115200`会将波特率切换为115200。
+当TCP连接建立后,ESP芯片将尝试解决首次发送的文本。当文本是一个有效的波特率时,转发器就会切换到该波特率。例如,发送ASCII文本`115200`会将波特率切换为115200。
由于性能原因,该功能默认不启用。你可以修改 [wifi_configuration.h](main/wifi_configuration.h) 来打开它。
----
@@ -245,31 +414,6 @@ esptool.py -p (PORT) flash_id
- [新的Issues](https://github.com/windowsair/wireless-esp8266-dap/issues)
- [新的pull request](https://github.com/windowsair/wireless-esp8266-dap/pulls)
-### 版本修订信息
-
-2020.12.1
-
-TCP传输速度需要进一步提高。
-
-2020.11.11
-
-现在可以使用Winusb了,但它非常慢。
-
-2020.2.4
-
-由于USB-HID的限制(不知道是USBIP的问题还是Windows的问题),现在每个URB数据包只能达到255字节(约1MBps带宽),还没有达到ESP8266传输带宽的上限。
-
-我现在有一个想法,在两者之间构建一个中间人来转发流量,从而增加每次传输的带宽。
-
-2020.1.31
-
-目前,对WCID、WinUSB等的适配已经全部完成。然而,当在端点上传输数据时,我们收到了来自USBIP的错误信息。这很可能是USBIP项目本身的问题。
-
-由于USBIP协议文件的完整性,我们还没有理解它在批量传输过程中的作用,这也可能导致后续过程中的错误。
-
-我们将继续努力使其在USB HID上发挥作用。一旦USBIP的问题得到解决,我们将立即将其转移到WinUSB上工作
-
-------
# 致谢
diff --git a/sdkconfig.defaults.esp32c3 b/sdkconfig.defaults.esp32c3
index 57f349d..e6fa97c 100644
--- a/sdkconfig.defaults.esp32c3
+++ b/sdkconfig.defaults.esp32c3
@@ -380,7 +380,7 @@ CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES=4
# Sleep Config
#
CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y
-CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y
+# CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set
# CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND is not set
# end of Sleep Config
@@ -452,8 +452,7 @@ CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y
# Memory protection
#
CONFIG_ESP_SYSTEM_MEMPROT_DEPCHECK=y
-CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y
-CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y
+# CONFIG_ESP_SYSTEM_MEMPROT_FEATURE is not set
CONFIG_ESP_SYSTEM_MEMPROT_CPU_PREFETCH_PAD_SIZE=16
CONFIG_ESP_SYSTEM_MEMPROT_MEM_ALIGN_SIZE=512
# end of Memory protection
@@ -497,17 +496,17 @@ CONFIG_ESP_TIMER_IMPL_SYSTIMER=y
# Wi-Fi
#
CONFIG_ESP32_WIFI_ENABLED=y
-CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10
-CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32
+CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=16
+CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=64
# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
-CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
+CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=64
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
-CONFIG_ESP32_WIFI_TX_BA_WIN=6
+CONFIG_ESP32_WIFI_TX_BA_WIN=32
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
-CONFIG_ESP32_WIFI_RX_BA_WIN=6
+CONFIG_ESP32_WIFI_RX_BA_WIN=32
CONFIG_ESP32_WIFI_NVS_ENABLED=y
CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752
CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32
@@ -633,8 +632,7 @@ CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set
-CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y
-# CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set
+# CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT is not set
# end of FreeRTOS
#
@@ -693,7 +691,7 @@ CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
#
# LWIP
#
-CONFIG_LWIP_LOCAL_HOSTNAME="espressif"
+CONFIG_LWIP_LOCAL_HOSTNAME="esp32c3-dap"
# CONFIG_LWIP_NETIF_API is not set
# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
@@ -716,7 +714,7 @@ CONFIG_LWIP_IP6_FRAG=y
# CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set
CONFIG_LWIP_ESP_GRATUITOUS_ARP=y
CONFIG_LWIP_GARP_TMR_INTERVAL=60
-CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=50
CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
@@ -737,8 +735,7 @@ CONFIG_LWIP_IPV6=y
CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
# CONFIG_LWIP_IPV6_FORWARD is not set
# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# CONFIG_LWIP_NETIF_LOOPBACK is not set
#
# TCP
@@ -981,9 +978,8 @@ CONFIG_MDNS_MULTIPLE_INSTANCE=y
#
# ESP-MQTT Configurations
#
-CONFIG_MQTT_PROTOCOL_311=y
+# CONFIG_MQTT_PROTOCOL_311 is not set
# CONFIG_MQTT_TRANSPORT_SSL is not set
-# CONFIG_MQTT_TRANSPORT_WEBSOCKET is not set
# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set
# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set
# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set