0
0
Fork 0
wireless-proxy-esp32/README_CN.md

11 KiB
Raw Blame History

image

Build Status master  Build Status develop

 PRs Welcome %e2%9d%a4

简介

只需要一枚ESP8266即可实现的无线调试器通过USBIP协议栈和CMSIS-DAP协议栈实现。

👉在5M速度范围下擦除并下载100kb大小的固件(Hex固件) 实测图:

特性

  1. 支持的调试协议模式和调试接口:
    • SWD(SW-DP)
    • JTAG(JTAG-DP)
    • SWJ-DP
  2. 支持的USB通信协议
    • USB-HID
    • WCID & WinUSB (默认)
  3. 支持的调试跟踪器:
    • UART TCP桥
  4. 其它
    • 通过SPI接口加速的SWD协议
    • ...

连接你的开发板

WIFI连接

    固件默认的WIFI SSID是DAP,密码是12345678。你可以在wifi_configuration.h文件中修改WIFI_SSID WIFI_PASS字段来修改ESP8266连接的目标WIFI。你还可以在上面的配置文件中修改IP地址但是我们更推荐你通过在路由器上绑定静态IP地址

WIFI

ESP8266具有一个内置的mDNS服务仅ipv4. 你可以通过 dap.local 操作设备。

mDNS

调试接口连接

SWD接口 ESP8266引脚
SWCLK GPIO14
SWDIO GPIO13
TVCC 3V3
GND GND

JTAG接口 ESP8266引脚
TCK GPIO14
TMS GPIO13
TDI GPIO4
TDO GPIO16
nTRST optional GPIO0*
nRESET GPIO5
TVCC 3V3
GND GND

其它 ESP8266引脚
LED_WIFI_STATUS GPIO15
Tx GPIO2
Rx GPIO3 (U0RXD)

Rx 和 Tx 被用于UART TCP桥默然不开启此功能。


硬件参考电路

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

sch

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

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


编译固件并烧写

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

使用Github Action在线构建固件

详见:Build with Github Action

在本地构建并烧写

下面展示的是在Ubuntu20.04中使用终端安装依赖软件并编译烧录固件的操作流程。

  1. 下载本仓库到本地:
    $ 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软件开发套件
    $ git submodule init && git submodule update && cd ESP8266_RTOS_SDK
    
  3. 安装ESP8266 RTOS软件开发套件
    $ sudo apt install -y python3 python3-pip
    $ ./install.sh && . ./export.sh && cd ..
    
  4. 编译并烧录固件:
    # 编译固件
    $ python3 ./idf.py build
    # 烧录固件,“/dev/ttyS5”需要改成你对应的串口
    $ python3 ./idf.py -p /dev/ttyS5 flash
    

我们也提供了已经编译好的固件用于快速评估。在Releases中查看详细信息。

使用

  1. 获取USBIP项目
  • Windows: usbip-win
  • LinuxUSBIP作为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


文档

速度性能

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

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

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

对于OpenOCD用户

这个项目最初是为在Keil上运行而设计的但现在你也可以在OpenOCD上通过它来烧录程序。 注意如果你想使用40MHz的SPI加速器你需要在连接目标设备后指定速度否则会在开始时失败。

# 在使用flash指令前需要先运行
> adapter speed 10000

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

Keil的操作时序与OpenOCD的有些不同。例如OpenOCD在读取 "IDCODE "寄存器之前缺少SWD线复位序列。

系统 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"

如果闪存大小为2MBsdkconfig文件会看起来像这样

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工具检查你使用的ESP8266的闪存大小

esptool.py -p (PORT) flash_id

Uart TCP桥

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

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

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

uart_tcp_bridge

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


开发

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

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

版本修订信息

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上工作


致谢

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

许可证

MIT 许可证