feat: Improve WINUSB transfer speed
This commit is contained in:
parent
635999afa3
commit
bc63a07a9b
|
@ -3,5 +3,7 @@
|
|||
cmake_minimum_required(VERSION 3.5)
|
||||
#set(COMPONENT_DIRS "${IDF_PATH}/components ${PROJECT_PATH}/components")
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/main)
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(esp8266_dap)
|
||||
|
|
31
README.md
31
README.md
|
@ -1,8 +1,8 @@
|
|||
<p align="center"><img src="https://user-images.githubusercontent.com/17078589/73821108-300bda00-482e-11ea-89f6-011a50037a12.png"/></p>
|
||||
<h1 align="center">Wireless ESP8266 DAP</h1>
|
||||
|
||||
[](https://travis-ci.com/windowsair/wireless-esp8266-dap) master
|
||||
[](https://travis-ci.com/windowsair/wireless-esp8266-dap) develop
|
||||
[](https://github.com/windowsair/wireless-esp8266-dap/actions?query=branch%3Amaster) master
|
||||
[](https://github.com/windowsair/wireless-esp8266-dap/actions?query=branch%3Adevelop) develop
|
||||
|
||||
[](https://github.com/windowsair/wireless-esp8266-dap/LICENSE) [](https://github.com/windowsair/wireless-esp8266-dap/pulls) [](https://github.com/windowsair/wireless-esp8266-dap)
|
||||
|
||||
|
@ -32,8 +32,9 @@ Realized by USBIP and CMSIS-DAP protocol stack.
|
|||
- [ ] SWO Streaming Trace
|
||||
|
||||
4. More..
|
||||
- [x] Custom maximum debug clock ~~(more than 10MHz)~~ (experimental)
|
||||
- [ ] ...
|
||||
- [x] Custom maximum debug clock (40MHz, SWD only)
|
||||
- [x] SWD protocol based on SPI acceleration
|
||||
- [x] ...
|
||||
|
||||
|
||||
|
||||
|
@ -82,6 +83,14 @@ You can modify these pin definitions in [DAP_config.h](components/DAP/config/DAP
|
|||
|
||||
## Build
|
||||
|
||||
You can build locally or use Github Action to build online
|
||||
|
||||
### Build with Github Action Online
|
||||
|
||||
See: [Build with Github Action](https://github.com/windowsair/wireless-esp8266-dap/wiki/Build-with-Github-Action)
|
||||
|
||||
### General build
|
||||
|
||||
1. Get ESP8266 RTOS Software Development Kit
|
||||
|
||||
For now, use the 3.3-rc1 version of the SDK (this is a known issue)
|
||||
|
@ -117,14 +126,14 @@ python ./idf.py -p /dev/ttyS5 flash
|
|||
3. Connect it with usbip:
|
||||
|
||||
```bash
|
||||
# HID Mode
|
||||
# HID Mode only
|
||||
# for pre-compiled version on SourceForge
|
||||
# or usbip old version
|
||||
.\usbip.exe -D -a <your-esp8266-ip-address> 1-1
|
||||
|
||||
# HID Mode Or WinUSB Mode
|
||||
# for usbip-win 0.3.0 kmdf ude
|
||||
.\usbip.exe attach-ude -r <your-esp8266-ip-address> -b 1-1
|
||||
.\usbip.exe attach_ude -r <your-esp8266-ip-address> -b 1-1
|
||||
|
||||
```
|
||||
|
||||
|
@ -141,6 +150,8 @@ Then test it under MDK:
|
|||
|
||||
## Develop
|
||||
|
||||
0. Check other branches to know the latest development progress.
|
||||
|
||||
1. Use WinUSB Mode:
|
||||
|
||||
change `USE_WINUSB` macor in [USBd_config.h](components/USBIP/USBd_config.h)
|
||||
|
@ -153,16 +164,20 @@ Then test it under MDK:
|
|||
> - https://github.com/cezanne/usbip-win for usbip windows
|
||||
|
||||
|
||||
In this repo you can find the complete implementation of the USB protocol stack including USB-HID, WCID, WinUSB. Although WinUSB-based mode currently does not work on USBIP :disappointed_relieved: . They are very easy and can help you quickly build your own DAP on other hardware platforms.
|
||||
In this repo you can find the complete implementation of the USB protocol stack including USB-HID, WCID, WinUSB. ~~Although WinUSB-based mode currently does not work on USBIP~~ :disappointed_relieved: . They are very easy and can help you quickly build your own DAP on other hardware platforms.
|
||||
|
||||
|
||||
Currently using USB-HID for transmission is still slightly slower, If you have any ideas, welcome:
|
||||
Currently TCP transmission speed needs to be further improved, If you have any ideas, welcome:
|
||||
- [New issues](https://github.com/windowsair/wireless-esp8266-dap/issues)
|
||||
- [New pull](https://github.com/windowsair/wireless-esp8266-dap/pulls)
|
||||
|
||||
|
||||
### Issue
|
||||
|
||||
2020.12.1
|
||||
|
||||
TCP transmission speed needs to be further improved.
|
||||
|
||||
2020.11.11
|
||||
|
||||
Winusb is now available, but it is very slow.
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include "esp8266/pin_mux_register.h"
|
||||
|
||||
#include "spi_switch.h"
|
||||
|
||||
#include "dap_configuration.h"
|
||||
//**************************************************************************************************
|
||||
/**
|
||||
\defgroup DAP_Config_Debug_gr CMSIS-DAP Debug Unit Information
|
||||
|
@ -98,18 +98,11 @@ This information includes:
|
|||
#define DAP_DEFAULT_SWJ_CLOCK 1000000U ///< Default SWD/JTAG clock frequency in Hz.
|
||||
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<1MHz
|
||||
|
||||
/// Maximum Package Size for Command and Response data.
|
||||
/// This configuration settings is used to optimize the communication performance with the
|
||||
/// debugger and depends on the USB peripheral. Typical vales are 64 for Full-speed USB HID or WinUSB,
|
||||
/// 1024 for High-speed USB HID and 512 for High-speed USB WinUSB.
|
||||
#define DAP_PACKET_SIZE 255U ///< Specifies Packet Size in bytes.
|
||||
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<< 512 for High-speed USB WinUSB.
|
||||
|
||||
/// Maximum Package Buffers for Command and Response data.
|
||||
/// This configuration settings is used to optimize the communication performance with the
|
||||
/// debugger and depends on the USB peripheral. For devices with limited RAM or USB buffer the
|
||||
/// setting can be reduced (valid range is 1 .. 255).
|
||||
#define DAP_PACKET_COUNT 20 ///< Specifies number of packets buffered.
|
||||
#define DAP_PACKET_COUNT 255 ///< Specifies number of packets buffered.
|
||||
|
||||
/// Indicate that UART Serial Wire Output (SWO) trace is available.
|
||||
/// This information is returned by the command \ref DAP_Info as part of <b>Capabilities</b>.
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
# TODO
|
||||
1. USB
|
|
@ -272,6 +272,7 @@ static void handleGetDescriptor(usbip_stage2_header *header)
|
|||
os_printf("low bit : %d\r\n", (int)header->u.cmd_submit.request.wValue.u8lo);
|
||||
os_printf("high bit : %d\r\n", (int)header->u.cmd_submit.request.wValue.u8hi);
|
||||
os_printf("***Unsupported String descriptor***\r\n");
|
||||
send_stage2_submit(header, 0, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef __USBD_CONFIG_H__
|
||||
#define __USBD_CONFIG_H__
|
||||
|
||||
#define USE_WINUSB 0
|
||||
#include "dap_configuration.h"
|
||||
|
||||
// Vendor ID assigned by USB-IF (idVendor).
|
||||
#define USBD0_DEV_DESC_IDVENDOR 0xC251
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "DAP.h"
|
||||
#include "esp_libc.h"
|
||||
#include "USBd_config.h"
|
||||
#include "dap_configuration.h"
|
||||
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
|
@ -32,8 +33,6 @@ extern TaskHandle_t kDAPTaskHandle;
|
|||
|
||||
int kRestartDAPHandle = 0;
|
||||
|
||||
////TODO: Merge this
|
||||
#define DAP_PACKET_SIZE 255
|
||||
|
||||
#if (USE_WINUSB == 1)
|
||||
typedef struct
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
#ifndef __DAP_CONFIGURATION_H__
|
||||
#define __DAP_CONFIGURATION_H__
|
||||
|
||||
/**
|
||||
* @brief Specify the use of WINUSB
|
||||
*
|
||||
*/
|
||||
#define USE_WINUSB 1
|
||||
|
||||
/// Maximum Package Size for Command and Response data.
|
||||
/// This configuration settings is used to optimize the communication performance with the
|
||||
/// debugger and depends on the USB peripheral. Typical vales are 64 for Full-speed USB HID or WinUSB,
|
||||
/// 1024 for High-speed USB HID and 512 for High-speed USB WinUSB.
|
||||
|
||||
#if (USE_WINUSB == 1)
|
||||
#define DAP_PACKET_SIZE 512U // 512 for WinUSB.
|
||||
#else
|
||||
#define DAP_PACKET_SIZE 255U // 255 for USB HID
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
|
@ -37,11 +37,12 @@ int kSock = -1;
|
|||
|
||||
void tcp_server_task(void *pvParameters)
|
||||
{
|
||||
uint8_t tcp_rx_buffer[768];
|
||||
uint8_t tcp_rx_buffer[1024];
|
||||
char addr_str[128];
|
||||
int addr_family;
|
||||
int ip_protocol;
|
||||
|
||||
int on = 1;
|
||||
while (1)
|
||||
{
|
||||
|
||||
|
@ -71,6 +72,9 @@ void tcp_server_task(void *pvParameters)
|
|||
}
|
||||
os_printf("Socket created\r\n");
|
||||
|
||||
setsockopt(listen_sock, SOL_SOCKET, SO_KEEPALIVE, (void *)&on, sizeof(on));
|
||||
setsockopt(listen_sock, IPPROTO_TCP, TCP_NODELAY, (void *)&on, sizeof(on));
|
||||
|
||||
int err = bind(listen_sock, (struct sockaddr *)&destAddr, sizeof(destAddr));
|
||||
if (err != 0)
|
||||
{
|
||||
|
@ -101,6 +105,8 @@ void tcp_server_task(void *pvParameters)
|
|||
os_printf("Unable to accept connection: errno %d\r\n", errno);
|
||||
break;
|
||||
}
|
||||
setsockopt(kSock, SOL_SOCKET, SO_KEEPALIVE, (void *)&on, sizeof(on));
|
||||
setsockopt(kSock, IPPROTO_TCP, TCP_NODELAY, (void *)&on, sizeof(on));
|
||||
os_printf("Socket accepted\r\n");
|
||||
|
||||
while (1)
|
||||
|
|
17
sdkconfig
17
sdkconfig
|
@ -123,8 +123,8 @@ CONFIG_TASK_WDT_PANIC=y
|
|||
CONFIG_TASK_WDT_TIMEOUT_15N=y
|
||||
CONFIG_TASK_WDT_TIMEOUT_S=15
|
||||
CONFIG_RESET_REASON=y
|
||||
CONFIG_WIFI_PPT_TASKSTACK_SIZE=2048
|
||||
CONFIG_EVENT_LOOP_STACK_SIZE=2048
|
||||
CONFIG_WIFI_PPT_TASKSTACK_SIZE=4096
|
||||
CONFIG_EVENT_LOOP_STACK_SIZE=4096
|
||||
# CONFIG_ESP8266_OTA_FROM_OLD is not set
|
||||
# CONFIG_ESP8266_BOOT_COPY_APP is not set
|
||||
CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
|
||||
|
@ -135,9 +135,9 @@ CONFIG_WIFI_TX_RATE_SEQUENCE_FROM_HIGH=y
|
|||
# CONFIG_ESP8266_WIFI_QOS_ENABLED is not set
|
||||
# CONFIG_ESP8266_WIFI_AMPDU_RX_ENABLED is not set
|
||||
# CONFIG_ESP8266_WIFI_AMSDU_ENABLED is not set
|
||||
CONFIG_ESP8266_WIFI_RX_BUFFER_NUM=26
|
||||
CONFIG_ESP8266_WIFI_LEFT_CONTINUOUS_RX_BUFFER_NUM=4
|
||||
CONFIG_ESP8266_WIFI_RX_PKT_NUM=7
|
||||
CONFIG_ESP8266_WIFI_RX_BUFFER_NUM=28
|
||||
CONFIG_ESP8266_WIFI_LEFT_CONTINUOUS_RX_BUFFER_NUM=8
|
||||
CONFIG_ESP8266_WIFI_RX_PKT_NUM=16
|
||||
CONFIG_ESP8266_WIFI_TX_PKT_NUM=6
|
||||
CONFIG_ESP8266_WIFI_NVS_ENABLED=y
|
||||
CONFIG_ESP8266_WIFI_CONNECT_OPEN_ROUTER_WHEN_PWD_IS_SET=y
|
||||
|
@ -183,9 +183,8 @@ CONFIG_TCPIP_RECVMBOX_SIZE=64
|
|||
CONFIG_LWIP_ARP_TABLE_SIZE=10
|
||||
CONFIG_LWIP_ARP_MAXAGE=300
|
||||
# CONFIG_LWIP_ESP_GRATUITOUS_ARP is not set
|
||||
CONFIG_LWIP_SOCKET_MULTITHREAD=y
|
||||
# CONFIG_LWIP_SOCKET_MULTITHREAD is not set
|
||||
CONFIG_ENABLE_NONBLOCK_SPEEDUP=y
|
||||
CONFIG_SET_SOLINGER_DEFAULT=y
|
||||
CONFIG_ESP_UDP_SYNC_SEND=y
|
||||
CONFIG_ESP_UDP_SYNC_RETRY_MAX=5
|
||||
CONFIG_LWIP_MAX_SOCKETS=10
|
||||
|
@ -214,13 +213,13 @@ CONFIG_ESP_DNS=y
|
|||
CONFIG_DNS_MAX_SERVERS=3
|
||||
# CONFIG_LWIP_NETIF_LOOPBACK is not set
|
||||
CONFIG_TCP_HIGH_SPEED_RETRANSMISSION=y
|
||||
CONFIG_LWIP_MAX_ACTIVE_TCP=5
|
||||
CONFIG_LWIP_MAX_ACTIVE_TCP=16
|
||||
CONFIG_LWIP_MAX_LISTENING_TCP=8
|
||||
CONFIG_TCP_MAXRTX=12
|
||||
CONFIG_TCP_SYNMAXRTX=6
|
||||
CONFIG_TCP_MSS=1460
|
||||
CONFIG_TCP_SND_BUF_DEFAULT=2920
|
||||
CONFIG_TCP_WND_DEFAULT=5840
|
||||
CONFIG_TCP_WND_DEFAULT=10240
|
||||
CONFIG_TCP_RECVMBOX_SIZE=16
|
||||
CONFIG_TCP_QUEUE_OOSEQ=y
|
||||
CONFIG_TCP_OVERSIZE_MSS=y
|
||||
|
|
Loading…
Reference in New Issue